aroundme_0_4_0/ 777 0 0 0 10170660274 6527 5aroundme_0_4_0/aroundme.sql 777 0 0 40010 10170662133 11154 0# This file is part of aroundme # # Copyright (C) 2003, 2005 Barnraiser # http://www.barnraiser.org/ # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) any # later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with program; see the file COPYING. If not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # # Table structure for table `am_abuse` CREATE TABLE `am_abuse` ( `abuse_id` int(11) NOT NULL auto_increment, `abuse_url` varchar(255) default NULL, `abuse_source` text, `reportee_user_id` int(11) default NULL, `assigned_user_id` int(11) default NULL, `abuse_note` text, `reportee_language_id` int(3) default NULL, `report_datetime` datetime default NULL, `report_status_id` int(11) default NULL, PRIMARY KEY (`abuse_id`) ) TYPE=MyISAM COMMENT='record of all instances of reported abuse'; # Table structure for table `am_acs_group_role` CREATE TABLE `am_acs_group_role` ( `role_id` int(11) NOT NULL auto_increment, `role_name` varchar(255) default NULL, `group_id` int(11) default NULL, `role_default` int(1) default NULL, PRIMARY KEY (`role_id`) ) TYPE=MyISAM COMMENT='access control system'; # Table structure for table `am_acs_permission` CREATE TABLE `am_acs_permission` ( `section_id` int(3) default NULL, `role_id` int(3) default NULL, `privilege_id` int(3) default NULL, `resource_id` int(3) default NULL ) TYPE=MyISAM COMMENT='access control system'; # Table structure for table `am_activity` CREATE TABLE `am_activity` ( `activity_id` int(11) NOT NULL auto_increment, `section_id` int(11) default NULL, `section_item_id` int(11) default NULL, `activity_create_datetime` datetime default NULL, `activity_start_datetime` datetime default NULL, `activity_start_day` int(11) default NULL, `activity_start_month` int(11) default NULL, `activity_start_year` int(11) default NULL, `activity_start_hour` int(11) default NULL, `activity_start_minute` int(11) default NULL, `activity_start_weekday` int(11) default NULL, `activity_end_datetime` datetime default NULL, `activity_end_day` int(11) default NULL, `activity_end_month` int(11) default NULL, `activity_end_year` int(11) default NULL, `activity_end_hour` int(11) default NULL, `activity_end_minute` int(11) default NULL, `activity_end_weekday` int(11) default NULL, `activity_title` varchar(255) default NULL, `activity_synopsis` text, `activity_body` text, `activity_location` varchar(255) default NULL, `activity_frequency` int(11) default NULL, `file_id` int(11) default NULL, `user_id` int(11) default NULL, `activity_type_id` int(11) default NULL, `status_id` int(11) default NULL, PRIMARY KEY (`activity_id`) ) TYPE=MyISAM; # Table structure for table `am_activity_user` CREATE TABLE `am_activity_user` ( `activity_user_id` int(11) NOT NULL auto_increment, `activity_id` int(11) default NULL, `user_id` int(11) default NULL, `activity_user_create_datetime` datetime default NULL, `activity_user_edit_datetime` datetime default NULL, `activity_user_status` int(11) default NULL, `user_id_edit` int(11) default NULL, PRIMARY KEY (`activity_user_id`) ) TYPE=MyISAM; # Table structure for table `am_activity_task` CREATE TABLE `am_activity_task` ( `task_id` int(11) NOT NULL auto_increment, `user_id` int(11) default NULL, `activity_id` int(11) default NULL, `task_type_id` int(3) default NULL, `task_title` varchar(255) default NULL, `task_synopsis` text, `task_start_datetime` datetime default NULL, `task_end_datetime` datetime default NULL, `task_create_datetime` datetime default NULL, `task_user_requirement` int(11) default NULL, PRIMARY KEY (`task_id`) ) TYPE=MyISAM; # Table structure for table `am_activity_task_user` CREATE TABLE `am_activity_task_user` ( `task_user_id` int(11) NOT NULL auto_increment, `task_id` int(11) default NULL, `user_id` int(11) default NULL, `task_user_create_datetime` datetime default NULL, `status_id` int(2) default NULL, PRIMARY KEY (`task_user_id`) ) TYPE=MyISAM; # Table structure for table `am_blog` CREATE TABLE `am_blog` ( `blog_id` int(11) NOT NULL auto_increment, `section_id` int(1) default NULL, `section_item_id` int(3) default NULL, `blog_title` varchar(255) default NULL, `blog_synopsis` varchar(255) default NULL, `blog_body` text, `language_id` int(3) default NULL, `degree_id` int(3) default NULL, `level_id` int(3) default NULL, `blog_create_datetime` datetime default NULL, `genre_id` int(3) default NULL, `blog_allow_comments` int(1) default NULL, `file_id` int(11) default NULL, `user_id` int(11) default NULL, PRIMARY KEY (`blog_id`) ) TYPE=MyISAM; # Table structure for table `am_bookmark` CREATE TABLE `am_bookmark` ( `item_id` int(11) default NULL, `cms_item_type_id` int(3) default NULL, `bookmark_type` int(1) default NULL, `user_id` int(11) default NULL, `bookmark_lastview_datetime` datetime default NULL ) TYPE=MyISAM; # Table structure for table `am_cms` CREATE TABLE `am_cms` ( `section_id` int(1) default NULL, `section_item_id` int(3) default NULL, `item_id` int(11) default NULL, `cms_item_type_id` int(2) default NULL, `cms_publish_datetime` datetime default NULL, `status_id` int(1) default NULL, `level_id` int(1) default NULL, `language_id` int(3) default NULL, `genre_id` int(3) default NULL, `cms_sticky` int(1) default NULL ) TYPE=MyISAM COMMENT='content management system'; # Table structure for table `am_comment` CREATE TABLE `am_comment` ( `comment_id` int(11) NOT NULL auto_increment, `comment_parent_id` int(11) default NULL, `item_id` int(11) default NULL, `cms_item_type_id` int(3) default NULL, `comment_body` text, `comment_create_datetime` datetime default NULL, `user_id` int(11) default NULL, PRIMARY KEY (`comment_id`) ) TYPE=MyISAM; # Table structure for table `am_file` CREATE TABLE `am_file` ( `file_id` int(11) NOT NULL auto_increment, `section_id` int(1) default NULL, `section_item_id` int(11) default NULL, `file_name` varchar(50) default NULL, `file_suffix` varchar(4) default NULL, `file_create_datetime` datetime default NULL, `file_title` varchar(255) default NULL, `file_size` int(11) default NULL, `user_id` int(11) default NULL, PRIMARY KEY (`file_id`) ) TYPE=MyISAM PACK_KEYS=0; # Table structure for table `am_forum_subject` CREATE TABLE `am_forum_subject` ( `subject_id` int(11) NOT NULL auto_increment, `topic_id` int(11) default NULL, `subject_title` varchar(255) default NULL, `file_id` int(11) default NULL, `user_id` int(11) default NULL, `subject_hidden` int(1) default NULL, `subject_body` text, `subject_create_datetime` datetime default NULL, `subject_locked` int(1) default NULL, `subject_sticky` int(1) default NULL, PRIMARY KEY (`subject_id`) ) TYPE=MyISAM; # Table structure for table `am_forum_topic` CREATE TABLE `am_forum_topic` ( `topic_id` int(11) NOT NULL auto_increment, `section_id` int(1) default NULL, `section_item_id` int(11) default NULL, `topic_title` varchar(50) default NULL, `topic_synopsis` varchar(255) default NULL, `topic_hidden` int(1) default NULL, `topic_create_datetime` datetime default NULL, `user_id` int(11) default NULL, PRIMARY KEY (`topic_id`) ) TYPE=MyISAM; # Table structure for table `am_group` CREATE TABLE `am_group` ( `group_id` int(11) NOT NULL auto_increment, `group_title` varchar(255) default NULL, `group_synopsis` varchar(255) default NULL, `group_home_synopsis` text, `group_rules` text, `group_election_date` date default NULL, `language_id` int(3) default NULL, `group_create_datetime` datetime default NULL, `group_registration_type` int(11) default NULL, `group_from_age` int(11) default NULL, `group_to_age` int(11) default NULL, `genre_id` int(3) default NULL, `group_cms_auto_publish` int(1) default NULL, `user_id` int(11) default NULL, `file_id` int(11) default NULL, `group_visibility` int(1) default NULL, `group_file_allocation` int(11) default NULL, `status_id` int(3) default NULL, PRIMARY KEY (`group_id`) ) TYPE=MyISAM PACK_KEYS=0; # Table structure for table `am_group_membership` CREATE TABLE `am_group_membership` ( `membership_id` int(11) NOT NULL auto_increment, `membership_number` varchar(100) default NULL, `group_id` int(11) default NULL, `status_id` int(3) default NULL, `role_id` int(11) default NULL, `membership_create_datetime` datetime default NULL, `user_id` int(11) default NULL, `profile_id` int(11) default NULL, `node_id` int(11) default NULL, PRIMARY KEY (`membership_id`) ) TYPE=MyISAM; # Table structure for table `am_library` CREATE TABLE `am_library` ( `library_id` int(11) NOT NULL auto_increment, `library_page_name` varchar(100) default NULL, `section_id` int(1) default NULL, `section_item_id` int(11) default NULL, `library_default` int(1) default NULL, `library_title` varchar(255) default NULL, `library_synopsis` text, `library_body` text, `file_id` int(11) default NULL, `level_id` int(3) default NULL, `degree_id` int(3) default NULL, `user_id` int(11) default NULL, `library_allow_comments` int(1) default NULL, `library_create_datetime` datetime default NULL, PRIMARY KEY (`library_id`) ) TYPE=MyISAM; # Table structure for table `am_poll` CREATE TABLE `am_poll` ( `poll_id` int(11) NOT NULL auto_increment, `section_id` int(1) default NULL, `section_item_id` int(11) default NULL, `poll_question` varchar(255) default NULL, `poll_start_datetime` datetime default NULL, `poll_end_datetime` datetime default NULL, `poll_anon` int(1) default NULL, `user_id` int(11) default NULL, `poll_create_datetime` datetime default NULL, `vote_required` int(1) default NULL, PRIMARY KEY (`poll_id`) ) TYPE=MyISAM; # Table structure for table `am_poll_answer` CREATE TABLE `am_poll_answer` ( `answer_id` int(11) NOT NULL auto_increment, `user_id` int(11) default NULL, `poll_id` int(11) default NULL, `option_id` int(11) default NULL, `current_answer` int(1) default NULL, `answer_create_datetime` datetime default NULL, PRIMARY KEY (`answer_id`) ) TYPE=MyISAM; # Table structure for table `am_poll_option` CREATE TABLE `am_poll_option` ( `option_id` int(11) NOT NULL auto_increment, `poll_id` int(11) default NULL, `option_body` varchar(255) default NULL, `option_create_datetime` datetime default NULL, `user_id` int(11) default NULL, PRIMARY KEY (`option_id`) ) TYPE=MyISAM; # Table structure for table `am_shoutbox` CREATE TABLE `am_shoutbox` ( `shoutbox_id` int(11) NOT NULL auto_increment, `user_id` int(11) default NULL, `shoutbox_body` varchar(200) default NULL, `shoutbox_create_datetime` datetime default NULL, PRIMARY KEY (`shoutbox_id`) ) TYPE=MyISAM; # Table structure for table `am_sn` CREATE TABLE `am_sn` ( `user_id` int(11) default NULL, `profile_id` int(11) default NULL, `degree_id` int(3) default NULL, `sn_total` int(11) default NULL, `sn_update_datetime` datetime default NULL ) TYPE=MyISAM; # Table structure for table `am_statistic` CREATE TABLE `am_statistic` ( `section_id` int(1) default NULL, `section_item_id` int(11) default NULL, `statistic_type_id` int(3) default NULL, `total` int(11) default NULL, `user_id` int(11) default NULL ) TYPE=MyISAM; # Table structure for table `am_template` CREATE TABLE `am_template` ( `template_id` int(11) NOT NULL auto_increment, `template_title` varchar(50) default NULL, PRIMARY KEY (`template_id`) ) TYPE=MyISAM; # Table structure for table `am_user` CREATE TABLE `am_user` ( `user_id` int(11) NOT NULL auto_increment, `user_number` varchar(50) default NULL, `user_firstname` varchar(100) default NULL, `user_surname` varchar(100) default NULL, `user_email` varchar(100) NOT NULL default '', `user_hometown` varchar(100) default NULL, `user_dob` date default NULL, `user_gender` int(1) default NULL, `language_id` int(3) default NULL, `template_id` int(3) default NULL, `user_homepage` varchar(50) default NULL, `status_id` int(3) default NULL, `role_id` int(11) default NULL, `user_password` varchar(32) NOT NULL default '', `user_create_datetime` datetime default NULL, `active_time` timestamp(14) NOT NULL, `user_file_allocation` int(11) default NULL, `node_id` int(11) default NULL, PRIMARY KEY (`user_id`) ) TYPE=MyISAM PACK_KEYS=0; # Table structure for table `am_user_blocked` CREATE TABLE `am_user_blocked` ( `user_id_blocker` int(11) default NULL, `user_id_blocked` int(11) default NULL, `profile_id_blocked` int(11) default NULL, `block_datetime` datetime default NULL, `block_description` varchar(200) default NULL ) TYPE=MyISAM; # Table structure for table `am_user_invited` CREATE TABLE `am_user_invited` ( `invited_email` varchar(100) default NULL, `user_id` int(11) default NULL, `invite_create_datetime` datetime default NULL ) TYPE=MyISAM COMMENT='logs pending invites'; # Table structure for table `am_user_language` CREATE TABLE `am_user_language` ( `user_id` int(11) default NULL, `language_id` int(3) default NULL ) TYPE=MyISAM; # Table structure for table `am_user_message` CREATE TABLE `am_user_message` ( `message_id` int(11) NOT NULL auto_increment, `owner_user_id` int(11) default NULL, `from_user_id` int(11) default NULL, `to_user_id` int(11) default NULL, `message_status` int(3) default NULL, `message_box` int(3) default NULL, `message_subject` varchar(50) default NULL, `message_body` text, `message_create_datetime` datetime default NULL, `message_type` int(3) default NULL, PRIMARY KEY (`message_id`) ) TYPE=MyISAM PACK_KEYS=0; # Table structure for table `am_user_profile` CREATE TABLE `am_user_profile` ( `profile_id` int(11) NOT NULL auto_increment, `user_id` int(11) default NULL, `profile_default` int(1) default NULL, `profile_name` varchar(50) default NULL, `profile_summary` text, `profile_gender` int(1) default NULL, `profile_nic` varchar(50) default NULL, `profile_create_datetime` datetime default NULL, `profile_msn_account` varchar(100) default NULL, `profile_yahoo_account` varchar(100) default NULL, `profile_icq_account` varchar(100) default NULL, `profile_mobile_phone` varchar(50) default NULL, `profile_skype_account` varchar(50) default NULL, `profile_hometown` varchar(50) default NULL, `profile_allow_comments` int(1) default NULL, `profile_allow_msg` int(1) default NULL, `file_id` int(11) default NULL, PRIMARY KEY (`profile_id`) ) TYPE=MyISAM PACK_KEYS=0; # Table structure for table `am_user_relation` CREATE TABLE `am_user_relation` ( `user_id` int(11) default NULL, `user_id_friend` int(11) default NULL, `node_id` int(11) default NULL, `relation_create_datetime` datetime default NULL, `relation_type_id` int(3) default NULL ) TYPE=MyISAM; # Table structure for table `am_user_session` CREATE TABLE `am_user_session` ( `session_id` int(11) NOT NULL auto_increment, `user_id` int(11) default NULL, `session_md5` varchar(32) default NULL, `session_lastused` timestamp(14) NOT NULL, `session_firstused` timestamp(14) NOT NULL, `session_ip` varchar(15) default NULL, PRIMARY KEY (`session_id`) ) TYPE=MyISAM; # INSERT DEFAULTS ----------------------------------------- INSERT INTO `am_template` VALUES (1, 'am_default');aroundme_0_4_0/asset/ 777 0 0 0 10170722752 7646 5aroundme_0_4_0/asset/broken_image.png 777 0 0 614 10155266621 13043 0PNG  IHDR #0hgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEtRNSIDATxb`%" q@T@P (@AWS  T@!#+ d0)]@A/`8ADP@T@XP ,,0yB.S@M n  " " @T@?@T` N~G~IENDB`aroundme_0_4_0/asset/group/ 777 0 0 0 10170573677 11014 5aroundme_0_4_0/asset/group/1_01sumeos14289.jpg 777 0 0 24407 10163056646 14126 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?eC*\^V[ x|8Ƞ5<(cRcU,f=Ƣm/ g9SYqqIbUBk@h4+L~"(pM8Rc:'%K1 2F>mTl.>[I-bIyXN ԮSWUH偠G  jB$`=+ @^r=M9*>Y 4;ˑ 5/\~j,8/ֳu{(Zݜ8gd/j:u3Ӡ>ڽ_N S6+s/;sHd$ 5\$ @]UZ&摀?/93+i'#Ȫ`p=*;2[Ht栶R%"Oӡ =%p @=W[S*rDvki%ttUT5*07$T+}޿ZwosX%2&7(b<E'1"k7,ũLbi֠t '׮RO~k;Vx}PQ^xc(Ҽ IT _21F7Z*# 28WBHLCcB4lGQY OK&>3a)rUNayG\\GFw~U'7hG-Ϻ-Z ʲ"6XI@~kQhY'jNBfQv';V ܊=`~# N>W;fsM=HF9ylةϮ)v+ 9=wU{[ "vaי5#.xv׸9/ 2virka~GcHd*MלpZ "Ƹa 5fLD>Sc[jnGՌ4){PukUE:Q&Kej/4FqӭK[*3ҵڱKދ3 1yM."Xd*j"nk'Q1H:0y19?rl9ƺE%;Q5e'k\'H/5x'^m-CTHNZ_x*EB6#Xu.`8W5 CB:ljP(7vyW}{#;Dy25W卥q++cOz2Omqc(FcDq8]WI!W#hH˻A\Up-aOv⟆qTe9'+gevMK @J ]֩,Ҭ*Qx"l ?JЕEBUfr^Ѯ5HYa l$v>D`*`4tKT.:d}j-HWʴg)ǡ+~BcuZwbR66\q֨Ǻ#ۍ6#H&7fiFv;Zx)XdvKPqҹh^Mf˩N#g_R,*ڌn {գ$9RsXZsK؛}QTi Vq)\Åt*TPN?EH&n32ԯRc@J \Ro`NJ2mЍNGN:H$NDՏ5ǰ Fu9aвșN>7..R2:) L֔_ʣ>fӊӭ.uI6$zWi6O.H-ya2[_G,pp+7V3%CՊl&l&3=y#e!6ph2\ ?ԯ+#6'VS1okXO?8SғϟG;+5|=mө 14uG]7@'4s>I5kWX#UO[ FXt;*D<sR3JP60E+3F}BŻ .Ĩ˨ NNʌlV9$=5av2MBZ~ )c|H6}zƲ,[kRFL:If'$+ϠZt0k*x偊7T㕍O WZeicAxMtѨJ t}MoYivj(?kAIa?JsosITr܋i}qVʪ2F}GSM2eO .X9QP lE y/lT~c&tjl!H #\U1AU3NdR;~6dOR?1Eo,Ij> 8n`xNۧry\I$I1 iGlgpמY76Ozkjk~!]ϝ[gڴ]^vUccָ;P\!QjG3[.de-<+Gmq /=#eb~5(83ʊ떠۹d[^iH QS`Qa=w>Ivcg23<ίڀH^Ry*G4nX\$ǰ?;LۿBsYzźb$_ ~|Jԛ#V9OsZSW%'AoYq<}$PN Al8Ttgm \۷eA\† [ڌ\*VL1[Pg-D(tp ?,tl w0XLrƲ,jT>h&]Ɵ`RiKp q2}=WӵMZ%ۈWWC{mqjYB!5sMm^s\SZGs[)Z+'l+w~kmUWUd 7tґ +ǿq7z=wm#b(ktm./6@kdazִ &iN x~OFɍNpO=k~TaW1Ȭ0Uaדj^;yA +\λut(^Mt(_jmHfiUxNvQ%9# דCh= "g$6ϥ,E6̺Ѿ 78I1"]@O{O᳏Ϡ5bPԡ2N$EbG"\ZWh2҂y;:P97P3Hp_XL?ܧqȐ˜X@y΍KHRM ̎k|I9WjH #ֻ]gdZ5ݞ?J:Ech7xYhFN$: qKi"IeeG{r+NLoiX n8KmėRe,7`_ocV:^NaM)C]C.ϷjvbzBZ&쟻@f{ӃEUH|p}hXHJ {O8av~bE wC\Zz%Jڠ;onb_ppj̟z^{Gdǩepzvn&5bϸP0Y,e5>XOJ 9泔3* 5&̉s'5R]OPDG3/faoa+_srGh#3OڳU]]\;js0Xb ڽ1HHxѽ23H~ǃQӸWX&ӒGĞ#}枣W "29 #uы,\6!Ҵ5A"PB=tHWlL޿.&V"`|CT,T-=kj{{d[p#QHH>iMG"kGF3VI]Fت}NlZy숮1V>) Ucҹ+W4!nFq1UcK^y7'^J wP1QlPUP0ٝK,ї>;=23UeQ7[!ްV"Yc}Mm/v6FGkYnaR xwQZ>+EkNdW% _YgX\~ Q59;o8BMk$*׸<9똶ִ]4`NDR'm\O&mb)Gosע26m5.Y񻪷֓Q}C}=oNn^_Kdews9tʞ4[3??Xz>jqY\+af,Y1c VS ys(no1z r9`GfFÍĊWc_Ȣ16(Ʉ@c@UH?Zq#q[i{EX ئ39cu>ZF3L,DNG{)``~Tbt B"5)dTbiS,p֗ ҸW4E r=k]XCs8c+f]lxƧSbejgM 4̹P~t ):7WTqJhex;\@mGsRo^_ihwŸ=r:W]+Q,l$vpoz5]o泼^F?NNd [TnkGjyh$}Eg,i[$6IvVZBUP0JZOޑ_wpܧA$s+/6]d67)'ծ^O5.]\u`pkEʮ Hx>e5Y&91gNָZڗʄ~^ K)BnXdW/3k;mnGF :VZn{wqSG$v;m]5</ơ*& g{ԯR[Imy$KP\]2?OXUPg>LH8rOVnMȧY=ʕ影[Ӯ5Κ1s]^VX<=X>(y_biJϽaR_46&uՐ@9n `*a>|N>g͏v>jppF;fb_3iZ+nsѷvH3&@JaHϭMyN>B̒5nX%McbpZSLH0Glw@y6)L>n9ރa#g(~Ɂ`w&r0F1\^o=ƔXX0޹WᤵKێGz}ׅV r[H-ǵ0Ocvq=^2-֤,6;U '6;ԱczNYyӄasRO67;ce#ң~Ep><2 pp3"qփt\WeU9ʚdS DFGlSjXD8NFIHƁH'-SC&F=Asǖ!\qFΕn' aB`BN~h.o*OJʟl1Ցֈ*9ryJ&R]HX-AD^ SBp=N'k-^`ݻƩh>=hE&zrW>aɪwms%ee\8?#[ӭ(؛ynvy%/sMyDdbG}cu#䐟(?j?\ 54  }=t2lV iB?89h)M|rM0LeELa{b9R3!\9`A*AgNñTH{EYhbOZ)(Чj GةTd&$ Pd >ijRyi4 !iV8 N |j,+[9 1J jnFJs$66JĩR[-OBq?4+}P986.*i.P$FG$uO@v /BirjHP?Z@J2$8G?C*.v99CqIO^(q{LP:4>8` LmF4<R7 M7 p~4G 4F lJ]UbO>)8jo)f1@\̪G\cq0G${][WGY.,~WytuЏ)YŹ1w̸Қ!\d+ &N3OF9|‑ӟ xR?'|PJ.HsS|ޘ?(hY:~$ڋ1W?Z)|VS JG9nJu9ڟuiG'B xejjx$o[a$r`d6I'ceTomlØ#9E5V)nȨ=HuN8qՕBJs,$9){(n[1.nBZAY4mZ?Z˷֥M`цO9K(Cߵj8_*3M*_̉QbԇHQ@I;D5%l3p;Ej% l+Io4Y9$)t=>S`) SN[ s ,þѹ+cJ1omrܗ5`[2e-VCVB)Qi/V _ohZN9,簪#1f2mzӺO`a@u# * *63d f 5x4kƋr`K KKЕ99Hi`IȤ19IV39Cj8.[ơhY\Iipĉ?rz[#( GXqR0p6eWnsҐ ѡ#u5}KsQ~S@A\(U(fxjIz4HTdP;yKcRTdsPơ؆qUlz*_39n4Qvaroundme_0_4_0/asset/group/1_53702702.jpg 777 0 0 32010 10163227764 12741 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YMTifrq{҂UвT@+<Ԕtuy *p sh6 cӷ n=@TpH2xj+Ì$Z~@` X~Kź'֝}Y%,l]s| yKS}Cڣ#׊nʹg944[ڬp6=j8]zgQgb.O1\,p@j59m۸OM\' *Fo,H T21ވ 6R HQ7wbNJ9c8wR8"8i<ǖmc9,99K21S8䞾ixU_u\nf sHKgX[#smII;39tUݙzsRy IU 4E$׎!(2i{;|Cʪ c|n-p:b7HPX^#֋\12Y;S230 xKUaK6Ѝ1sOz"TdR ZMe9HJ"RLjv!*nPӚ ˍ)e\eCs:@ңm1|ivmeۻTĠPc<=y% $`X5rmnDРxTg_8i/Zl$oo\s\dW#q8Riq֘α 1D 6玸t9(+).X4S 3Ҋ$I.O*PJܼqtpWSV"qکVZ4ru:bw3dNAP2:(+qns[HdyR1*qMNX 9u|}ءCo$`J$l8Pe P=čC1{5188NNx^5c$guAʲTS]I')rNyz\ֶ).У#'9!U۴DfnsP@NLNO=k'M^&k_hMP9qESN}M%z;3})(qp1Q~ă=nm42Rd{C4.ԃU_Q>7gܡGsOFW-BzF4[8n R9 F& 0q>)(n}Gݪr+ :jAt+=q$%|qn-\&Nǵ BzR2#8䊧 ngMO%?cTrVn ,rzfVTr>nF;Ә/5b>L5m۩+bf! Jz m{RF'&{e{S+=*y$b#j%w6y>&f6Ŗ%* \iQ,$y$qML: b1u<[}""QR?9q*B] q sGُ9U(\JV(e N'cU|;S.VaqF;;{Ģc%wFH>ikiR@cF?/zP;sGA^ԪlrzgR [xr8h& ~kZvm0 0yߵrVWWiy- %[CHJyS\`tq'O}l̤26v:#5I{#ϴWфxP+t#;}n1KFK[Q$'1Wvj"V"Av?KX,]1ǽO7++SQqkA-ܯ(둞Ʋ{v#eE <Vm4EHB pOr:Wˍ 7>VZh˯K iVCLsER7Ll1Wb+@-tP w`ct:.{[ʉJ ǵ`)p.%!H;͔0?{?%Byi=w]ĚrVǥ%tF+[Og?;ϖ06' gNl2<;?>i2ym3/ GJ0$+ҭr%R҆*A^yjqQPӁӧ~ws1OoW9ǰqy歷bf,ۘ|޺>gvbm-NH( H:{\%W*ƼdUac˛o$b$p[kziV)'fLSd}Ml̯i1t歏L#Am b2ttv3289: Y` AUebi"ъA+[e1bB@{Umgݱp* V(t v gצj ӮKᮑf Yq]ceqce^큑_o*ޤ pOCS(i}ZwOkr&W]`dsz[{+soM2Lewmc֭AvI܅OZ=9.}jׄVk1 ]]ޟOҶo!WN=sOԮ27,:Ҫ4Y2Gx2^IKm';NCtJTv[{_/al? q@4[~@/@=9ޣFId[,TDOڦoWbZ#rwّ%V1#: >ӚFaq%M򧓆A:MCPFe`l`A$s j+vأLv:`E7o\mG7mz1I犿E )0ylzgj䯦*d9ohbK;TyF:cO+jĎK #)tIbND'*'P̑b\R"89U=JȘ@U8 ~}՛w/ H 7 CG<JuCthrzsϮ*(^L0((0jŝvAҖ ѕj6vIqs #FPN:#Umi!V=AWVL'ۏ_~3ZOMY1 cl>0p1߿,8AЮzAܘw地a֨`Pu>iT{R8$֮Yމ?=? f\ 9;OU>LG)ݷ!?T03 N7Zivi7fV!$Оz֨'lH% OT+(-Ѳ(W8Oq\Wm'c~;5+݅wN0Ri!FӼbQ!R vg=> aU"*J.3f:>BC4~e+>z?F_1Tp{ZSV"L]jTw9$& eD}^ [[)e.QLEيv-³+98=jh.fgR2#βtɌdX@^;)30?fjUf# .;qۧnKĊ*qe;yh~֧A8;tI$H=ޟ@,L.1g̍X* ݀iDĹ7rDϩsO#y!p'R0áךsI^7'.ρƷJ7$kef!p8sW4}Dj,0<L$c+czdQ" 0dj΂z<m9A=8#؞+}NȔ/ ,`'oUG=ZZ6(Nq=pc(,*pW1?zn11,:nЛ ּ%cF;Mh HNx/s1tnWT9듏ҟ,I%r-^%ԃXAhxAy1ZԈÓ/# Xwp`p9Ulj&1`xZZ%uKI؅i ``cZ]Ԗ9>C `0yZ{:FۍW7oaz9n$c ,yc` ?T&-kIlϽBX|'8 ڛ-ǒ92%?Oׯ^iO3mr@t9l~D[j֤cr򭌌9`#&檙NNi.aʀGe{ܿ7Fxq:!ŞSg p9=3PF c鎵~F-(#%kj%bv `\,! pxvp%Ȥgcp1;f&6YCTdBh3)_43e`L:)ݕux&p>Cc'ֳUØvI>QBۭb1^=.,cpd;1}{qRzXijk Ēy's"]LTm$)n\T]|0q5 sKl6e2N1c&UXdf9;vNdX8FS}*YHT.Is{};~dWǡg$Jm)Ĵ{miLJ)9P*Ǖ#}ެ 7?QN$nGR6vMPa#f8uH=hfEېB'\ekBnhtEYXbedgew.xniF Wva`]4al9$Rx(n\ [͍_  푞ޒM?2 /z M$!̊BXgBY'$<Ηe |?LP %eZƂ5b8r;>VU.1ҬD1"=OΣtWR܎q=Ai].jHhO] NӷPad2SotM?Ȫdlͷ8l84׌pjvK9I_Wd{F ߷Z9w6O]cQs`:RiHiؚd@:`qӊin}oؼ9 p'V|sNE6w;9PO 8=+oM\,eI7( ̋.pG=G~?+6K!:9qdppFzT>"H8vV2^wt<JTl\U'dCWcg< 3LDX2I`reV+#;RA3y-XKӗKd,$$TLxnp MBNw[89ʬrXB٢) dz~5.V,d*\j"Qت8cĤ9~4o޼($,yd2䃜 `8b0s xВyR| bKT٫s\ҤA=?}9F0i{2wD$ppώO`JZ&G xҽ *RܞMEe,5Z4]Cybp( ­}ΉaKvH `þ=*ZHF'M`*Z;=bdd#zǽ#cEXe(>EFo'(d*MaX;H&`Px7:R"3Wg4YD/?j ޺3NN28jc!riQBI$`4sCbА;_ZI008Q$`2OJtQw@n]$B,=(KMInPdEpHу5(yv-]H,n2z+8;qS*83>wbyuz!cO;䒅QޚxrqڴifwrsJ௽#Ivbb!G8ZK?ka4O/ ox'+d{pzG 1VܥH8$w;TYJMbd2[I%RJr3*X.bG2 lyiK'iv׹JW$!Tׯ_ʪJIYGQӧ?JY@}Z#39 Nn4QJ{_HG6}IQMB܂D[1eQW 覃w}kJ"CކUv)]3n'Ze68?4QSSvT6C. PgAHH GJ(R$'5+8CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?@8(!wɤZYFI=^Y^[ tdppj44슌R`>sHdQԁ4\qژ!#4FK-rj(D@V1ʋ0ztVc$Rp* ]9>VVn"K8)MR!KSBnҊ,1KS⡙1ŽI'-Fx<<j7ގQܺjsKR W ^h\Xh r*h;oY݉'\1嶌wK_uk,qU,m%U"2[?ʹgIu0QT?7~?qz5MJI W/u 8HPc: KG%~{"lw6ﲫ|qw|׋+bܿÒx"AP[I"Rʟ]/scm*v8U:~alPIR+u2F' N2\?JnȄb>)(Kw:2> slH8?Ngm=ol@ٰIխ':kq [An Vc8Lzrns ަR+% z8b[k I@|t\h$ z p6;ӯY'Ի>LxSH*NS]fQ̚u_Cagzta@m- \ gHbꜣfxB-"y.iS"|N5"%1wګ(? ܠFެZJi8'T }nVGЃ0j|Q̺ k8hpDkɎ"{AJKA*cL25kz|:f%̤#Ӌkx/573 LqzՋ ̱\]:͸!R208ְլi EĊ sRm5vÍo%xV֧ŹıgӞzUQXem"ћK= ;⨐TZiKVKKHiʊMQi3bE&ih E0(2  ~uZkKkia:L˵{V|Ei&d o '^Y6]F;֥;EIJ*HDn '8 Z' 34Rvdp{]<PqW=kE ătM4( \(#'4FЩv&N1 >B"/'DU\8K"f[;Uڧ}K]%Lvc_ {[γjȅ u"yuY>ɀp;Q\ֳJ$j 'kv-4sb[tA;s5(.X9&+cƝ@&9c '#jWPdd߿n5ɤLY VUw+;]tjPE}.,7N6v|Qogsi#AlX) br4$-*0nxwQ젂Kt]?uآ=2ZY7GhdIf^0z}qP &s,MfD$3 g=k'J ؎NGXN矧&5Ht]:ݼ#ZLI' 6X8Л%gAl/f mk 'B}xgdOPq qX 㿶Ҵfʯ: $GaL'RϨ׺LfJp+'؜3Zwu2N.mއ$E-S*AR#ۯ|QQ0&{Pv*<*F۶N9z#n8o+F-* Y{&G+O^⠂gNT)#U':%gf$L"b.!.:*#mpXy{}+m䝑 цWb{+IGKh[?ێ1IIt,d?1UEl,I#. s`Rv[l`r 1?^ŕRZC$2~BmXT:$R2:7*a'XnbT<<*o5LedW隞_:$wvx%=GdւY^]DHy_V! Iv\98Egx3,*e>%|X@dg+k ` "AҦRe@ 8&~Ϲ-t℮1v󏻴ךoy!ӽp |=yp+5."Tx $`cӽvZHʁfa34-ins$I#~)MܑİmS9/{A7x-t?B.<FYdv? ZoJ] 3@Tp !2c{5-h:E\AqvOҦs4j6O QJhd`]k_5 } k h\*8 g׊R]WS BŴ|dv pikw Y1%laӯ\ B˒0{Z;[y+(> S~f~"5}ZF+o"KAp:eRbIco='UPh\Ʃ'[K)e3O0d2GҭI[BmOe67K%?Lmǿ8]ctOs*Sa$kZN[7VBB V%TrKڤN;cd}MTmkknjc$OWL{MxWkRjs9ӷNmZ[6iwFKWvz.GCg+_B״+{bw!z&&l:wp9'޼i7o?ž]Mt:MGij40O$qV]ʝ'#.eo%ذG>W7>16Ꮈ5ڶ ֚{ʬHو-=Ai3H,_,IpDrс &}jz,f8s<4}V"]Ts8;fl`"2Pő)^GH)0@Җqv:'k#8P~Ii=n.JPXe\:nMR x4r*B#aO*įnK&d8!;+rM$vgp*v]yw)?UyaRYAɈhBr0GeNSvKR}OD4lp2~qUx\;׸OPmŤ4cĝXN~+k(|7XgGܟQR2hok+~Nh@11ҹ#@A{Uc&G U8ϯR,0|*bqJЫϧ@Ͱd|7l 9EzrM3ŖWWzu$Vsd8}y38q]MǍ3.uM16x}Mp1ePpqN#¼GVIo~#&jvH.V@ {5 2JjZTF~YU9gIԮew8:r= gSxhONƈՓz kޓtd*۝vu3ï²7JsЂ;81L6C2ufO2E$8 \մChGL&1I מ6i|ȤO89fywLlLӭdR+ne-&uR5 inC)x'99Fjbܴ2ǹÐ\>&Ɗ)^5E%ēG=0GR7Th7[ L㢁NH-gֱ~ѹsOѭ4g:ifrű:}$WfNZJhmԏ2[*w :іJXW[Ҩz֗Beԯz1k|A|Z5͛Au?5'7Ks#[\3 VQc?Ƹɧ=Ն$*sd@rzu?MռW%WouJCl\ pCڅ;F.OM^VѲ M.yM"%n͕= ͤCon!i+6$Ȩlۧ}u6wm-X'nVvSO3oE~3ct\i7cm$f=w!j=_Ȩ̄t0rGCyӜ^R~F$t7"HV܅Ӝ0Np>Rx⳦^/cƒc?{8=:\kkze7w>ty8t9T7MrancqYJ.FݭT9 }Aa9ul\DyW*}oh +' ϡ`B;^'ֹ/~ڏ<P*ҹ. pfۢJ0 +LilI$l]q\Z"$ eJ_ē=gNmgi!IhtbOU,3Q\\Di'\-,{A` "Η&ua$<..33|WU;u B~_)QY nΒy WyTd8QHc̿))1 kMo$V891rָlzw5+1wj1ϩLtOv΍aD1)6N)xÞޗW,#f`spxyƹo\Y'+~yIydw|kOJIn `b=3J)="^JN$r͟SZz'5{%>DE27:9bna>VLzi$bǽU;jll<5cZFgg+aCQͯzF\@ Rڳ|z~)}B d^_,ֻ]Cp*9 \g+_:z^gShXw yqd{TP߳iȸڬpGR8hK٭OFHp`k[H MJ7-Ѓ~5k:KS'I=bf[\cCc 5}%pI@3圕 {y"a[,r@ Kk}4l\s\{iW[p5ӣUR1}CQ+^D'acL н" Fq9Ҹr'[V%S |##a*|Ɗ\ڔ$ 0/*',˸y}?*"_eh3p cא .o ]#w]Hvv^ ǩ?zɱϽn=[+RXEo8Yr-D#Xd۷TAZ" էVI 'zAUkgFr)mdY ԑvlRm8޸XDv!81քyyօFO&]_PN(|_G1L|`>\^WΚU9k֊?垙Kja2Oҭ^+CP$9;N@95gosondPP#G}I'O:'"r0A}BM:r"cROS 3ںKz˕wl!1ph=k&iEv<A^sOrvC9v~^3MXzJXo__w789v1Wgdޣ%cd{`W\x h.n- 2,rxs2Fd CoU|a rn" \nA7'm/5Ӽ9$v?rj޾*; R:y ;~Da1RHMe64A-܌+&63q5 xWW8*TJ&w򤹴flF qZ6GQLcms,r@ =AIba+u *BzN,汐bY+cc.qS(Zh#.~gpI?/*z+|o;,k3m֎*W*Otq/"bAܬ7)ߕI]L4CJ"+o%xssXW70gw5xŰ(T˵(Y>Z5֕s^GloXxO;s~է3zȋ%8-RD)l;tɣLLP:z~TP4N@"! Yc \+=p>Ғ-F p#-oU>"w`T=x1weho:tQ]jݼ,5HL'<8Ҭ;@ciHpH ( Z{O.]ఝFҊVev /R˯^ean+˔%GW7·~R!VG=\ڦ=6s1#oҥބ[xĖ߻n~WQZYc8SҭVWK;\U qæeņ1œZ3sa}sJ?ěS_ M&L~c( 5-|2Gdo)32rכWsso<1]-GTն;fZWz~ q^Ǿ˦As8[7<*1y-}\^:~0xq=S\3=v?)@?$۟as?~b}QExo„Klo;U¶vH"]}S綆StvGy`ğ3xFՙNۏLY(|BRs q 4g뺘<2΁^$ c_Qm =+!|AޓxhFC_:;+YyI.=zd(KA”)1b{/t@% *}IIWZEI宧mTF;DmxQM]̱ &A?_[{ՍX 7TlDaL@bNfJX^.PU\qt<ʷ3c1ʤ8汕#c~U4G;0$é󧮟##8[y{OL*7eR31w7jSnVE!h]䈾ы))n98}QйE&9g6yAcrry=Wk<:)+(?(,/\sGdu?>1(Xé+N{q("FtP,nI)!-oP6Ucu N:ke020=X(t/t$m>_*=A T2*z Rx#s?l~u!H{dd-܌NA:.y4ns-Ò~lmð9)"<"S' 򢝘ROTu$_r1@8~²16ILU˯}@H=sFB"X?jŔ4\тzT$љ=FE_,3bQh )&~Ix`V4z*!-Q/il#ܝDR@sYf5U\\jӊwPǡ cy?}+r;.fL+}F7$aI_֖R{i3YFG')`3ZmӀG |~T>ft/:>u O9'Q3}:,V8GS5<Î~mօ̾$Tc(9?Ο57Cuy13Ո o>Eqs2CkH>yps̒[#I<ڭ8Q&$`*ʟ\Imq!c T!|* QEOAnA;z[#o~h E.W)qSz 1?>QM2/krR=gQA 6B* TuN yly',YXGQEP0ۘDl-`azE(eQ޹՝:$I[`E/1> 98T2rcM) e A]޳ 䐨R E0#g L Yj70[:({ۆ[O:\Ÿ,CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?@8(!wɤZYFI=^Y^[ tdppj44슌R`>sHdQԁ4\qژ!#4FK-rj(D@V1ʋ0ztVc$Rp* ]9>VVn"K8)MR!KSBnҊ,1KS⡙1ŽI'-Fx<<j7ގQܺjsKR W ^h\Xh r*h;oY݉'\1嶌wK_uk,qU,m%U"2[?ʹgIu0QT?7~?qz5MJI W/u 8HPc: KG%~{"lw6ﲫ|qw|׋+bܿÒx"AP[I"Rʟ]/scm*v8U:~alPIR+u2F' N2\?JnȄb>)(Kw:2> slH8?Ngm=ol@ٰIխ':kq [An Vc8Lzrns ަR+% z8b[k I@|t\h$ z p6;ӯY'Ի>LxSH*NS]fQ̚u_Cagzta@m- \ gHbꜣfxB-"y.iS"|N5"%1wګ(? ܠFެZJi8'T }nVGЃ0j|Q̺ k8hpDkɎ"{AJKA*cL25kz|:f%̤#Ӌkx/573 LqzՋ ̱\]:͸!R208ְլi EĊ sRm5vÍo%xV֧ŹıgӞzUQXem"ћK= ;⨐TZiKVKKHiʊMQi3bE&ih E0(2  ~uZkKkia:L˵{V|Ei&d o '^Y6]F;֥;EIJ*HDn '8 Z' 34Rvdp{]<PqW=kE ătM4( \(#'4FЩv&N1 >B"/'DU\8K"f[;Uڧ}K]%Lvc_ {[γjȅ u"yuY>ɀp;Q\ֳJ$j 'kv-4sb[tA;s5(.X9&+cƝ@&9c '#jWPdd߿n5ɤLY VUw+;]tjPE}.,7N6v|Qogsi#AlX) br4$-*0nxwQ젂Kt]?uآ=2ZY7GhdIf^0z}qP &s,MfD$3 g=k'J ؎NGXN矧&5Ht]:ݼ#ZLI' 6X8Л%gAl/f mk 'B}xgdOPq qX 㿶Ҵfʯ: $GaL'RϨ׺LfJp+'؜3Zwu2N.mއ$E-S*AR#ۯ|QQ0&{Pv*<*F۶N9z#n8o+F-* Y{&G+O^⠂gNT)#U':%gf$L"b.!.:*#mpXy{}+m䝑 цWb{+IGKh[?ێ1IIt,d?1UEl,I#. s`Rv[l`r 1?^ŕRZC$2~BmXT:$R2:7*a'XnbT<<*o5LedW隞_:$wvx%=GdւY^]DHy_V! Iv\98Egx3,*e>%|X@dg+k ` "AҦRe@ 8&~Ϲ-t℮1v󏻴ךoy!ӽp |=yp+5."Tx $`cӽvZHʁfa34-ins$I#~)MܑİmS9/{A7x-t?B.<FYdv? ZoJ] 3@Tp !2c{5-h:E\AqvOҦs4j6O QJhd`]k_5 } k h\*8 g׊R]WS BŴ|dv pikw Y1%laӯ\ B˒0{Z;[y+(> S~f~"5}ZF+o"KAp:eRbIco='UPh\Ʃ'[K)e3O0d2GҭI[BmOe67K%?Lmǿ8]ctOs*Sa$kZN[7VBB V%TrKڤN;cd}MTmkknjc$OWL{MxWkRjs9ӷNmZ[6iwFKWvz.GCg+_B״+{bw!z&&l:wp9'޼i7o?ž]Mt:MGij40O$qV]ʝ'#.eo%ذG>W7>16Ꮈ5ڶ ֚{ʬHو-=Ai3H,_,IpDrс &}jz,f8s<4}V"]Ts8;fl`"2Pő)^GH)0@Җqv:'k#8P~Ii=n.JPXe\:nMR x4r*B#aO*įnK&d8!;+rM$vgp*v]yw)?UyaRYAɈhBr0GeNSvKR}OD4lp2~qUx\;׸OPmŤ4cĝXN~+k(|7XgGܟQR2hok+~Nh@11ҹ#@A{Uc&G U8ϯR,0|*bqJЫϧ@Ͱd|7l 9EzrM3ŖWWzu$Vsd8}y38q]MǍ3.uM16x}Mp1ePpqN#¼GVIo~#&jvH.V@ {5 2JjZTF~YU9gIԮew8:r= gSxhONƈՓz kޓtd*۝vu3ï²7JsЂ;81L6C2ufO2E$8 \մChGL&1I מ6i|ȤO89fywLlLӭdR+ne-&uR5 inC)x'99Fjbܴ2ǹÐ\>&Ɗ)^5E%ēG=0GR7Th7[ L㢁NH-gֱ~ѹsOѭ4g:ifrű:}$WfNZJhmԏ2[*w :іJXW[Ҩz֗Beԯz1k|A|Z5͛Au?5'7Ks#[\3 VQc?Ƹɧ=Ն$*sd@rzu?MռW%WouJCl\ pCڅ;F.OM^VѲ M.yM"%n͕= ͤCon!i+6$Ȩlۧ}u6wm-X'nVvSO3oE~3ct\i7cm$f=w!j=_Ȩ̄t0rGCyӜ^R~F$t7"HV܅Ӝ0Np>Rx⳦^/cƒc?{8=:\kkze7w>ty8t9T7MrancqYJ.FݭT9 }Aa9ul\DyW*}oh +' ϡ`B;^'ֹ/~ڏ<P*ҹ. pfۢJ0 +LilI$l]q\Z"$ eJ_ē=gNmgi!IhtbOU,3Q\\Di'\-,{A` "Η&ua$<..33|WU;u B~_)QY nΒy WyTd8QHc̿))1 kMo$V891rָlzw5+1wj1ϩLtOv΍aD1)6N)xÞޗW,#f`spxyƹo\Y'+~yIydw|kOJIn `b=3J)="^JN$r͟SZz'5{%>DE27:9bna>VLzi$bǽU;jll<5cZFgg+aCQͯzF\@ Rڳ|z~)}B d^_,ֻ]Cp*9 \g+_:z^gShXw yqd{TP߳iȸڬpGR8hK٭OFHp`k[H MJ7-Ѓ~5k:KS'I=bf[\cCc 5}%pI@3圕 {y"a[,r@ Kk}4l\s\{iW[p5ӣUR1}CQ+^D'acL н" Fq9Ҹr'[V%S |##a*|Ɗ\ڔ$ 0/*',˸y}?*"_eh3p cא .o ]#w]Hvv^ ǩ?zɱϽn=[+RXEo8Yr-D#Xd۷TAZ" էVI 'zAUkgFr)mdY ԑvlRm8޸XDv!81քyyօFO&]_PN(|_G1L|`>\^WΚU9k֊?垙Kja2Oҭ^+CP$9;N@95gosondPP#G}I'O:'"r0A}BM:r"cROS 3ںKz˕wl!1ph=k&iEv<A^sOrvC9v~^3MXzJXo__w789v1Wgdޣ%cd{`W\x h.n- 2,rxs2Fd CoU|a rn" \nA7'm/5Ӽ9$v?rj޾*; R:y ;~Da1RHMe64A-܌+&63q5 xWW8*TJ&w򤹴flF qZ6GQLcms,r@ =AIba+u *BzN,汐bY+cc.qS(Zh#.~gpI?/*z+|o;,k3m֎*W*Otq/"bAܬ7)ߕI]L4CJ"+o%xssXW70gw5xŰ(T˵(Y>Z5֕s^GloXxO;s~է3zȋ%8-RD)l;tɣLLP:z~TP4N@"! Yc \+=p>Ғ-F p#-oU>"w`T=x1weho:tQ]jݼ,5HL'<8Ҭ;@ciHpH ( Z{O.]ఝFҊVev /R˯^ean+˔%GW7·~R!VG=\ڦ=6s1#oҥބ[xĖ߻n~WQZYc8SҭVWK;\U qæeņ1œZ3sa}sJ?ěS_ M&L~c( 5-|2Gdo)32rכWsso<1]-GTն;fZWz~ q^Ǿ˦As8[7<*1y-}\^:~0xq=S\3=v?)@?$۟as?~b}QExo„Klo;U¶vH"]}S綆StvGy`ğ3xFՙNۏLY(|BRs q 4g뺘<2΁^$ c_Qm =+!|AޓxhFC_:;+YyI.=zd(KA”)1b{/t@% *}IIWZEI宧mTF;DmxQM]̱ &A?_[{ՍX 7TlDaL@bNfJX^.PU\qt<ʷ3c1ʤ8汕#c~U4G;0$é󧮟##8[y{OL*7eR31w7jSnVE!h]䈾ы))n98}QйE&9g6yAcrry=Wk<:)+(?(,/\sGdu?>1(Xé+N{q("FtP,nI)!-oP6Ucu N:ke020=X(t/t$m>_*=A T2*z Rx#s?l~u!H{dd-܌NA:.y4ns-Ò~lmð9)"<"S' 򢝘ROTu$_r1@8~²16ILU˯}@H=sFB"X?jŔ4\тzT$љ=FE_,3bQh )&~Ix`V4z*!-Q/il#ܝDR@sYf5U\\jӊwPǡ cy?}+r;.fL+}F7$aI_֖R{i3YFG')`3ZmӀG |~T>ft/:>u O9'Q3}:,V8GS5<Î~mօ̾$Tc(9?Ο57Cuy13Ո o>Eqs2CkH>yps̒[#I<ڭ8Q&$`*ʟ\Imq!c T!|* QEOAnA;z[#o~h E.W)qSz 1?>QM2/krR=gQA 6B* TuN yly',YXGQEP0ۘDl-`azE(eQ޹՝:$I[`E/1> 98T2rcM) e A]޳ 䐨R E0#g L Yj70[:({ۆ[O:\Ÿ,CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?@8(!wɤZYFI=^Y^[ tdppj44슌R`>sHdQԁ4\qژ!#4FK-rj(D@V1ʋ0ztVc$Rp* ]9>VVn"K8)MR!KSBnҊ,1KS⡙1ŽI'-Fx<<j7ގQܺjsKR W ^h\Xh r*h;oY݉'\1嶌wK_uk,qU,m%U"2[?ʹgIu0QT?7~?qz5MJI W/u 8HPc: KG%~{"lw6ﲫ|qw|׋+bܿÒx"AP[I"Rʟ]/scm*v8U:~alPIR+u2F' N2\?JnȄb>)(Kw:2> slH8?Ngm=ol@ٰIխ':kq [An Vc8Lzrns ަR+% z8b[k I@|t\h$ z p6;ӯY'Ի>LxSH*NS]fQ̚u_Cagzta@m- \ gHbꜣfxB-"y.iS"|N5"%1wګ(? ܠFެZJi8'T }nVGЃ0j|Q̺ k8hpDkɎ"{AJKA*cL25kz|:f%̤#Ӌkx/573 LqzՋ ̱\]:͸!R208ְլi EĊ sRm5vÍo%xV֧ŹıgӞzUQXem"ћK= ;⨐TZiKVKKHiʊMQi3bE&ih E0(2  ~uZkKkia:L˵{V|Ei&d o '^Y6]F;֥;EIJ*HDn '8 Z' 34Rvdp{]<PqW=kE ătM4( \(#'4FЩv&N1 >B"/'DU\8K"f[;Uڧ}K]%Lvc_ {[γjȅ u"yuY>ɀp;Q\ֳJ$j 'kv-4sb[tA;s5(.X9&+cƝ@&9c '#jWPdd߿n5ɤLY VUw+;]tjPE}.,7N6v|Qogsi#AlX) br4$-*0nxwQ젂Kt]?uآ=2ZY7GhdIf^0z}qP &s,MfD$3 g=k'J ؎NGXN矧&5Ht]:ݼ#ZLI' 6X8Л%gAl/f mk 'B}xgdOPq qX 㿶Ҵfʯ: $GaL'RϨ׺LfJp+'؜3Zwu2N.mއ$E-S*AR#ۯ|QQ0&{Pv*<*F۶N9z#n8o+F-* Y{&G+O^⠂gNT)#U':%gf$L"b.!.:*#mpXy{}+m䝑 цWb{+IGKh[?ێ1IIt,d?1UEl,I#. s`Rv[l`r 1?^ŕRZC$2~BmXT:$R2:7*a'XnbT<<*o5LedW隞_:$wvx%=GdւY^]DHy_V! Iv\98Egx3,*e>%|X@dg+k ` "AҦRe@ 8&~Ϲ-t℮1v󏻴ךoy!ӽp |=yp+5."Tx $`cӽvZHʁfa34-ins$I#~)MܑİmS9/{A7x-t?B.<FYdv? ZoJ] 3@Tp !2c{5-h:E\AqvOҦs4j6O QJhd`]k_5 } k h\*8 g׊R]WS BŴ|dv pikw Y1%laӯ\ B˒0{Z;[y+(> S~f~"5}ZF+o"KAp:eRbIco='UPh\Ʃ'[K)e3O0d2GҭI[BmOe67K%?Lmǿ8]ctOs*Sa$kZN[7VBB V%TrKڤN;cd}MTmkknjc$OWL{MxWkRjs9ӷNmZ[6iwFKWvz.GCg+_B״+{bw!z&&l:wp9'޼i7o?ž]Mt:MGij40O$qV]ʝ'#.eo%ذG>W7>16Ꮈ5ڶ ֚{ʬHو-=Ai3H,_,IpDrс &}jz,f8s<4}V"]Ts8;fl`"2Pő)^GH)0@Җqv:'k#8P~Ii=n.JPXe\:nMR x4r*B#aO*įnK&d8!;+rM$vgp*v]yw)?UyaRYAɈhBr0GeNSvKR}OD4lp2~qUx\;׸OPmŤ4cĝXN~+k(|7XgGܟQR2hok+~Nh@11ҹ#@A{Uc&G U8ϯR,0|*bqJЫϧ@Ͱd|7l 9EzrM3ŖWWzu$Vsd8}y38q]MǍ3.uM16x}Mp1ePpqN#¼GVIo~#&jvH.V@ {5 2JjZTF~YU9gIԮew8:r= gSxhONƈՓz kޓtd*۝vu3ï²7JsЂ;81L6C2ufO2E$8 \մChGL&1I מ6i|ȤO89fywLlLӭdR+ne-&uR5 inC)x'99Fjbܴ2ǹÐ\>&Ɗ)^5E%ēG=0GR7Th7[ L㢁NH-gֱ~ѹsOѭ4g:ifrű:}$WfNZJhmԏ2[*w :іJXW[Ҩz֗Beԯz1k|A|Z5͛Au?5'7Ks#[\3 VQc?Ƹɧ=Ն$*sd@rzu?MռW%WouJCl\ pCڅ;F.OM^VѲ M.yM"%n͕= ͤCon!i+6$Ȩlۧ}u6wm-X'nVvSO3oE~3ct\i7cm$f=w!j=_Ȩ̄t0rGCyӜ^R~F$t7"HV܅Ӝ0Np>Rx⳦^/cƒc?{8=:\kkze7w>ty8t9T7MrancqYJ.FݭT9 }Aa9ul\DyW*}oh +' ϡ`B;^'ֹ/~ڏ<P*ҹ. pfۢJ0 +LilI$l]q\Z"$ eJ_ē=gNmgi!IhtbOU,3Q\\Di'\-,{A` "Η&ua$<..33|WU;u B~_)QY nΒy WyTd8QHc̿))1 kMo$V891rָlzw5+1wj1ϩLtOv΍aD1)6N)xÞޗW,#f`spxyƹo\Y'+~yIydw|kOJIn `b=3J)="^JN$r͟SZz'5{%>DE27:9bna>VLzi$bǽU;jll<5cZFgg+aCQͯzF\@ Rڳ|z~)}B d^_,ֻ]Cp*9 \g+_:z^gShXw yqd{TP߳iȸڬpGR8hK٭OFHp`k[H MJ7-Ѓ~5k:KS'I=bf[\cCc 5}%pI@3圕 {y"a[,r@ Kk}4l\s\{iW[p5ӣUR1}CQ+^D'acL н" Fq9Ҹr'[V%S |##a*|Ɗ\ڔ$ 0/*',˸y}?*"_eh3p cא .o ]#w]Hvv^ ǩ?zɱϽn=[+RXEo8Yr-D#Xd۷TAZ" էVI 'zAUkgFr)mdY ԑvlRm8޸XDv!81քyyօFO&]_PN(|_G1L|`>\^WΚU9k֊?垙Kja2Oҭ^+CP$9;N@95gosondPP#G}I'O:'"r0A}BM:r"cROS 3ںKz˕wl!1ph=k&iEv<A^sOrvC9v~^3MXzJXo__w789v1Wgdޣ%cd{`W\x h.n- 2,rxs2Fd CoU|a rn" \nA7'm/5Ӽ9$v?rj޾*; R:y ;~Da1RHMe64A-܌+&63q5 xWW8*TJ&w򤹴flF qZ6GQLcms,r@ =AIba+u *BzN,汐bY+cc.qS(Zh#.~gpI?/*z+|o;,k3m֎*W*Otq/"bAܬ7)ߕI]L4CJ"+o%xssXW70gw5xŰ(T˵(Y>Z5֕s^GloXxO;s~է3zȋ%8-RD)l;tɣLLP:z~TP4N@"! Yc \+=p>Ғ-F p#-oU>"w`T=x1weho:tQ]jݼ,5HL'<8Ҭ;@ciHpH ( Z{O.]ఝFҊVev /R˯^ean+˔%GW7·~R!VG=\ڦ=6s1#oҥބ[xĖ߻n~WQZYc8SҭVWK;\U qæeņ1œZ3sa}sJ?ěS_ M&L~c( 5-|2Gdo)32rכWsso<1]-GTն;fZWz~ q^Ǿ˦As8[7<*1y-}\^:~0xq=S\3=v?)@?$۟as?~b}QExo„Klo;U¶vH"]}S綆StvGy`ğ3xFՙNۏLY(|BRs q 4g뺘<2΁^$ c_Qm =+!|AޓxhFC_:;+YyI.=zd(KA”)1b{/t@% *}IIWZEI宧mTF;DmxQM]̱ &A?_[{ՍX 7TlDaL@bNfJX^.PU\qt<ʷ3c1ʤ8汕#c~U4G;0$é󧮟##8[y{OL*7eR31w7jSnVE!h]䈾ы))n98}QйE&9g6yAcrry=Wk<:)+(?(,/\sGdu?>1(Xé+N{q("FtP,nI)!-oP6Ucu N:ke020=X(t/t$m>_*=A T2*z Rx#s?l~u!H{dd-܌NA:.y4ns-Ò~lmð9)"<"S' 򢝘ROTu$_r1@8~²16ILU˯}@H=sFB"X?jŔ4\тzT$љ=FE_,3bQh )&~Ix`V4z*!-Q/il#ܝDR@sYf5U\\jӊwPǡ cy?}+r;.fL+}F7$aI_֖R{i3YFG')`3ZmӀG |~T>ft/:>u O9'Q3}:,V8GS5<Î~mօ̾$Tc(9?Ο57Cuy13Ո o>Eqs2CkH>yps̒[#I<ڭ8Q&$`*ʟ\Imq!c T!|* QEOAnA;z[#o~h E.W)qSz 1?>QM2/krR=gQA 6B* TuN yly',YXGQEP0ۘDl-`azE(eQ޹՝:$I[`E/1> 98T2rcM) e A]޳ 䐨R E0#g L Yj70[:({ۆ[O:\Ÿ,CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?@8(!wɤZYFI=^Y^[ tdppj44슌R`>sHdQԁ4\qژ!#4FK-rj(D@V1ʋ0ztVc$Rp* ]9>VVn"K8)MR!KSBnҊ,1KS⡙1ŽI'-Fx<<j7ގQܺjsKR W ^h\Xh r*h;oY݉'\1嶌wK_uk,qU,m%U"2[?ʹgIu0QT?7~?qz5MJI W/u 8HPc: KG%~{"lw6ﲫ|qw|׋+bܿÒx"AP[I"Rʟ]/scm*v8U:~alPIR+u2F' N2\?JnȄb>)(Kw:2> slH8?Ngm=ol@ٰIխ':kq [An Vc8Lzrns ަR+% z8b[k I@|t\h$ z p6;ӯY'Ի>LxSH*NS]fQ̚u_Cagzta@m- \ gHbꜣfxB-"y.iS"|N5"%1wګ(? ܠFެZJi8'T }nVGЃ0j|Q̺ k8hpDkɎ"{AJKA*cL25kz|:f%̤#Ӌkx/573 LqzՋ ̱\]:͸!R208ְլi EĊ sRm5vÍo%xV֧ŹıgӞzUQXem"ћK= ;⨐TZiKVKKHiʊMQi3bE&ih E0(2  ~uZkKkia:L˵{V|Ei&d o '^Y6]F;֥;EIJ*HDn '8 Z' 34Rvdp{]<PqW=kE ătM4( \(#'4FЩv&N1 >B"/'DU\8K"f[;Uڧ}K]%Lvc_ {[γjȅ u"yuY>ɀp;Q\ֳJ$j 'kv-4sb[tA;s5(.X9&+cƝ@&9c '#jWPdd߿n5ɤLY VUw+;]tjPE}.,7N6v|Qogsi#AlX) br4$-*0nxwQ젂Kt]?uآ=2ZY7GhdIf^0z}qP &s,MfD$3 g=k'J ؎NGXN矧&5Ht]:ݼ#ZLI' 6X8Л%gAl/f mk 'B}xgdOPq qX 㿶Ҵfʯ: $GaL'RϨ׺LfJp+'؜3Zwu2N.mއ$E-S*AR#ۯ|QQ0&{Pv*<*F۶N9z#n8o+F-* Y{&G+O^⠂gNT)#U':%gf$L"b.!.:*#mpXy{}+m䝑 цWb{+IGKh[?ێ1IIt,d?1UEl,I#. s`Rv[l`r 1?^ŕRZC$2~BmXT:$R2:7*a'XnbT<<*o5LedW隞_:$wvx%=GdւY^]DHy_V! Iv\98Egx3,*e>%|X@dg+k ` "AҦRe@ 8&~Ϲ-t℮1v󏻴ךoy!ӽp |=yp+5."Tx $`cӽvZHʁfa34-ins$I#~)MܑİmS9/{A7x-t?B.<FYdv? ZoJ] 3@Tp !2c{5-h:E\AqvOҦs4j6O QJhd`]k_5 } k h\*8 g׊R]WS BŴ|dv pikw Y1%laӯ\ B˒0{Z;[y+(> S~f~"5}ZF+o"KAp:eRbIco='UPh\Ʃ'[K)e3O0d2GҭI[BmOe67K%?Lmǿ8]ctOs*Sa$kZN[7VBB V%TrKڤN;cd}MTmkknjc$OWL{MxWkRjs9ӷNmZ[6iwFKWvz.GCg+_B״+{bw!z&&l:wp9'޼i7o?ž]Mt:MGij40O$qV]ʝ'#.eo%ذG>W7>16Ꮈ5ڶ ֚{ʬHو-=Ai3H,_,IpDrс &}jz,f8s<4}V"]Ts8;fl`"2Pő)^GH)0@Җqv:'k#8P~Ii=n.JPXe\:nMR x4r*B#aO*įnK&d8!;+rM$vgp*v]yw)?UyaRYAɈhBr0GeNSvKR}OD4lp2~qUx\;׸OPmŤ4cĝXN~+k(|7XgGܟQR2hok+~Nh@11ҹ#@A{Uc&G U8ϯR,0|*bqJЫϧ@Ͱd|7l 9EzrM3ŖWWzu$Vsd8}y38q]MǍ3.uM16x}Mp1ePpqN#¼GVIo~#&jvH.V@ {5 2JjZTF~YU9gIԮew8:r= gSxhONƈՓz kޓtd*۝vu3ï²7JsЂ;81L6C2ufO2E$8 \մChGL&1I מ6i|ȤO89fywLlLӭdR+ne-&uR5 inC)x'99Fjbܴ2ǹÐ\>&Ɗ)^5E%ēG=0GR7Th7[ L㢁NH-gֱ~ѹsOѭ4g:ifrű:}$WfNZJhmԏ2[*w :іJXW[Ҩz֗Beԯz1k|A|Z5͛Au?5'7Ks#[\3 VQc?Ƹɧ=Ն$*sd@rzu?MռW%WouJCl\ pCڅ;F.OM^VѲ M.yM"%n͕= ͤCon!i+6$Ȩlۧ}u6wm-X'nVvSO3oE~3ct\i7cm$f=w!j=_Ȩ̄t0rGCyӜ^R~F$t7"HV܅Ӝ0Np>Rx⳦^/cƒc?{8=:\kkze7w>ty8t9T7MrancqYJ.FݭT9 }Aa9ul\DyW*}oh +' ϡ`B;^'ֹ/~ڏ<P*ҹ. pfۢJ0 +LilI$l]q\Z"$ eJ_ē=gNmgi!IhtbOU,3Q\\Di'\-,{A` "Η&ua$<..33|WU;u B~_)QY nΒy WyTd8QHc̿))1 kMo$V891rָlzw5+1wj1ϩLtOv΍aD1)6N)xÞޗW,#f`spxyƹo\Y'+~yIydw|kOJIn `b=3J)="^JN$r͟SZz'5{%>DE27:9bna>VLzi$bǽU;jll<5cZFgg+aCQͯzF\@ Rڳ|z~)}B d^_,ֻ]Cp*9 \g+_:z^gShXw yqd{TP߳iȸڬpGR8hK٭OFHp`k[H MJ7-Ѓ~5k:KS'I=bf[\cCc 5}%pI@3圕 {y"a[,r@ Kk}4l\s\{iW[p5ӣUR1}CQ+^D'acL н" Fq9Ҹr'[V%S |##a*|Ɗ\ڔ$ 0/*',˸y}?*"_eh3p cא .o ]#w]Hvv^ ǩ?zɱϽn=[+RXEo8Yr-D#Xd۷TAZ" էVI 'zAUkgFr)mdY ԑvlRm8޸XDv!81քyyօFO&]_PN(|_G1L|`>\^WΚU9k֊?垙Kja2Oҭ^+CP$9;N@95gosondPP#G}I'O:'"r0A}BM:r"cROS 3ںKz˕wl!1ph=k&iEv<A^sOrvC9v~^3MXzJXo__w789v1Wgdޣ%cd{`W\x h.n- 2,rxs2Fd CoU|a rn" \nA7'm/5Ӽ9$v?rj޾*; R:y ;~Da1RHMe64A-܌+&63q5 xWW8*TJ&w򤹴flF qZ6GQLcms,r@ =AIba+u *BzN,汐bY+cc.qS(Zh#.~gpI?/*z+|o;,k3m֎*W*Otq/"bAܬ7)ߕI]L4CJ"+o%xssXW70gw5xŰ(T˵(Y>Z5֕s^GloXxO;s~է3zȋ%8-RD)l;tɣLLP:z~TP4N@"! Yc \+=p>Ғ-F p#-oU>"w`T=x1weho:tQ]jݼ,5HL'<8Ҭ;@ciHpH ( Z{O.]ఝFҊVev /R˯^ean+˔%GW7·~R!VG=\ڦ=6s1#oҥބ[xĖ߻n~WQZYc8SҭVWK;\U qæeņ1œZ3sa}sJ?ěS_ M&L~c( 5-|2Gdo)32rכWsso<1]-GTն;fZWz~ q^Ǿ˦As8[7<*1y-}\^:~0xq=S\3=v?)@?$۟as?~b}QExo„Klo;U¶vH"]}S綆StvGy`ğ3xFՙNۏLY(|BRs q 4g뺘<2΁^$ c_Qm =+!|AޓxhFC_:;+YyI.=zd(KA”)1b{/t@% *}IIWZEI宧mTF;DmxQM]̱ &A?_[{ՍX 7TlDaL@bNfJX^.PU\qt<ʷ3c1ʤ8汕#c~U4G;0$é󧮟##8[y{OL*7eR31w7jSnVE!h]䈾ы))n98}QйE&9g6yAcrry=Wk<:)+(?(,/\sGdu?>1(Xé+N{q("FtP,nI)!-oP6Ucu N:ke020=X(t/t$m>_*=A T2*z Rx#s?l~u!H{dd-܌NA:.y4ns-Ò~lmð9)"<"S' 򢝘ROTu$_r1@8~²16ILU˯}@H=sFB"X?jŔ4\тzT$љ=FE_,3bQh )&~Ix`V4z*!-Q/il#ܝDR@sYf5U\\jӊwPǡ cy?}+r;.fL+}F7$aI_֖R{i3YFG')`3ZmӀG |~T>ft/:>u O9'Q3}:,V8GS5<Î~mօ̾$Tc(9?Ο57Cuy13Ո o>Eqs2CkH>yps̒[#I<ڭ8Q&$`*ʟ\Imq!c T!|* QEOAnA;z[#o~h E.W)qSz 1?>QM2/krR=gQA 6B* TuN yly',YXGQEP0ۘDl-`azE(eQ޹՝:$I[`E/1> 98T2rcM) e A]޳ 䐨R E0#g L Yj70[:({ۆ[O:\Ÿ,CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Bԁx*ԛx(5;-5cqOU+H ri*RZPS{S}\ E9E1zS1RIC)HZq79LJ J4h,\S`SH'fT* Lvg4tve0A$D N,بsI&{ed=d0J4YRK-@ i&QBZ5-vWGlRzҺJ$2jrq?R:י){4юlଌ*Z^$OLVXT~G\WC-tLpuޡpmݹO*ãZ#nI'Uo&FDr0.h"϶b{WL[!:RXI=]XNZAC\VeiY\h'P䏘 R4]%㜥2ށ!\M3=rjiݫ#L&6*?kUyf4VQڊ-̈e4]'=)ESAymH-t+j=)})UN Ŝ tMt)j-JN]t;R.{uVX/ؠ1KNո #[O/ED2MʿV@VY\sAzgd6  Qf/J'JB})@D)|PԎ jJ$\T3JSIM2Yj1h8U.ҢB)\`궆k⑔C7t8U #-jjqFƹl$dܐ5MMh =d:nUzfB8Uw9WH.dF)⹭Al>Ʈ#cYq|P!'F%Yu?A\JB`  s8'}kM[m;R$N>Q_-}jv1j-ܺނ0Hetk8\7@šjH9Yj:VvZʁO+UGQ)"RGO5Li+ OsGSѰSrHکg5yTNhby"~Z"L)J&M]6JAi>hB̺*; JL4KL9&V4:_kՄQڀY^BT hhw4Śe44_[Yj127?+HzfIZ͡F1ٺ [Ÿbpo۰SYmQ$OJvl4ЮyoM9nU@.Gp{Uv7"55CVǑ. W^ˡ}T͒<^n H]VgЅ`H* W|?K._ab (:n̤UU ȨJImUV)>4T-F4 ?QK j[Q򊯚^) paXمb(!n#4xĶ2Fˉ=hwEbTzռR7(f8ffDsל08.R*v$H6zPj:\\E=y'np5|E)js!,F)S`fAVcV16HmY?_OŲ9 dHw2 㣀7;{lpg5smsh} (AhqWhw% [̒p*V"vs]`zDP$6&UGLkif+NxZI##rP}l66=[r(&VV @>VU֙Hds鋋FT[*Wjy;r~mtW)$Vzg],[ X`D'QΪ`{?Ƶ#ogU8t-1*}0YHtf/-mmBђQG5R!W kK+U˦r8CyX8jVN0iIEu-8SM3R#me9R9Lw8K\,\z/c-,`*ִcm,=Me˯j0:ma֓* ڔ4j*3c#<ViX-nBYBJ:kq_Z9v;c7(XXp|pQY p*nUDZnU)E!^6;}jtK圇Uv߻'֚]NDTz*)ly.Xr\D涍޲&DU2p? {`sn1"]{OwtdX$0 {^͍ ƲSQ'ǯqד) NQ$m*@p⫘`xރUJ3gTx9sr#@ 0zPd8O! &M4O9G5QDMIuV$SbȎ[k/F5)۱_:te,t-IE-KJ:RJl@)أ54H9 HQGҁs'Xo[G^Z%~../Rc+h&J 25 eoAwtX\<ЙBVQ鉬jV:fI8ڸנZ[鶢&DLğ3~+K;u,x{Pf!`ЗYL.gw(QF@5:J2zPyn+ʽЌu!כV"ⰵ oSG"2h 160s*_W";ky,q~Tc9'eѴs%qybNU9ʃy134]BfY- RmDU$J=ٮ%W!J1m>6;D!T.՝gVXw+l=+w'*Oq=KOX7~boxWXƒQ[Z˟F@LLc>E22Ix23M }#fLsT!4ғH*y3A𣙊IEswv`P:FeGZ6w=岻fV/zn cJy;6x׻uF8CCCt 9R*Qp:YtY=FZ( 6{lнiɃNXSPyH'*X z1Vv iM-@`D[+#Ҕg=)  OPwgi9-$n HW;&c9屁\j6t?c ( Fu 5g{wqA^9ƔFksry e&P1㯿ZK6лrʤ OVO\5ɴT̃6}xkTM<;[]Fim^F-ۣdmaW#Ԋ+88^{u),9AtM} *4@rgs[<qT~u|ݸ,Tj':GW1%ޣFmߐy9 \Muqkp #u^/ג*K$J&Ltl*Ʀ\pFA)byG!WeSc%|tҒMYw`|Vɂ̣ҪR9ps5wG9m1*qZ1VU_b*ꟕ 6PѷnEUHGC2%d4 E \- f5k*})BGv8u_# ᵒe5xKľ@ ;GG?Zf0eA toOa\I!fbMuQ=VѢ:/ ]LX*Ń'cIm-VE|'XZՄ r5Qw9,) 5$[1YQ98mxz:HG;+!H^{Y1qqpz*SJlqWgRbO$obe@Q7SOv5cuHѝۢ5vEk9bc,qg5;K5Xـ2J=2r OZ4bW84o.0K$=d^G0S8z}k;RŬ[aX{[GHqOsMF+dnR4V~kkpO|ԑ[| ֞@`U.8W#yYϐ$q+$ qꎄx&l\3?P A^`SQ6Fy?*yRCogy[jcӵiF*޶&ku&A,0}QgrfckѸ{Mo Fmr÷ֳtLKHY!st7lM*Esd@dtvW83LNJ72/p3A+@IB 8NvqZZ,+)OGi.යIL•%G Aԣ}ZHĶO8Bxڶ`}yLjSSܩ<#,@z&ͣQ$rJX:F[l|ƺrrIjחc(/BMQP< +h.b١9eLeD O!ϸ\md2񎞢a H>GiUn;-1 '֚V+\W%G$i`qw `kVNԞh۞Ɛ(+*9: ITrOV|D}iqUL4< I>d;J t6u}k7XY#@OΣ֯~Ͷ7=k u32qGT)G컨jwJ^[.qWQ1ZGn'Az.)R0Go3M 9=U[Z騻~o*H?f9YdT#=͹]d񨔇`k,ȷ6cak;s"7bia}JTړآH%A$';Ē̹,qH JS1<dǰƷ.;"L\WV;UU#U=/=y)k1滟;1ɧGaW+p\/)j+jJ9Fᕎ{t gc7Ҵg7(A[EVU*#,CkakDz0c=|s5Ȼ\QQJ\ԚR90rxnZ u3-S;V9UM 2=qR\S+5drzAPO4T{3 F)`8V%PGJ!Tt6`I *_HڑEG' Lv@ьc:R5+0 H01MBx˞-l]!BwzT%޴1ŝ~\"qJǾZf{TyzSXkrKk.}Jy:Vl|+rY'$kjkST6'xlf=69NzQxGtc^OrYU\4g P=J5򩘮[}g|E87esW=?p']4bKʍQ im&oU.q+jڳt z5DzzV74ngn(eQ[L<>?['3 c5]qwF5,V{GWQ ꞿJ5d*dN)yS C܌+garoundme_0_4_0/asset/group/1_DSCF0001741.jpg 777 0 0 26262 10157506042 13310 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?qN O O ^ӂ0 ZP`JvxZxZ%<'H"KTiv"-Ի*Ph-Ի*]6{RQb_/ڬJ.q8D*^i6GE'KeBFi6E+gOjB(.`2ҚEM@VV+HV++E h2S;I\Wуqޡ;(ـZP ZpZӂԁ)iZpZ-8%F N @ S2*\s9GZ0\<0?=6s'Lʜ۹h%F#jm.#ǵvRѴ(S jڗp[ijʩw8h^\Lƕm UWFʱeWIytWMVJnjW+IڬbV)Sl)@ *RR̍Aڴ- qVR7D?jx̯F}k8XMv/sU&u"-yb<*8[vz\['!"e-Pq0/g[\zҍzWBiFgOl qNٌN OB$ vz9r2s'p\`i_Z(M7߁i=Yi9zM6\ |Rַ3"FMO{QpVz|ukGT1sY_aju1vlzvABwP;HYX*p+MhܦLS9X:!{gڡ@1"T%n-0&-RKzbj9NݎTҍ&.ȏ \$u os^VDQdU 8?Һ/ںjcU.m i6կ*s; Rl{G&EM]Z})M+c4Y)M)EPyf*)\,V1QSEcG Ѱfm֎>e,W[(%@hn9+U'F8' t,Ope ݼmi{q2犣 a=E NÏRD#`j~X)u*#mrZ+@a |[yk(:g5RIK %cl|g+#R{(9#/"yp+c5z·n>O3\ynzeX( ?<5yE͸ZIH y"\qZ6T>iVKgw:B%h9_L ÚlP-QАNkZXBb ԗ26Rlx{HE"K}|Ѵ }CN?JS8퇰5.#J9M}mlK/{Fے@P93L[Ns޼XU8in;i @"Rn쏔`f3KxaKc9EUW;z@]T^N3Q,zog4.r;V>&K4@yM9f!R5kCHuKiP_3HEsO \9Hz瞕a|)jX=;)yO;$ mm`V΃Oos*^ĨYzW(;6*^uyW=if Ȋ_F9< WW+exDFE zf80 []4ΙVcF A}IX%McI$Ć hH GL7NjG[˼lgUӼ>ֈ?vY y#@Yx/ 2sp:XtyxoYRdA9n;Wkg^n*Pg2x+}*&]0<_?ʥZqCzeG\)Vs3Q+[O=ZFǭZ_mR9B^ՊGB*rfQUf˓$kEjf n߃J|M} ̟hBUۡ.~5ms$}*unl2 CZnzʞe+,$ [*#U 02$r2=5ȵȑ1Wc=:֤]Z8O㑃Zɚq{lDY '.4!ThnPkS;~4ф54Qm񫚞Y2e]2bW+wlQFNbgPhdC(?R޶574v+Ndq[\}Z$a|yQW^3MPBf8;ـ>VbD3@?\SwKvzjZW Frǵ`[j}Χ2jF'ˇ\1/ۡ\T3xbԚ)xa}*I4wwKqt@imjѝAHE0͸ҫii[MpgF\+xRgX9U?{ZxDGf0[8qsBzK]l[/vwG?phGpT|q6bÀz;ٳFwR(J'j$<=EGF*Hl1b7ҩHJ(h[W)#/vsU?lD?cM+015''nJU18ɩ$Bd Sϧ5;[D~dQ̴֦Նs$p1vӠ{{qw#=qVu9aKO=K^ǥm_XZŪ\47+@)749Ym%eP }99=hl!V6)"p#yQ៛ޕ&xYC=}iJ7*JMmDVxO8`qFv"fBHH'xM?̟b݋N-FX1-S\H;]MsW58HFUf2(!FIy^}|=2 ba%a#[0-FIҲR(3oY CKCxRȽˣţz+}ZK6t+V" r>_ߜWCuCncc.Q OX3t4x3)Dm9v{3uowfp 2 qJY}*'մuwcr?3\;qq,A^@RckQJE=]s"ݴmmMXzhOygnJ,VUP< \P\^vB n<׌d$HĦwh$>VXs.uP 'ևr!'hv ׳Ern<ެn8Lה^1zz֒4~db3]7[Fd薯sF$- U3j rG*a6jO-{=mSO{kH2;@8G4q࿠,ޚXg9Z[Kwd1(u?__ƊӚ( i3Wi][O9u+?cQ@ ONx8⼳Z8THo_Jri==QcA:=H[? וԙ,l@?4EeMn d1s}^ɵX!Lzn4'ۻX F?w^Pn'54W<隆l˫^@'WIG3jKb#a鎘Uwz-7m덶&6{ڟM,luq>/cG=̌ ,DI?o\ ˱ R[I%[pCI;$T'fX<Qcwz` ׏x/P=Υq4 8eX``$lN0c&%NCEr׍j%.n7mRU@' nu5a 9^R5X8# sϯZ z;CkΈf k;33\.|FDLcp]8>YiV*Huh~/O6fuU ot84n+r :soŶzoVWk_g׊K(s~ULgh+5 [W! 7bG`;} I8 MyR~"p^sZYMY:e펕mvQ YV9'k2Bwu_X*_#$k$}}Ǩu$r͌Gt[={}RmRi׎I rKsêwyFzxHVlм֬ Y& U-EEeT6ݒNcf.*tqEmb 9 `RZ߃ u% XLJ4P30Io<5΍~tN{*}eק91fxoYq) ZF?kS{*wt{nd*@ l Cv5}uDYrۜӢݍCsYB;JLu$Pis*gR/T]:r[(׆oÄɩ>\9o0<Zޮsǭdi$Z;#jDW4X3WkL,\*{R:pir\hEL#aO̸;y3ֺ!RcFK]oB_0 sjo)H4N1qR{H@(A0hkC|N:3FTsEUUbH]z߳ޔ UC)>f5ʁ'J"=5'`aK2>`ɢ8)Îǿ3޵Js)24[><`NҞ@*bx~S1 ڔ`y'_Jv2(HL+ʐÑ4RZ`0FPGBsEFpi\Sԟ{ev[ȦV|j RIv Hra4F + 2 KO*UH(}8ù\l RQ0I0rUq&b H=jF1L#+ 1h_ p?:9FNNTb)"Vi V :rhBE&^9zE2GzRQLI>i>i#RC{lHrQE J{EFihƩ?7=Oj(M=S?E mSE%! Cފ(ңMR(xsESaroundme_0_4_0/asset/group/1_DSCF0003753.jpg 777 0 0 50624 10163056455 13321 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222u" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?B(ʹ f]mmPBъx1F)ʹP6Ѷ1@ F)3mi40-[m8-˅_9N$&˧V!b=b61M;Td(TFkB]BdrOGW-|Li+u:haUFw?HђIȏ9ՏsUQ4FMW<(qZ‘Zb~g>~'.u4F0P\"$%Lz}?/~ɯ᱐d ); !7 x,=]N,u@7²l#2vrO]'!HGr>ʬ,J1Fteѵ.=sEoYFsQSR< >phZ\SKn)qN.(R1Oh f1~(7mP1F9P1Kv\P1]܏[+՛Υ :.ƌb9mtEB[#(OLGp8F1/vv·LѴ/|ҧ+˜g#`qZZp,>BQ=}}f[[EkLOq}?j hv m~]˨t:0!SF=>Sڤ:2G:z" h\b{w>s>`8li $Ab+qaGߧAm)J 1囎)rNOLH0.#zM566c3m"< ewU5z͎4S@b1Ebu-WRNk돔c@;R;b v)qL.7mf(?mbQf(?hw*Mlv8[BJns_j8;u6Aix|3Xtޱ3{zU35KnWi3 en*ŠSU6RO R_V|\SSӀ3Q~61K~(@ F*Mm⟶Q9$,*Ş.fh8*a?=|L(w7WT 壃 {{o֙ h!+m>c?@$?=^ĻUEvZB[٧*>]JYGJi+"eh-!Gَ{CKEo4S?2CV(ǗF]pZ6Q[B=+;bm"YA'~zu㊫u[ DD.@co oMO~6.xt4IsL&=v'`Guĺm$>޸'s{Wi4H-׽q͵ "ΘXd?*l -wn85U}7chooΧ *"ۼ v+aKH\4v8v6Lc@v <4W{q {y6`WCmK1EEmIm6҅K~)qLm;1K~66ѶFGu ijtI+b;w <ן5gvODKje9 L }5\.<s߯n$dFYkS؜t^߶q@>ɯ&M[Rv([Ϋ#(?~VhVD=C?sW UBRt~c ?/ʹ[W )_++8<洍br,ib 2_?w2}KYt {Fa޹ZKٝ|#aPϯ'>ռ]ާHm: UA#8䃚R:2S]9dYn&OR~~z(2kwϔBeNK}194@lrgfě֟Oa]58cg˷$}Gԁc ڄem#ݷwa7NXOj©#6FIj4,-+WN?XSBN,AcbS[)OC ~TcHGub O f6ԁiq@RmD!ivԻ=@;hRRO(Zƥk.{S+:,?}hiIi%6F=ꗐ Qg<9 ߷^F+)7hz|,b婱Nb e98Ԟs=ꀚkƃKAuxėœXWzLLnH{gk-c*!wݵw$JTѬ-pSۅ>~wKlYc&j.7M54 :/dǾ{+*Q6~UV:niv/I5CU~,[F̍kp9W9$#V{j{>t2pB8\z{[6.Mtvz;#d {ZhY{T޼U2YfW\%7"6_<+ٴIW̛r0HW6iS‘Ivn*[-z5 MvP q9yLڵ)E{$Ld=dl~6C b;g-yXzsG3nE%"ͥ!4R0e#UơOF@53D4 [q8N{Vwې1Ӝ,:u.c?Mc庁5d.[JJ>ֵmxQZ?S 9R9E2W.z@-JHcvjo]:r?Ӗy&p-/9%Ν$bDo%qQOSTOCu |낪0qҢd8rG^Gk;bKr[ R0 rcqϭW<}?kOrˡ薗yqh ff̌B?#?鬼JExL0r@3 d8jaec QJ?VTsQUN<І_Un.m5cZHtI紺J9W-|DZ\hM|HD}?*0@#kI=MniZ?jƐG"Bp~@*^cd<0,A޹^+kį{8ƒ{"i?30jQyKܔiQ$ߕ`jډqs*ܺhv=܂:3Ut{vP1NO (Vwv}ZS[n߀Y&hS}GUl4ϖ ^} JKI |=G?4=ePkuzZ4q!g(}3ׯc4M֢$8:~$昍m$_ԌvvwRa+nfb: W XKnHvўޚVbmNK[ILF|>OBqװDX]$Vst9^jVE@xT~gkؗ4LO-qp(S*cx3]c^}*mRD7s+x B:Ʈ+ƵpTЋC}7]\)ou+|?y}.XSdO3nef T35O=PEcJtOyntaiWL`(݌Vf?̳=9U=O 0A9ʊ)<Nj/H@zU Fh2-˸)ܣ<{i.dSlF&6bA Wk+3J6_^>LePr;9v!yW#տ&ѧ.QQt}+5-?3|tLc@4}Iğpw E[0%uV'9N1yeOr-T!@ld(ހSw驥ݙ%q I$>WR[ہ-#s;hPz$pKJ6ZYDR,UŸ= QPpjHI"F_.IWcJ"๕-#1gߗ??oS~YxoRR %ZM6Lکd%~2zzq>{ɖNRgv4:X[ U#hlb"9%pe<3.@*=qqҲt8̦D f;8e}zׯz̐hb/Dc@3z.os]`Jy<@} X-i#B1l2:Ú_-BQ$(x#OP1bIh[xqi\6|v-\~uN GmlyRkA}b=ɝ{ :~4۰mzHdSq8ʪ!bEqcxXSHGdky͡@ꡎ `g'vduxUWb~O\ߋ4N5Iv\"p޵TMjCFAS~uI&D"']! Gz_iǒG#HIu2Z2ղ$Ur܂ql]i$*A_0:tm;Eĸg bo g:ߜV ss 48iRPc}ղQ۞mG}5=*_۸9Q*f0%@COPXZZ-SD*+?XˬjJiSwߝg,Mcq^TRв]X.;1.ڔ0;ԓCB16IMلYf*;~m sQ%g+L$_HFBL /1N.X֐дIyۚ蠽x9ؠ(q7tq&M} "%BL}ZC[]&HF yZwwL.nBUAkMB1GA|tgZ:RZʶ @īt]x˧>sfynC0$G5k q:L,$+8!TKtƂ'$ Y`0\ r򨿳r˖ NzN$bĤϔb ߷֏4p>Y|,?J$)+ϋ,%tM""Jɔuu X?*ӳq[jX=emX8|!u.798V<.joòD7H;KZCX$v( +ַ%$\X氖Dm8ɧ50#m~UV+ny죁N8ƊB$6`C߸oҐxr|1@OiFEYp?PյbHm#3X<{VwOSW iZ ^]O ~ =ӏ#unSU -r\pANX~Ug|e$j 𣨓94ld{29e"q#M\M l^x+UYL6-{s[6̨eQy=)(@PsǨcTdbvWǾ[mTUAzU84ﱕqͶu#‹ɜF-Fld_ww#% 7$&(=뺸bf n ҳ3H1t8*\k]3&]ihJ`cZ,myC6kIoo(*@ &m.F%d 3gSy H?0a:E4:geI c &7>2p:Slc{uV/ ZZr89ϥgI.GiS)v9sYY-ȇ[tk5Q%]85Ut˃.D. 9ϹV?:篵KMaY7.qg'V̥M{[lҫXX`h2dm#[v]JFc|CC>tG;~8&N}m}y4ڕe7Q NO8+2mUXGuⱯtxZ7y`xgcUUPG1Fζ"ɓɈyfOUh'SUH{ըmGoV1S]5kǦ)S]To0[Fu@TK~U3t+ķ*ɪ5S( KZBRRQ@XݟPqeju)i 8]@PWWcV&Xvҳ[o(q:cSˢDgpD ;A_uSݤQФFIǯ9~դdR㩼oQ 2 @x&qYHGrdn^V39q9?ʮAՖXGLm.I犤cx{ vח$ETԯE $l8=Fp+QC .6 Ig8 cLD⡗SM%tN_ \]MŲ&mÃk|>慨X&<8XˎɅu VK.6o?; 瑓y&/'?4?^m!8Wݜw=yjdL';r!Xڧ3/d#.v)(Uzr;WV27ũo-VYP3tZ ߊt~-HɪŠIxe8^]2pq\hb I5s>{/嵸sgJ{h#DQh2@\P,@7{P?Ɛjݹ },(⊎I9sE#wNaU FNoO޸OOSjͷ`(#$ Ϩq883 -6Hk4sGZ@lJ͚K3i*n$kQtٜ.H(@3wxmWt_k/)xA5jfmN{aS;NG_9l(Y.8Y"RkW,mUH1mst;_k;"UPTd}znv4fIe nO֒ottEUu#?QU䄷XcN c1?*襘V5Gfa䱰ykUU<܆69iso{c)׭`K&V`F0zW4sngb5} iY } Gq,9h:OyMs $P9ǽoY淉"/ZgTntf\0D?.G< }5[No0*6 gZ J{y'jO7z/q3r7'?d׼`-P7 c`xO*8Sclgǭ9 TK@89B |ю+˸|OF|{.F(ncЅ{⏴g8ھ~Tn?W{(U>GB1^I5WƧ)HwHo u<0nZ ˘]Ѵ`Tߊ?oc{Qxi$]Ā?֫]jzpI0 SO x4i! ;OY" sӾҺ1Q[l)P`cl:aA\d7a%JpOuZ%wv)Ȭ:F rIΟfwI꿯+܆qҳ_0.1#8uSqU^$1ҲBdn*)2xhvˊ.n$ˀGPr:Vll%]JÒPb}id*L=?1'QȈP2ŵ"3QQZ[OhgQ@#ʼnt9;d7B8nGК-.g~=~[WC',3'v@KuF.XpF9Rm9'nm0`x09s/~ܺ! w{uoCjMR^+k&ۀ>GY%(_i'o3|<7y¹'oSJ}w ܩS΁ jg湟 5rewfzrkӣH-UTf:uk|y(7(ɫYM[t*H)<~5QNjs@שT${W4{4ًߦ ɽsRzJO4PW\u\?Y;\=)l 98Y ^oc\hPE\zQT+rO8XN3Z4x lvg*um>}GbMD4M2w1?:0׵tdV[HbEd*sk>xe$̹@ 'jw_vKnޕRtI?[" Mv+/#\ Ƕz8MxK ێp5V#Y Wf9VT-!RBAzsQJncT$4Qc6ׄk.0ɍbr3v]> GG{>nFtUsUo:ivu+\c .ןҲexrCeIT$dK[SQ*?(8 I/3y4qҙBoKqi-¨yˍ0HIÄwr*2zRIF[Xt|ssIiwV $H'SPS@O'ʓXMFxʻKw]zLx |hJ\L8nb{͸dyWOu-*7.'DP$7 uK Z'Dd~PO=*\ ;pvc9[fLʜ.xI=qVtX2<#3d+ϷLuEud<Ŝ5 =.Opy5oԿkKv0YBc. `c;U/(&8-\ޒ Oۀ?-~x-2Q|N:Ԯbi2fN2KE?QWNw|$[3&˄-ztn*Gm`@2`s6q\Hj[epLRG~v[Q ~cKܺ8 zӚꡚbX0\k:wݞ&Te]**}EfӹO4 )eϩTUo F^qHH5V&TN m6Z}q"eO8Ώ*R-[i[qVϜJg  WKY «Hx1OEJNkcw*[+UH8즾,m+<v, wV.vhO孥d7WMqm:h9Ȉ~r1ӊumxRYJ…<3ʺg\$8`H8F┟Su,culxBO7C-d;cխk @E8TQUic4מm!fQ.:=?uؘo1c "|iC*=j)4p~6E5U'I֧"ԍS!&]M'xBPHO'鞼S4Q4[&IZur0g?ʴ-wGAZv֏$(msϖ˟W1vĖ$ QZ۵8oJ܅KoGF3;y胴o?ҟ$BE\k";Lj.o&~0v&.Z2z'{Vf[.e`~qk2qc<ڂvد`w#Έv?Ji 2:=א?qZvЩZ2v)ˆړw*”>faW˷\}N*tuh6ZmA!<~e:M+} 8L(?t G?7OWˉ?ƷKq@!2Wº bIfG3ģ~`d}qCkC:+"Y׶k[?ui+[#$zԪ#j@kRH,$i)skG*YEi4R"BUgN_nG a OH]ŠMkՉMэ-䑍>]JܞOYvJ-Y/G(sڝݷ`z2$?ݫmG݅*P_c5'q\q iҵD" SG(s/o{?::QTGJ _Hcd?*7r¬?)r?@$pQ" JyM%Ugy)ӊ3L<?-hYFɳUd?4E@a$ucKLMǭ4(3n_Γȏ"c<ȥF:*7}i3@؞c'njMvw;{"7ZisL1`j(cBb5Ɇ=ir=j-ԡ.G(#֢ J&)wzq{ @NzRfsvX KU`͞mœT q2=iNMEzTA@}FO@&NM& . zuLcE<74d ɤ,i sgޘM&q@֒}4CL,i `8*"sފ` #*xp'NAH z\yp4SϽ ҝzf}0$ P=hQsKPӇ۳QsKzP54&3{QRN{[0IzQ7'<)7RHE4G4>RbC@ i !<L0OG!(2Oh1E0 i(&;qEPNqKE!wQE0qIC .h i($.JE!=}袀pA( q(Q@ M!`4b)ON8( 'B{ (4QE4?aroundme_0_4_0/asset/group/1_DSCF0004655.jpg 777 0 0 13247 10163056510 13313 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?RmôJʱ1Rb.#+L&"=M)vF@X@F )Be27;.)E-:W B)ah? &8qE1LSb2)1R`RNb<{Q~)1Ea․ w X r;O$`RDM}C.1NRbIw QEA<>BH[S&sR>)JfiZamJԔBE@xբ*}@7Jz MY l6u=﵆QLi(?P)Q.< Sza4\,D.]b 0j}(Xjm?*.!!SJ wi LVE;IB1EaԞʏ3ւA~zi!KILBQKF(RF8QKEv2jhHRE'hS)Ij_d5j4Lˊ'5i{Vl5"4kjr hFV5XeXa0CcgM]"Ø^^AV#`r! R2| 沛жB)䌩 8Vu˅ ϥ&dQ.PMH4LN}QܹQ8"RxjwuI+sO0Qs>ѹqsVS2ݼ#9Vcpj L$gU]Vz6㔭G*,q@uOZcXaʣ6tWBcW{UAG0Xh}Bܒª SLV1%MI;qX4v.yȖϓ>aҳ H|1 GQTnןwCs{Gb*(JLSJCJ7Z)QEw*՗P[ TLaBjYEW|?VYtTQWG\t5h\l!J%KbIc^Jv521"~4^ɾ_%opjƎKt?nZ~`\M =55(NW*Q쵧Ef)-aUSgOΫR lֺ?HYȃhpxk*, uajڊKrE<䎽^Q50!ixWA'}tQI鑶 ׄV|.0} =/kfiOy) ?ɉD{gFCvReGqYw3([,m/bs?yMSͦۺ@GS:v"t֫_I[(* '2Y_l +ǻ^~ ylGSU*}OVTCqIv81Ӎ%0ޖR!bwN?:/P3[SqS84EFSF." `c,S--ĽB{ ?1ܩl]z }nұ5AGKba.* }t.V?Kz:Te}%Gڬb-ek_HPnbN1K5oLtԡ I'隂?8gҫTcFps}^|;#Λb?Go&AnҫDF}HU4m_Ncb7)?lhڔZB4W$'U[[wܭwi~JiXԖªZU*/-K[M4EaJ T9'=9mH%UǛv"rۧ׫x9f_̱id);[ӟ/$֪'륻PۈJ˻ha`Hc3Zz̛+BO>+>ҶB -IovSwg<Ց]OVU~W"b6M1@Ki@"Q@TGTFtD8y4BՃw~]'2بPokyJ1Ұnp?1ܹljKX?9mWSU- X>WC'u?٫k' oV4n=bmplvҜ ؇5cWo=gZC4{ OԈrIn <9 hhڌֲ6sA!ޥG #vtsX˻I֋v^)<ܗIA<`?#h*ЁnՉSKSXSZ ,>"' aỊpT#W#WksnnYЂF؇^Qc/<㣚ࢲ=26 ,exAUЭM6rFJ꿇"ϑ8-JtjZ RsEGy"~E8[]\;y-]L*EE[uE[deGM4%&)iE0(4Bt@t9] @A9a'Ґa7}i]Ph['mw ǸzVχZT5eQȟVĵ_\3MKl ZI?@.  -_Ps:&c(,9'5 ,_\J\-EpXm8 USҴ$t4j"Xc#uvv2B<{0?ЬUYpծu]"Eݳ[O1]VR}Aӿ\Ŕ+š3g# H(O2Z"Wm?YaͽTd"5A,R&YO{vgέ{--=<ݏfܳi̧06z[cNtɦt섊>sH/#$ւI+~$vWROV_Ռ*x*)}U 0 OC572WvV:^$7JhcF8]𾕩_m^ɭ1HB0):x%ֹoo_Χz Uc!߈FVi-4ъ:1-R ESozjG|<%#,4"/>UZК?J^M,'%T ǰ.;ug 8P=jEMw"C|aqN_?PzNT8^d}ʨM-RZnҁvgj4>s_̽%q$k ia^ѝd>&Ɲ} pȑwB^?0ֹ=ij}ff"Ĺ5NOT0'8YU=kxe-B7~"*pqPĉE ;(JJq Hib)qEvP;PkBJa4IC\djx&CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Rb1LcqJ2,R8M;757EF9 /*BSgH>R)ffP≰7>Z jF"8D"()@㡨+GK句LW Qq؄=h")͔\V#& `ѷ!F*]Xji_jSH>+m" qXiRM=)V"#RaӸFFM!M<*b:)wSjB)UmJ*:THhZF!So~% wU`HEǥ֨Z ޴oˊvJ8\  5fKqm*;k, FzGبͷ4={'ځ3(`=!ۊ(?O(SCQHa#__&aL}8k'=) yCҮZ8qX:L)隴R+TV+0>dFV1XVU&K =iqO=zVILfI1 lE[%2֊Q#E1M"4+KFEHE=zTH(oiE fX~mSd2 QN"Z;+s ˂AO\zU%mW4!=? 2>{$sQ]&Ҳc~k(Fj&m@@1VYVnHp;W:,ZhFT>[*ĽQǢdE!kc"3N) 9G"-)P~fY%+Gb2j/mQ"2eh6Gg0Zi s>&T]WvUh ;*ESGN-Ǫ?HMvp?Zm^OLjRie !ƦY pj_.3bnbGEjϝ(ƘKZgSMdARe`T-gi`zc uǰ5N{PM;wSUɔg1=㨈N*(=s*IY n cԑhR[Ira^xtTmS6麊/B$?zZB9$z50R]}XFp f-44A)V^՜ˀҌ|J{&:uqS} ]a]{T,*TL8',}+_6CYQJͬW/Vt= U  lH) {MDS^_!4ٱ1WUNj 2Ē6jJ>31LTj]x0t\o#̭\|:D]pS}roO7Ͼ<53'?q?c-fH|@ !:Gp~#=Pf)@k+m:c0-Q/*gĊO(,#Tw hF a\rTc#nĠְq_O`{PBU?TŬguِCnOVւ@~_9GW4M`Z1yWM]Qة"O$5Gzu+xJ}֧6=*>gH?¯ 6QOٿƊL\MSsK}GF9QqZXj\bU.bه c "nnGS[F.s$jB"*,2ppjK{ɸ#Zxz?†,1yQZp1H?5z-/9l@$/?·EVHI`ڊN?R51<_}E\%Οo(s U?p:{W ?7~[$,~M^1y_/BVxQ)4ǜzڥU%ޫEk"mjZ[i?5Vݱ:I@9%HG qSz =>>1ך\$Êm(ZpU{fQgF`hD= $EgmoQd+馝I]&# "ҵ"l\78V4k8!U'Rw_*ٰn9uM#?c[_xOG $CGU;K?Jq^P L`4ͬB]x ZӸ\H]±=$1C R*OkD:ؘ+Bh]e9TH9Ww?l՝9 ;u<~֮0c!5p\8$@MmeN0j%$Q MݘsG&zJ+"Oi_=!b#ge dgS\٭ #4?bO9MberFqҪphy1Қ`P1vnz aZ"Y\M0aUHHhSiƚki8Eg=)Gޞ}{UjJAcSqc={L=(k)k[7VE0OeJl.F2k&ƭkt?VoJ ZU: Cm{T= g( UZ8#K\ёG%-]6"pv*mmuhd$`:jůJ~ttSsFWvsү *{HҼ/GV2VBnfYllt~cUx 96yqXuFY##9W+f\WRG5#=G>7W9Ǫhvx#lv? BǑHm4șܟ+|D|<ӈ8MWPЮ cY0+ `z\>t>Iޚ ֌.MA-!9ݜB7\W!\\cj zqw 3U z׼_z6 7 r'Ӈ}˘JT4ZiR#$eM45IYy$TD,0H+DC!4SQT!K[ں`4JM4{ Ҩ4Ұ6 sxUT kz{܌ڤcPd#BH?ZҥܟU^.tWg_5cMO>p*X~٪Y ܤjOL:ĈKQZӚ|wF|Y rF:W~b!cS1`uuMoKϟ]"VX(W":xQ{qM?G麸/t"݁$Hk~&Ǘ\0"O 4SbO^2]V@~"0;'3x:Y\dXEM WF8|!\.U'·/=qgۧҦEq`3,\cl/xnlLp?SRWVn^_Sf;F|\Z1FOi~6Yn,V|3=?ʩ,3ee'\~?@ӹ<5 (cEG=$%#VCd2ƖwTFENj/r%~c~ _Ǭf!T#vnIkY~'x?w;@Wo|tsUnd%R|< #m_7#mܘ>B_B5*nr?Z&:oVU^Z Gd-;Hp1 ~=?cTҹ$f}f W?r1}].5A)w VuV +VEQ$Tq9AJiZTw) sq#8o¯ Hec[Sdj'95n}FIX=|̃^?:δo~zo[=еeH`z>S\I+t ,nѲ0telGB=+OV͹[wJ˩Î&ak4 -%1nA5RPdVT;?+y2+1] ƍi0.?RjГ E*n&;8 )\4;;BysՈGЗSITԞRZÞ 3&?mJBG=Zd}7=s^aB!%,jВTG}C*Լ7 ON$v2r0Z,Y8hz?lj&bִXHoɏO kjia5t*Hx83K?Oԭ_[]GIbs\^šd<|G !H~Q^g/R{ ;Pjp}a隴>n{FEY?:=ZQdg!Evz7ůiaQ> Ը}[I7Es-#_-546Ol{$$_.MښHN#J^*RV=5hgjM)#q]H#Var]i^r+?>Թʂ休UiI6z\*]4;T9YVŲ 8^=]ԠU/Wk|PO,{H2?1Qj ;xI,=l q:KpZel?WZj6wg 0I@+>tԼ%7:t~bdA"22gҵ5݌2gAϭZG}h>3{9?|V<{ҐEt n(cCj6EB Z( RJ(1QEHhi(1(@QEQHbފ() ZZ(}jD'=h=6 0,g=QU}*&i$luv$EL59n{e'SEP ;Earoundme_0_4_0/asset/group/1_DSCF0007866.jpg 777 0 0 37573 10163056533 13337 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222u" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?fM&8!1Om6ъm1I#FړD{hRmm0"Fڗm&(-G.)1@mJE4G&)1@bmJE!EB=Mdei Ԙ ""(2)1M"#"V"E"+8j\qIvLMܑمM}rYj6%7j<`c gv]8k٢FMmKF6.M0֦V*5{Tf,vqb2TeiF)sKx<c JE{RV3=2y5 GQEbZB;%7gPvJUU)ELWP3< LM4RRb i+$l[/Hb(ZE0!(OcM1J 173޸qktf1K j*;AHu¯rn@xԒLy3)q8^|1me,qƑvp<Jݴ'#F@>s\U+6k|?ݴ.N*Gƻ{IxQ-= z:n ^A sv.o{AYbv8 ~ /3ړ~G`-(P]LC@8)=Fj_+,2VxHZq+ZsX|9 iMm*\vN8؁ASV}Q=e9'bbSLj`Un`X<{|t"jj0hRV$8츫j,8GP#&*U]9 \6Ѷ fN7̧̂mZH7@#ﱱ*9YU;Aȼ{17 `rP\.ĕX4և1Ԋ>ξ\\"i%&s }+SBl|u ʼvhG"+ER2nSTm8*\/gbD?u-I9۷Z`CWiI#2-Zf8|rJGzZb,nc<{Vׇ/?tt(0u+fkg_F8e$f(c@&I5ƽΉ8rQ>g0Ҙ0`*gsF74@ZY\ap/5Y6ΫjvnZ#i֮CdOI$ަN4=2[˓ `}yq8o# \r9c {j6?aUXXMǎp:ҼU=H%y ߴ5P^ͳӷR-u4+{XUv27FW=+?⌹O1?*r}+"iqXtYzAq׸5wjlֆDA=*GG&Oθ+4)դb#i]vOjyzm>kڮzg]FO)ďm75DlX ?5ѕt=wy&XӼzq4njq)>\kpQ?*0ޕWB]6of24r. {[pZ?ʦ3pɎ`IッUK.a~Y&*G|GLmĐ[nyVa)s?T|Jܴ-c)T~%j9-ry&7gkJhݿXOc8W*;?}6"#i9?WC?%^Ƨn`iZhtg+55k;ZMTk>{sRw+Xw>~g d5_HޥhiI7=I^J4CJ].kk2o6qMg*Ҍuܨӌ:MSWӒ, 2{z5|V J㼿%OIVvaiY1w[EH@F𠢓4T-M)Sj%"c<s;kyq 9=Y o~ZGf89=k ةoZ-' | Qޯhng<*Q7CJM):N lLT:8mfGȩ#UnuTkAZQ4,:f#NG Kmey"9SUu%\{#+*<*}n=bhC:` gOb3Q)#W F}rW2T2 ^4Og[@'2"H 3IDmIVbi^@å0GaF>!ie!O>IǚNȽ,Уmy[МVcی~5?Ɔ8BR4a%>`;zdJ%;FɒRhy޻MjZĭ#gçVh=6O0KC'Hv ޣ'҅UQ=*mO@Kz⧾i mޫ-{i{m@sҥIeVDM;r@SU3*,s?,3-w$Ij#x=ic̆H8zJŘYEr?ɧ۽*9Rm'jGbURiȢ2J* Fy'VMNtTϣ,9&1M圱5j #eKʐpk˹vqA݇Q&Kq,ż*= *da#3He$vsߥ3xی{]A*ZwX8Geg5uQN2NjHĜidaq<6IOzDB\>+^9algry$,rI=ֺݥʹ%M||9}U(@ŇsҒ`KP1d\}ċL 3)>4CSlpSY7υUyem{W8m?Vt;P0 <72VԽ*HNu ϯ!MH 'U@*;T Jnw9 }Ҝ *BQI E/˶'GJڕhK9#?Pk6v*XUG,P 1ӡŕ*C1E`y7 hfQ)(hb= ᗉJH-uY6\+״f[ P9c<#\KU;sⶍnUfs .dϥ."YadUJ,h]*X x ;K{ ˨!{i'pq?j*uY\;)?*)~VE+G '&L<{X+GlMpVV iQ%y299u3!#ezO7?'N۫N:> X}’ȯl;sϽ_R$1/„s:#MPM-\j=4;f2ږf^ܞ( -FHszhaf7wLF~XJHq# <s޺=8{:\H5 !Uw,,<;crYdMDFz<=Nj5 .nJL}$`-ҨB<̮rky eE6Ncy8LE!Lz!R>SF  AM+`1:Rͥf`*ьCnTF67\XtdnUkB:|79dF`w03?-ciҝLJhǔJ>w*G'g?Ηp3rtJ"ǟJ 2HY<WG[Ӟ1UY.T⧳R!2OV3ص"A0esbGNj5R7Hx(EI2:s,ěЏzF㧥IiQ J[e✏Ÿc/#ƫqv贫$971ԧeLn ;2r{ g?p~=+cNonb+9xc3cKl`Cc =jhU™I*9NDrݑ]N'wq$A :Y^s+[=- W zJ ˎ1V%GP\[N)!uRN-77]vGoƇ4Ȕ0q'coEb p|n~_ךz Bw.Dfslfi $MW,"d;X]Ūm͆#Th r0HRn NL˂w cQ?cWLer2ys3Dm#l15J5g$wGC7't('zZ) +SEԣcj׈ltm]ehaU KȪ'$Q;~{~T| f>Q'uXU )Q+*dw8kO+sdIV>ԟ5!m}?ac[vGmH@OWOc;q7ڢ@I*qV̧HÕw佒>p+oR#&;nn<mem-KcjL8.p[:snS.7o ҵfn$(D"&Ov-+š~fn|˓3lFW'OIQ0V.1 {XS `qBU}r-.RV $G qsJtM>Il&`Vϸc3.}.>Mlf/5>``^]'V|C{rӃ)8%k NM&0ǽᶍ˖ @sǨkAl-!1Fw)c3?ҦkXqQY4-2}YRI19w\V$r!B;iյVgvN2v EU8 iZCQ$5b7v6>O Dkb>cbs,yJr.4H$muQrUn=~dr[=fT/wqel0>;m0 ݆8&8_sF .?@ ܪ>/X$}Eu)notqDD=j4ԅsϱ9v_JsNG\msGLFs{ BTY1ؒ+#[ƷYGl@a:vصLeLF=1:ɒ=w{z^Bػm) rKRitooȼwuGo2GȬOPܶN ƇOqPF-0[::)hT˰mL12G}@ZnTvmSaۣ`d:,9e # FI[ЌQa} 9h[H]}3LVP*x 9^/~)YIm-R;(~ʮŒ0 b Ҵ"w=>3X)Q:Y,r3߯Zy,sD?@`hPqz2W1IJ=yKjkxXֲMzg{lfd`=+r_hjml|k b{*U/7NĶJ.mƳjVۘ$ei?Ru#{5c='=|i ֓:S1!"&/_^"^,]ͼjYrĞGkXxGK)V>qkbث8V/ '_O@G= O+yC L WCx^Di #q"l1{/O kiԴw(7}ESVܖ<}ko\Qm,mV<'?'Ш\u[M:%gMzZjk4Mw[3!~l_燭_Ehc#g[Cr T6<!p7CQrH1g}u~7QE }?Q#mnBpk@ʛu3҄ʶ4uQ!? VZZR g`*BBsF2[Q c8XDPm1nr~? |wHe@\O==(`TF:+{ 6#$7ֶ,Y乶sByҀ4—bzGxS9[pCYBeb0rO V~ZJc <^GvemځA =gu)Dhpe,ZR˵XWOՊ\hd]4b3MEi&1ni!µS+XJ$3KQ}g{l&ى,ske,\n֞mx蟕 COy1'4X[A i b`?lK`Q 3֣PГ0CFNm'C2?LGԜRЏwАh0zEUy,\)dsW sV[Ig٤B|Sfic>a 4ٰ\$ɒZjVH]ATj!PE#Xj`b[` ;m-W*1Zu$Xu0}dS_ bۏڴ+Zu*8. e ~ù͋K {H=HJN @~O6(z϶ +n۫ VCW$~Bϩ곸iQ-IMNX`#Rq&5ϙ$2*9'tR;k:r~ҷ(:9%Qǔߡ"i*ȢTe9 WZQ4 4>(U U< al=#U!k$}GofD*_ѠJ.(Y-,|R( Vk|j!BL47ZS?#LNKg'޹׸<ox幹^&)XHC!?:MqĊ.Oub:ve2qy+{}QO.u\SaTn.dDc+o V)gq[H cGf#^z΍BYv@}+-R~ b'L pj-.bH~^={Л'үʘ8_Au?o[y jqbkk{e 8bN=rpHthkFvGjVܖrկYHv]ס lcK # >OZǞ=@60fsï4?@,roa$\lfV8fhSNCv9 INBTqbUv>ւxn3/(b;jƓ-c≼!'8NrP~T ܏7=t8c@X=#GJeHnXP3t힌:ASЇCDM4:9:7aN841t+T㞴A, K;X4 GƚC*Xr^i!y_ɨ; ~>ˊ;0"r[)}V^nx5ltֵ\cnE56Rd\E>C)eOsel{$0IЫ.Rv bh.R͟.ۤ/wϏʯ']w\e|ބpm [bOt ,L< 뫛YBDcYN1XeWlyj""2"ƊQ->oڧU!@:cM RX f_pO5NY ֤MX־&^Gkb "LWg$ү4ϴq,;O {6 a VPZ *B=9xnƊz#j4pL\C\Ϸ#sEӭJK-֏&C_~^IS$Les#Yz䌏«Y_eK;f2…FIn,tt/knQPrVu; ,[#R +wl_n\^[]yB$`lu"H2̪w0NQ)ԯq J'scC=bavpzK4*9@UPS[z~ct:tZ|mvgXmQ NqӰ]W8H,Q "2,QiZ=-]jNTf+},퍨`?u3R[ diC:p@}TS s#Fl$,{ɣK$ )g'Z C%ݳOޭͿ/2tQzh]\ {C@᭧]3lcC cp`m1Yd%zp+K}P[\]GgBK2Tۊ5PUiSpqEyC}glяJlttu++Uʿ1,$(<НggPG_4I{}Vg؅tۚiڮ@{Sr$iH$cA1i"7SD0ʲ ʤmr~\J]9ޘdg5An3}.6z,=gp!񬥻~ueog.Lh }ME%?x ̻s튐]@?2ZqUoQNV1[O"-1@JH0#:U+u*Pbq]VFWMĩ?)Lg"ÐBnH+uLiEU;Nv&rBĊ, ĒOAQya~pw"zֆW'ґܟcq#eS@+WyB=pzT /qL-ӌhWGcQw1T.9?AQ)O4;V$7vA:w5(vDGpAu#(#Wm}9RF$uxU6A>#}d(# Kt xPHe'.QxH,Umr@z.#\%B HszgIr$ՔeL݊1t ?7Xô`!W3vq81XN/RQ@?Rx$c>qŽ&$6sQvk\NnzgruWyV2G\FRNb#$w f'X(~`[?թxM`o¬lZݣV2?a*selrlf3FO?UW;(q ~s;QfP7 {ϋT;?5eeϕ tSF,X hFF}*HîqG~`hAbO"YoGgn{gv#1Po縫qDwdIjvz 歼X:hh3$HXOhB=F*`!繨NpHb8dk9&d?0:ՕP= D|Jd.j4s" @V}ۛޘfwxcPOaD!NEF<]Nl֞w =w̍=+)AIFN:pBz[vv#o*R3eJ7+V2ї2!d (N.@vwynj,P!oBةtsj)`mv}z*ܕ%s:pGZx;d#ؚ\s2E`ɗbvGh2?ſ8u01;HE$-3Q [k J!{NX+rzCe< 1*bx *y>3I` JX:(;G@. {zNUhnp)vTiIH6 oZ~)va1ޢa"kw. 9n޵`)I|ЫltVP=-DZE;bT,w֠xcr:٢OqtZ&IH`zoݣ 5=\v. caϵVn{vM![9qr,h>b>#TCNe _,g&HҴ*Bb(d!u)YN8~R{rȦ>K8ppb6@9ƕ;I) ̓Svʁ\rU$wj0[ Om*?1$ TG#Y|2<<0m]۷zqE%I$KRo(@2%<38!zZM Bx O5-Vw5PpjZYT8%ԯœ~4.~s*B4r&R4$l{ҔCPX{vkAQ##j`Hk] !8)ƤgqPnT! g_ZzJ>HHpCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?)@pmOKmmImb=m6R6+OK#Fړm.mjMh-mvѶ#Fڗmh-bFhmKM6MM.6[i6i6;hRmCmMm !EHVav3m(hʹm6{ivԛivaivԛiv"=mvѶ#KK"KFmjMhѲmjmlvѶI!&ژh mOC5˅U쮠In8F1G:/sKۊMՒBE7mX1Hх9p\&ڛm& Ch IzP8-(Z-1 )vӂaivԛiBӸv"K K].]\vvC>6SmmO6(Em&ʟm&Wjmej7mғJ1RDlY=qfIs)W©a\kѵ?P0CsL.{⸣,$J=]ș*=ce7mCVI1Z)\,4-8-<-<-E˱P.P\,F N Eb ZpJ9[)Bԡ)( StUA-K XyTd]nstAlm,zUcQ)+oe.ʗe.ʾb,E66qXe*}m Fʟo&W lSE) !Z.;-H-fg?lqqs{Hy=mjP2mZb-ҵ6)6q؇m4M Thq ZP dTHn8V<ƼiE4$8G0I\ ՌCx-}[s ň;S乂FP^n' =Oގt>F\Kd>vq'o"2 y4{D]kb c?\Uf!dΧkKO#`k(a 5)^W;!BǡN\V_5 hb `ִ3#tQ,p'wNWRusTv: Rqk I?,g'-#|}\(v')D/e.K1Xcv3N=𨱑PFb$ML,-`uUyYB\qL X""~v|{1峁y@ǹ?Q_ԗQ9ieQ[/gqF/=_\ePFu7Κݱ0|A^H`sҩ "ňa=K*~IE#* UMkTB 3wؖLyUY;|Gʗ{ek|nفDL"IMʪZ"ZaO(8ӵIoܯ*OQwpD+!nsݏjQ@c eGpЅuٹg"瓒7m-\nk:It5h6cO_M$P33%\ym'ܧTOg ;M ҉Ȓ\2i|J2p5LTؕǘ?T?Ү|痩*sRوzZf̑oOM4^qϹO 쮝!`.(@9+El#]Pv9·Τ!5H:{LҤ3€Bu6c4$9unwg;*Xp@v1EA^kf="tRMr Q]ʐ ;Wk'Qp8G;S,n93I$1 nTfQ˸zTO'ow7m2Lt0!<ϞE]B70G9J2Od#%r}#CNbl!r30k[:*t@4PnqoflũʮNV69Zԩie:Qc(~ȏeݜ"ɐgTֽTUW-rWN0DqJwslHɋM?5j==K0ƕt,ƫݭhEd?ZXymo,00U:[ztkөseG8=}q+ /qq,ך ͈2xϽfZLo @Wwq^"v8++@E-Pg 8'oʷZMV})QWSg8y/W!͑ܒ:SΞ3ܹRG3/8>\ȭ8l|+#\ #K uf#r&8植4sO Pgd(֭yܼd&1+gtܶ.mF;3ӚYom $.0YFZT OfPrO? F p#Fnc5iۼLdh$6y?th%&@M2nN/~$d6rC)*dN>[럻ϷjBpjOcUmt?WyחR(JYۨ?Ъp8~`-4| ${Qp3M򭝦z(~F2,K6wƀ 8#Qp %Yࣜ9)>dyS0RI$q ;ܻ #zqy`r2>e@HAΛMݐÌz@?lc抌+>0p{QHe4K t+)FLeF9ɪ*X4OPb3,ъU_܆5*$}i%R _ƈ#W,;rŐAr! Td(\.޽{~t^Y"I7yc%h l)A\;wPջ1@%0ђyԾI,MHtly9}(vraۮB@da"ӿרk6A@$8cdQ7?g8}2b̄HqJ`dFr'i@{l2?E)Sѓ=p]doyz$"U0a?~Zy!O+=nCajW_bc_~Z#RrBǾHIo7#=OI 0a'{ԖcE1?8t%lS;{O,c9y4,)n\H$~FGce݄;Oqɡ( <R@v|ޢt :^P34$άFJvNO"O#ޥ_7sid [rF zIchZYr}:VA YUʣq-R 1RAȢA@sz2ջSYwey S1֩[Fڅ/J$wK0{RpA>ڐZ 3ќM qe`3.T`g=1v֡@ݷ ~~FxdS*"G|.e<푂H |v pzBd!ewXëH4s[f;w3#i Aa'd%[[x-M#7L2g<7 D"ZFgAu·ÑǥcPT?9)UvZ9fTU9Q[3OxL 2c+^C1 Ɗ)vۦBsn58 TzQ@#ͤ[9Im=Y,szMP4ioI3ĺpN}#/t1Hysv(ފ([RK\JY=FF*r8#((Km8( ,8Zlح>wLivLqK" '(A0(ioi'̂m6}h-Ih%vөj*<`t*@srZ|fwێQRF615!gSCe IU I^h cJ䟱gKvA HQT$ո5)J#QQE Pio%w8MEwo{QEg=:$_*&8ES aroundme_0_4_0/asset/group/1_DSCF0008780.jpg 777 0 0 20476 10163056547 13332 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?)@pmOKmmImb=m6R6+OK#Fړm.mjMh-mvѶ#Fڗmh-bFhmKM6MM.6[i6i6;hRmCmMm !EHVav3m(hʹm6{ivԛivaivԛiv"=mvѶ#KK"KFmjMhѲmjmlvѶI!&ژh mOC5˅U쮠In8F1G:/sKۊMՒBE7mX1Hх9p\&ڛm& Ch IzP8-(Z-1 )vӂaivԛiBӸv"K K].]\vvC>6SmmO6(Em&ʟm&Wjmej7mғJ1RDlY=qfIs)W©a\kѵ?P0CsL.{⸣,$J=]ș*=ce7mCVI1Z)\,4-8-<-<-E˱P.P\,F N Eb ZpJ9[)Bԡ)( StUA-K XyTd]nstAlm,zUcQ)+oe.ʗe.ʾb,E66qXe*}m Fʟo&W lSE) !Z.;-H-fg?lqqs{Hy=mjP2mZb-ҵ6)6q؇m4M Thq ZP dTHn8V<ƼiE4$8G0I\ ՌCx-}[s ň;S乂FP^n' =Oގt>F\Kd>vq'o"2 y4{D]kb c?\Uf!dΧkKO#`k(a 5)^W;!BǡN\V_5 hb `ִ3#tQ,p'wNWRusTv: Rqk I?,g'-#|}\(v')D/e.K1Xcv3N=𨱑PFb$ML,-`uUyYB\qL X""~v|{1峁y@ǹ?Q_ԗQ9ieQ[/gqF/=_\ePFu7Κݱ0|A^H`sҩ "ňa=K*~IE#* UMkTB 3wؖLyUY;|Gʗ{ek|nفDL"IMʪZ"ZaO(8ӵIoܯ*OQwpD+!nsݏjQ@c eGpЅuٹg"瓒7m-\nk:It5h6cO_M$P33%\ym'ܧTOg ;M ҉Ȓ\2i|J2p5LTؕǘ?T?Ү|痩*sRوzZf̑oOM4^qϹO 쮝!`.(@9+El#]Pv9·Τ!5H:{LҤ3€Bu6c4$9unwg;*Xp@v1EA^kf="tRMr Q]ʐ ;Wk'Qp8G;S,n93I$1 nTfQ˸zTO'ow7m2Lt0!<ϞE]B70G9J2Od#%r}#CNbl!r30k[:*t@4PnqoflũʮNV69Zԩie:Qc(~ȏeݜ"ɐgTֽTUW-rWN0DqJwslHɋM?5j==K0ƕt,ƫݭhEd?ZXymo,00U:[ztkөseG8=}q+ /qq,ך ͈2xϽfZLo @Wwq^"v8++@E-Pg 8'oʷZMV})QWSg8y/W!͑ܒ:SΞ3ܹRG3/8>\ȭ8l|+#\ #K uf#r&8植4sO Pgd(֭yܼd&1+gtܶ.mF;3ӚYom $.0YFZT OfPrO? F p#Fnc5iۼLdh$6y?th%&@M2nN/~$d6rC)*dN>[럻ϷjBpjOcUmt?WyחR(JYۨ?Ъp8~`-4| ${Qp3M򭝦z(~F2,K6wƀ 8#Qp %Yࣜ9)>dyS0RI$q ;ܻ #zqy`r2>e@HAΛMݐÌz@?lc抌+>0p{QHe4K t+)FLeF9ɪ*X4OPb3,ъU_܆5*$}i%R _ƈ#W,;rŐAr! Td(\.޽{~t^Y"I7yc%h l)A\;wPջ1@%0ђyԾI,MHtly9}(vraۮB@da"ӿרk6A@$8cdQ7?g8}2b̄HqJ`dFr'i@{l2?E)Sѓ=p]doyz$"U0a?~Zy!O+=nCajW_bc_~Z#RrBǾHIo7#=OI 0a'{ԖcE1?8t%lS;{O,c9y4,)n\H$~FGce݄;Oqɡ( <R@v|ޢt :^P34$άFJvNO"O#ޥ_7sid [rF zIchZYr}:VA YUʣq-R 1RAȢA@sz2ջSYwey S1֩[Fڅ/J$wK0{RpA>ڐZ 3ќM qe`3.T`g=1v֡@ݷ ~~FxdS*"G|.e<푂H |v pzBd!ewXëH4s[f;w3#i Aa'd%[[x-M#7L2g<7 D"ZFgAu·ÑǥcPT?9)UvZ9fTU9Q[3OxL 2c+^C1 Ɗ)vۦBsn58 TzQ@#ͤ[9Im=Y,szMP4ioI3ĺpN}#/t1Hysv(ފ([RK\JY=FF*r8#((Km8( ,8Zlح>wLivLqK" '(A0(ioi'̂m6}h-Ih%vөj*<`t*@srZ|fwێQRF615!gSCe IU I^h cJ䟱gKvA HQT$ո5)J#QQE Pio%w8MEwo{QEg=:$_*&8ES aroundme_0_4_0/asset/group/1_field10543.jpg 777 0 0 11226 10163056577 13520 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222o" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( JZJ-BBF㰪^g#BZ=ZO_æW7|7BHƥuu)`Od8\rMmʥhZڟLGORЯ>?4}/k^C[Zi֦Wܠ<IXjqVxW-JHm- `{s$q!by+5Nn{j}=BC=Sgf=#C=S}Я>?4}/hyOФD??_0/hL_Z>D??G!} 3yGgf@ב!} OC=Sgf=#C=Shz} 3yGgffZ>3ŏB,Ec{}%WLπNk_O=t:lxcS0Jtag8M5\q1wMz'z)~OW|4}/kNB>N!IgZ4[F3q|5 5k;hds`s.Mi#-=LRwSa%He]A ((() -Cq2U$&yōpp?yUiT}c^l܅?ֳ+t2rrEYӬQԭ1&zn_ ԀppO\s[>)[~+g" 5I^AESQEQEQEQEQEQEVׅ/6w6aˌZť $"W@rXj76rVWIͷ(8S&?|1YjxsVFm#l|0Sֲ&vrX݌i|s/5m>Pɬc0,cr[nA~Z|&MN짢JZB(aEPEPEPEPEPEPEP:9ҺD\Yjsn1|5Km?[LN[ 'G5E4S%l/֚]{ ]/OҸJn2C:i4pn2LZ_M$e]z2J* Yz>oV Mvֹ ]Wėv^©h}yiz(&j ۸幕5,I)&DM>6NgU%K/7|,3T7QEhhzquK?A/SR{ zfف9k'5=@j~ N!߲!"𿠬RzQL((((((((\G6 ~GNI9Db2`%ݻ^Om {PEjm 8'dw^!~}:X%dG *A .s?w+n EPbIR%D# G|Eb֧ArYR$gTK Z|M4*!ǜ^iZ 3ۏI=<נˆ?7]߁4nhq4>AuCuG({/iw<4W‡uCuG4{եZA?TƒTVsƒT„T^=cBÌXf1ݑ`=pyktτچa5xY3,oPy~*Ɯ%+[s&N?By~*?By~*ۚ=pu u6,DKO-žv+e^(̛s{f'%sj$ܙbZ*MƟk[XŚKX߻[]Z]Ϟ݀9Vς;aYkqwmǶ*z WP+mPp]"QF81۟JI5ufBI&@?jtIGnf`449Xjh:rk[AS+݃sނ?YvҌȸgq_r+е59om4Lp >HETy}6OjXivdo{IG$EG2-%-dEPEPIKI@Xntav#HUһ3`S]z%.l-+(w J:KwyKIpTxwKS{̻vnL>gI9wUtOBgytZ6Ar9FOPxw6;8n,n⹸$`21CAӵ[+ZImJV:>xWVѴ%tP FH48it+ ](VDvéW2B oU =k#o>evH5~Š(EPEPEP66ҹ}x|I69͡AAp=##wWչK̏KnTOQuPop%Q“7^O5jGR;o-. }`~5-Ko8Ue\'ԃAƼu h~y9۷8Jxݻ.o>asip?1Uh:徽`v D)&t.Ж+fVPȪOT9=:viXivbHI!rYrMpk@HEVC?aroundme_0_4_0/asset/group/1_p395373reg810.jpg 777 0 0 25147 10163056607 13725 0JFIFddDucky2Adobed         #"""#''''''''''     !! !!''''''''''"!1AQa"q2BRbr#3C$Sc4d%&!1AQaq"2BRbr#ᒢ$C3 ?(((((dSP̪ 1 dS$sUc4pt/n'I_Up>{9NDC:bI"MO f]]5`P=7?u3_ge4)Vf\9߹ RSOi>.QF=F~UO^[}:G!RtgV^bIpOg#5HmWUF^"T/%'^ZVRM4^~SUh?q6&{on #J@ӮCy*38gc*^eomZ}TV[m#Go,{zSB&{C#HO~]G(SMR~SoN[zF}sx4!(Su+PAim=AS-)4y"vQ!+Vv~uuKM K51CÍY19q8T.:m,\mFcF!s5[Slz+JNp 1Ok#Fh)Z(ș`n:Gz 2cA$ 5OpQdS-WU&÷D.{q kq+w`rQ:tM"׿};=4){3N6qzi5hGm0O_UHï좃vk{klp(2eI6nd6Y Rt AWCrxVF~ \ KbZ)U2ц!N,"r0;H;f`P7GcQM *$7k/'JϻP>S cK,a3HG@ק[Z0#e[-lo܆8 #.[FD=M!yGx}&FڅkO~푏c)Z5KP"쀎@EqSέCOo:A*=$^^]͋s#Go"89HX\vfq0ҳ5jIqe^&ß* y7uV\bȗ.rg&{i@ObU_bµ VK (~,v=}jNnvt3J4 `+4WVn{+rȐb[MKs4jVugZ.\kj2z4Ha~`{i: ;"UGzFƔSj*˜IRM<+ \ 6[+ ߦ X.BAZik(2cOO*$(,MMs̲qr[+,qq|S,(5(N4r 2p sEX<(5Ւ[꓇4 {.?|pm6 ӽTFxjm԰mq8cUeRޫxj#Ȭ:LODִ0`bc 0ư?J Ga (_Ja(}{9S;Di1.Dj@ĖbIĒs_Ie\AgWŀ\|skh16+ˊ ]iSAAJE8 RX3 YrdSA<U2H_'m;lLK r݉fo{֦ nEcd| Lٻ+0y-Y Nfu`'n։3:@蚿Rje<P]۸S nbX!`w\0| Ċl^$'@aaܰ󱝰٤hC+~"*Ƶ@EHA9GnشvYxGy5f#ԍIA<Ufvj#a ZmN]`C:R.$bq8Cd ч)ԞN>Sտ+[UA-?m#xxnI"~WLP{*6=燬S_ԓI bG\],=l2/a[O]uq]'ş_iuFU\~ú|O?Uu730 ){;ªy/NN&T"O3Lxq<,J#B-ΕU2O * 9v Y 08AWaQS6!w͆n꠳d0P`."޶V(Q;%Mm&xu`cnfk?6'%@X n7U6MU4Ty< 4b9 qNM<޾_EJċqVd+wvDžTuRK p Ƿ&,JK xv(Luoq6 U>]|gWvD}k\F*ґQ3rIkքڱ0kF-,@,=eO,`6nqC;MJҬɃ5o^09%\r5GÌ ]Q2WeEgos&>qqO,G0\Z \ڱ.mvտ8E!{h@1s^Qd7XJۃ&s^@5_tۣ01w-bKz|AɆC-_ADry?ƠGހC xX"V.>^Åر3byǚH*ؠyFOR~VrnZۅ[?MTu2QbA6X#CIbHWJ7$oABH[w^np}[oBiB[c"DC-AǑaY8$Hpd԰:XRtk뵇j=H"dӾlVLm4 f=U[ O0R F HPuS2++; cr7$!S-4ךܿrs>` #o KL[6 aBh4, d,&W]228jL>_+a=NMf^qa/ zV$qE5 /ʠw ifO1`l34԰O1zM\̌|\9ge8##mEMԐ{l`*;!( rG}q/G1srm$[bmov^sjq1! 4!{[Pn3jLZT_L[(]F%'^Lu;LݻEVeGkSd<{\m&H㋎4үaM cxER^I݉!#Qb!#E[IB9cZ iY&Y@nji4Ԫ wU'%W?1~5!<^6_Ѿy[ |h?կP ( K]9 ܱ/x2%EsX+uZoM׽p>FͲT ( pe\}@gKSphVqH@O X)gRnK.RI32VǕm&y8+B|7 tol&۹p#lFqвJgZ/4, ., yd7m6 L&u@AkNbWMs;痏}ۖj/AhxpltXpb@cα 7 % Ea|;>៸`I&%tVXPI7>.v>rcqȘu5;E$;Le/Vs-4)idP `;%G@Sw  -=U|;fI|.Ml]m|fgʸ81B -`dыu쵫7|e\>K,A5уp*{GR╔+-AIG#KmÛvZhI8ƟƲnM4|e >YaMelpcAbou{oضmi.yϊZIc('+p{X[Qz[m@@ E$۴㨷ﺼm>ip XPTXoS,YD=,y ^%^cQw}ʻe?;nύЁ'39S 445ΧuƪIMI %rts*|y>:k`94v%b&g=ZVͨ(>C^R}r"[F=| /ޣq]ub|NJZi}|e ?2ت<쫘~}kxY EvZҤ>1pG}t}V5#''}M$ˍGcM"h$Y e@t|ڨ#Hw2{\'d ?n?ۧwA-aĂy07uKYK[N<ؖ%X~EuF/& `o) pmGtQyW6.Hat_Y|Ica4}QBq񛇘ao %W˟Vj|ڼ/nXW2%T`bFouRMF歅4{⩏q8saHo?yz0}J辋ݵ.zǓ'=Hgv 6<[$')艚e,QT$87M+ɇk۔6u$]"me:,w:fv $% ⼬u<3q5`(#*Q>Ce(!|>0b6=I3l>p];"`XlgEmMDYD 躲۲;g xcxxj}E4͎0wXd@ /EXvn݃/xͥc7ŽݲbvJǺwa&:d1JW-=L, xt`u,8:0ڲM0BDD<5e^1';kH1I|(a(+߶ ۖݹĿvEE'qa/6ߎG<^۔`kCW_Il 6vܗSGXVf>Zo^_uaʰ<sG[#+Dp5"Ӂ/Ni۳Ez[Zqky7qa<rDEX:ߑ[Eo9lYsœ$rbKhW2J#8i߅zGZktPȮ2ƶX޽P@m@)R#c0ydYP$84X#Q<.k[k{wr7r0ǚl v,,, '㶥d-[r"Af1\+jYԺIٴ&#.qkj+WC?6/j7*|R \/=_SqF߾NP¢l~?U~>/ש[VxAԮ* m_IDҷ@\[]CT-싷]~VESM; 5F{ :5a|s4'>1q#cDF? KEuv5d(t(((((aroundme_0_4_0/asset/group/1_rotatearro891.swf 777 0 0 13027 10170573617 14501 0FWSp CW]=ZmUf? |feoOZ5M4|]ўr""ΚwJ}|*(-tTq홿Z244]2)3UV8b2· r󋴽+SK“=)0SRIL `;NN=<` YL&ӛOLN` ).Zo3f͞c65^̗jz20JLg` xY@Uz[j @+@S`X%GPT8K.-pˡ\aR*-ʂ 9fEGBKlS @.澼d UCNdڹ_Js L`b0*0MRU]5binj @-4V9q-0NpRV$R*-ʂ )WEDXj LI@)&6˘ @d$I Tr̝dp28JL@ (M|v5ր3b(ق4/ m`"`ULs( s@OY0 @0Gt J$move]mouse_x_rootmouse_xthismouse_y_yquadabs_xMathabsabs_ytgmathsatanangle_thisNNN NNN  HL H J HL H J HL H J HL H J  R   R      RJ ! @-DT OIZJ NJ IZJ NJGIJ NJ IJ NJG A# @6`mousethis''w s v(h333 /\jcb#_qEiMh~Q[jBe(Q)6 v {eHPXЀͽcPjH@x7.Q.EcGln\k-J{nKvsu(KkJTH2Vg>g @l 2M&4N4cS$ 7+4 *TJRI ]-%JJK$F i,eÖH nQ! H6i>MweFu6HiǦL̞bu vH9` UF [K%JT kXu*E-e{b+X[ f? if2L*`9M@&G:ƶS͛5,@KL߾-{` -MItZە ,e1 @J%wԕ¯;6=f;k7 ԕ$ j(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_WL ?  MetaPlusNormalItalic"FH}maY ']` \ 2  dzv̇q_MG )@#- $ Sv@^MIQds,; hXfϛGBX'y[J%ăJu/^m0`bZ_U^4e3D|GJ3M[(]K~O̔!Zኖ0ɐ9@ZFQ4HՔc9d^ځ+Jl  ODZڶ0ťZ:f ސ-)TkMٵY.VC529Vu|[ %JytvZ}Iuwp ?g2v,ؠ7rrI.}ʿLRԥ- Nyԝs:EXœ-{ |O/nRy:祈uv)NnotC4RmT uA-GC ix(}_p1[D.8,!!q0$F hʡx(}_l*- g9v lRv!8(5Ec `s_~b-W ԯwNܯ-*ވ3JιyR ϕ.,RRvEq.M%Dw| jvv)ny>߼>\}S+>f Od=}vK/aL_.KͨrpE$R#)(JܲjR5!-. 2t/M- h+Oԛ{RY`gq뵍]={CfK-d25Tw]ǣmU9U"j?k0t+*/kAe1 & *P .ݪگ)-V ̓seƐUWUXPe(d NAzm߬Z-Kt62cܻw0Id%2x*$n; hђ]J qTPH%E%w#D0Ѐ ivy=\ABD(kl4ҿR#, Vh^%Q eTfɞ=a'8FЫaP}M9-#l|,(dJ|ҙ̇@-.p@ N;wfݸ ĥFIm#ξ\30 척JLZTڱ*_7ͮn6[é y%œ!E-h@| |k)e 13Ԁ'nn]. 0.l63hOBU@I%?{ h_d7+cNY&˥ʻix`"Rى @erVUM?oRYj7. _-4@B̔k+MiE%mEbk3x3|c`xH z9S@.JRV+)hzJ@@' OܭyeɖwrtķLaMN bi]bՐ Oէ?8eC)Ő$dΐsO=N)p@ db[IA).HFJp@V8ڐ<7_p c҇vՐJ [}Uto>ۉEJP4gS Kvq.}u;{t cևvՐ}Vn֟W'H_Kk3=ři* 4~1GBﶂ^/ k,dmjjkJ ljYe y%׎ lbZeO}Zä.8Kvo|uإ] $:+ LèR̪\^][?k;<:@3UY7=7A¦Z9Gk:>WY5d{Cz&6K tv 1{cf?OYMnYccoStNFMu9(#{S:OHU]ޛT޳11-c6oOb:ӱz_Z}Ql-4};{}GޡWmVǻs52MoZ 잆5Cfovwe?^3s:*9X7ƁƯnxkyAnIx7+[c,qWc]n'U ;- L)Zd[A.a7uysaR~ڱBLi(k}\뿱ynVC$hG{V;bF;wG;${@Z%$ ^z@Smg[U{ jkZ\]OO\8Gʯ V,ǴĀkjŇϤAx#l4t#ܝB@^% ltt~7ԱZ̵]]Ͻ] mI5~caKIhb\M65qrۏ^5VT.1ODiA]qEx,;]GWsn)muqkls5^9U=Sj X>P6v/^.=j>V.CK.̶C 0mm~IL-gnMN oՓcġSZC[f۱? YEckv5yp%;jG!17zI+G]^؅Ymɂn~ڲUc_K䱣SsV%tuf8{׽2ojWfk:= =W_Ρ.!V7՗<~L涊8;5f}?,2Q49I#gG57~jƾ?uC2?I]/:^.k:NkRQdHڴWΙ7LuR_&YU5ڽw̏ʛcìl ۱q]ap*>5aK W\oUӍsjcۀ;k\w[Om?HZY"f6`YU wmo. eLh%wRӫϽ87g7 ˤ_X}8ך]Uo7?^ҲKϩm~C?f$t`2zZk"y?a[-`\|GZnW?__U3'&+e`ö9gws(u5[kfG6׉0Ev?M,c?[?2 L|Ldҩa岁 . w\ 0ku,:6 @,˟eVX\+cX  !:0Ѐ&`x '9}_XzYEM/ M$~;C;6ECk~ukX ?Ջ^u<H&q'^xR ΛxϬ8Y6x$5U:՟c1[m9Eim9ۭ۷WכӅS]}^[K_窽 E5R^ז<ƽ־FfWw$'V6[ V,<?ѭgU-vV7lUo{]4Wo꽏m̽}`lu|.^X[es0vmo$!DR=Qz-xϫf q='Ve׹Z[{SԚlޭ߷"Ǎ06X\VoewD\Qv8ɭ,us=k6:y{ _mb^_mV7~M(DDPNFzx.(heהgʇo]'At>haߚ~`V1\<,#K=n3vccd= x ܇5FoyWޡmXqq_`m \ִP׭ϏyֽAcIev7/~W/"x?5/p2db:h/}p0{jM²܆7_is\C퇒6=95Q{O:; P.͡Ʒ{-+rB9:JfؽJc5 ?I5kO^gj$IDZn-6ϧ{1zSsf=35>tX}ML|챾N\_PKw$V]c>hc ڙU9pO豶6rpU y~Z]C7"0;>WN f-?&қX֯hd+DKm4y܌\czjf^v6m%б2:}5nmnݯOB1GM˫(W3֐0Ys?:-_Sss695X5%cx/-_gֹ0FJ]uVZd5ӖZN^>_]°5c[*#Szahdw *(싾~+q鍯UCKmn`kZ6쾜Δ3Cf;3n NuѰ;A-?Koʫ GX!1 ~U^:LMoHz}b M^cmn lk[c{]}3߻+Pm' |vLDэܚzLkc@olan~ev[˃iit!ޕLcZz-[S[nYݹOk7f*;Eht亮mwk6Mhf&F0)V\f6;:OP46W鹿~W*.ew#c>μQ#x yZ j`.^Cȑ2@w{mr}Odu<3C]M 9$:3mf~CCNLdv ;^omgk6{}}?;}̱M<KLDNΧOg[8u*#qDK7o{?:2r-ϥ߱c^R='Sc?kBgF-~2L?DI =6ޟUleun7ͳ "oWgA(4x")&\Ev\klvѿ%pjDonۖn&n~uU#yϹiݷ9c#'-~UU{]`.zkmMRlLv Hȃ~Zk[8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG QualityAdobed        "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?Y+1{"{,\TQvyϱU)T!Iqaԕ %K]|_5턓݈yoty%RJZW0K c4ѕ5oܡvO*nXA1)R"t9Ot!*vMr $(jsV ͬGΥ$Xt~LNfV1>nOɲMo ,Wh{ֹ۸4GZ=&U9Nsd >y\Ӻ;ZWn{P&áe>BK]P[GIS)kHՓ\u 0A*=vCa_fAeIFָ:<S4Rݧ*_U/XD$9>FQHU5QHG+VExUd5"a'ji=z9?YUjkO"g|X`5c_^bARGExO>œAZG)-r(%TnZ:}HӴlDjϫ.=9ErMh|u|+ WK;ȕ@u':Or$'C:4t[VcwB>hhDŽ|WG.%/[];#cv#l#Gѧ,﫹-}ck4TJ'mD:|y>ԺMx[Pnp;:Um6Ƽx8]3ͤp$?Kݎ@"boew4=yy:4i&> s1Yn3 I 6zuRKG>ލkkҜzq,vkƥh,\?l4sW*Hǂz ? ϋJl ~={v C!^AuN鲳ˆkK2,sK D6 `e^Xnki,C !XkAqpli*KEAV `h$unf|Oa*Qz{ o*{nf ㋒ OHdחZPj8O @t$t{[[m--< P3N{OͶFGy$w%o:}U+/^=A8?w=S]n&'Z25d0YY >#^KvL^AH8BJt)_Ɂ ]| ̬}m(Th͇ Y-qG![n{`Ucy)+G'E N*l`)zaCw:5KMN&+*61 ָ_@Qhηkm%B<yHw骺E9uK}3G!Y ?Oe\~2o@q&  tN+>!XV*_\ŃOnЮ÷%.m6]S25Ȱ '徤m6dn?6[.UxkVLb %tT3ӥS.{T*PyD.hDKu>ӳ(ݡ.-Qf%c}YoT=t9Od-:=#Javz r,(wѹ,n۝f; koa-9lvS ,pD8m[6k %khYj #SNJF2rd[CU0E p-~,Bs4mi2;jژ';g7ԪxGh|?X:̆SH{~YuN-SLP#{w}:|,p&;[w?Tzp> ּLz7}Mu58ݑQy0}Zx?vL ]Ńsa)8Ѣڋ/ISz$83,&kmsXyNᆳ·#l5۾;8HV&&>.Ew c-sL:%bA Ŝ32iY9tV} wlψu]w7nƈGd{#HǬhhqxKG.]]㊪ZI>j5LUo/u {^p{aa8<nVn!{?m\[ʫ5[c6أˣ].=Ol׍zv|UjZtAY_R 0?VM%7ԯmD\6G޻Z\Iw*3B9O0L*`IJ68|pI0N,  Jҷ11#S>CI'e#ƻ*E:]$[(cﬖ>;khck$~{3+e pOE<JJM]Lhs[D@NH&wJUGcmv1~vҲ)6dTʅ%$0h}U lEtzF 0*}ux?6nY?]kFƻH[u'eG;Gbf*M'?_5xƫs1~q6LRǂ.smp5cki5 g} q,aus]qZۃ|}mo`eEy`$]'..Dⳙ"z p:k yB=5֚YY},nuO}6u q?DoזܐiȇnXiuV;X$ioXбoAѹ&lf+lũ2t}:q}:5/ F7;豊*h lʽLʇ/hx-?>t d[G `&Rp<ӘN5m\k6gW_2Bҫ5%v?WqGQud˱u~dN]Lvr7 uzoմ>$(~ɧfeB$@0_{+Ʋ|CFDodd[[~|W;_ )/ʂRI%;IHkZH W͗9 ٓ[ֳ"f_PVogt}x#{rLBZ@?L$g/Wf:lqռ,^Go/Ej[<1jR1DtyC- ΚI]?M#*7ng?Z uu=$?r阘q+Z#W{ګotC7kYk??AWV֎Ӱә#p6}=ʷv #OɄVdet_KϋϭZ杮B m/QV5in{Pg[~{-f('rBrJ21f_lUu671f?N削}.9[?69n$cں$b]N.fH:=ͲtkuXcN;7hҩAq]oD}ԟ5u7:Z<շuS]^cuI[,c&ܻ5-:9%^򹓜)W?l3ew?Ļ?֬E$,,MXt])̠΋/e9;(q:|$hE0u#YP5 ;;D%٭kJȉtQn6diGq1+kɱtJi$M^&KA=Zʖ<7<4VEM$ ' q ի+zŮ$cKsާ_Z=fv\}bYCǤiP=N괚X8egncطCG6Wau wtD[8y=NCP6 vк~mwMD,?KE "l-T7 #Uc6kTk@t9*.ƹGfן.%T!,EuuV 7uݩ$|IsR.6(ֹ?} |6[E2=pB=C]['C~ a햸U5|Uw vNG6_swA~\EUj|'U_v[zDŽ*g{:NdbI:d|W}HV^tQdW7 oqliR *+b7k9W12=W{KAN@q`sSV)nG>PqhSK=hc1Nr ZwđVlξLs7%ِA;ux73s;7Says-[xMC{̺tD{q9\!![@$Dz҉> zW{m2zu}# KͣcX_/VXSk ,i-p>E".^g3&EUԼm_sVynF孝`B.C룩 ʕex}.bӅ+piwWAhvCp>>#ڙTy"1Ůyl>pNkx7~O*'! :$MhPԱpmӰDՙYwpcKI̻]sx G>Lŕ&?rbT+n, l?Ih}a5f8UQULooTz7S{t &A kᡔ8o.Z\?nwktޡU}'SmE[LmTwR0Ù)в"Q.XècAfzNVis216]\?ys}C up.L7GeR%Սˉ][vNn1\g+ѿf%ah7f &N\}̟t-nΟoFZ!PHj8,=Sſ#2ʜ~ksYAN#ܤbdՔ ;"vp:dbS έ-k!#!LIo(wꋺ97u*DH%Vܴˆ~T3rMn:{/-- 0Oe~}/*5}9J0'r-hvt>+Sj -9N SczcSNCے]Ǥ7f#4 &gU9X}iG)دSxەXk2@?jJTzji~hScx? ^Ă;0oV7]vγ$9}s Tۙ[\Kku /F̬M\p=SL&"I[z_SmݵT-` sfX66|H_%cl*x׃"wr0vO鮲 A:nL̍oxkk9l{5k}`pWGe7ݏmfF~»xȬ DUbI'3 "9GՓ&)s}X֩ +,Z321G\pev?i#"|ze"ѷV8D,?1h.GVXZ/Vh +, )p1>-9НqDSN vL(+`6l0_j$CA6(LܿT<!uN 'El8|T䤦A ʙج"H t~ /"0cVsubwEMEn)tRvfK[}Z??K-ɒGkJZ Ox`H2#; eΪ.%Z9qU _6?"ZHM9ddֆY^.a᭱Դo"_{bl^Ըhг<1sbQy7p5JߥZ1mXqt52j˰su8խ ;ĭG6f4}~(r҆Hes~ zǴ[^U7v~}Wn+i :vSE9 /n9UY>%]?k%aroundme_0_4_0/asset/group/thumbs/ 777 0 0 0 10163061266 12302 5aroundme_0_4_0/asset/group/thumbs/1_01sumeos14289_t1.jpg 777 0 0 12144 10163056646 16027 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222t" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Xy,z}*ؤ9czWy~LJ$Tpx.C{BR0Unryqwr=Ļ0%}s w]Pg+uoxP/ v9ۂsJ$RN ñ^~*2kWgA2>F!}Tc }r!o dw99b:5mU\#|QsꍧbeQ.;>+M%\n:0Z& qX~sʸ?53!+0;KQGӮ&`tu5$`ܗ}J+L7kn)Q]uZ-g+I#5J*"V¶W,!tqvy*'{k,.LL9὏2Z/.G͌z|?n>/Q8]K#d|=YORkFqvkRx"{nG)R&hWeSqkV+0.]i:Pp=AXejZzrֈDG}݁8ҭyIm$z&&XvU<8ܕuǖKz9gϥzgK;C yD.A#$>l[h^xvY 9}=omMT3g9a9fr~k_HY 37Uv6Tel7U R)I Uynov_S)~ԄiͫtSPgW5,s,X Edj#&^O(3$APx{S8 IH55EFF@+'`߭]E42;*OWAԢ|Qؓ;W"<ۻi}><ckpz;jG~En$, lgz2;[J̥FzԪJ8 ~^:VRwpW=3]}9']:AJ HYX}c/t. )secڈʦ9?(㎜zRiM}q,aea 2 \`V8$Իd jmXȣ711ϭ^֜=8P3}aU~@WJɑV*\j(`| #+/.4뷷q=}kXuH6[s LzWo,et3srY𳁤2W5 ܎zV[,ז$6dxF#8 S=TJwFг|rvic#Kctrkm,cFn ڴj.U2'X֮,g6vө/BOS:uŭ6m?8Pc=kHsK;yRX+xG9#< Hj6\Nnn0W;M6Y$I'nQs ~RZ7řX`ߘ{Cc8xV6kK.9@2}:&[j~q_%qWCCּ\TXmq³Dяjg69`Ղ,}6V~xoS8$k?*tIo\\pp}E4[GEOx)@~3#ޅu?|+/V.ᱏNgv" /svz`}&7洺x'qF*?)IaJ#b3ZB NIe߄maRg!#GJG$V5 oiC{XH`v {6FCG_vSs{F3oZi`ZC>I-}*m#PүaiO˴xyׂ/!}B;U yWokW:Ic& d/I88tWII^iye6;pH<\?dRJ(g1Iڴm_Wk|͒xi_IeP>+yf50J`p3M|H|DqFqk9L,u%M$s;#=Xz %, ܳg\0- Q9 sOdֺn` >t1 VcxFO>;lw/|HkQ<"QGl=UvImn/$QU jP7|R؏Cbk/?Zs vgkOI{k4+4ќfL7sqb@1r=fU N=vR^Yg$L 攷3S38(FyRœ—ȍJo!?*#4jaF2#&_4<1O@j;Ryʃ4c$`BM W30)^i}I- 6v:EGCɂG}jv2.)=4ne>Ii ^i؏HGVkU@dvo`၏P}kx`̧JPϮ1ǧZB)4m e*uEN3y@UG lc&k#]?tQ]fF >&k qka|?ErǰϵF]',k*(`|Mփk?.m9WaiXgG,o}?TQIF=5oR{UQʻG] MSOl{ oQE5?. 'Y>e9W`'Xt𲵌cq(v~ֶUu[9dRh6(ը?aroundme_0_4_0/asset/group/thumbs/1_01sumeos14289_t2.jpg 777 0 0 4145 10163056646 16012 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222:P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F!Mߴ9#[Lkj1ۧJF%Y cGj-vI֦* N3+I%~"+{cS襀=NHv \gxdtWGɴ{Aq `2ryzxSl-f,8{3KORV؛AΪ,j;ӌi\d-BXѢUR0"5Cql>lnzf.G>AXA0t_ 9ҵ58Y2ۊV=p)AN) C Ń%C1P83r:#گyy?Zƥ)S N(ю.Yc?:ҵ META05I$[vxj敎0w S-OyfKr`q9}V&‘Ԉ#Ik3_?G5V~)jZѶ:mg*&cPmm%?kj_-ݘ~zO^yrd3cܥ ߊ.[_jY(hwdAPe@XX1?vŜ-p߁z11s* gy?r?5%ru4.,P'}''4QPS*`P$ji RO~hKcI$PRA7Ɣ38b:wa ~"^K'e",`݀ኀ}yw`w;;Wi⫙. N{~oTͤ`֠Uڿ('*\Ŝ 3aroundme_0_4_0/asset/group/thumbs/1_01sumeos14289_t3.jpg 777 0 0 1715 10163056647 16014 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{^jwN>98zuYi6lb)خ0u9G{~iDR?,b*_'uFXN~QǧM=M*\;d׫o1jlw|Tx9(4bl1؃1jQjY!|Š0e 3( tl5l㙭[>1Ԓ\_fߚ̇##'(5yOnfRs_Xێv!QE;#aroundme_0_4_0/asset/group/thumbs/1_53702702_t1.jpg 777 0 0 12063 10163227765 14656 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?P9=Ҕgd}zRshK9 8'$_Bybom#8=iı#=b`jo#*Kz{AdžGqӐߘc~3(I7gzSwZt?!7cFvظ'5JVW%ABc?9h ΛfېFANd+w*\J:ؓ8{U ܐF^sNKx7lÏ^߇Đy#5q]ȓ#Ps90C69jXe>tO6]ˮXgեu[UH"ҭq3 7zDBJB (dg1HsJ+*Zs6u?z}3TEeW0I:U/ ny0UsM6+ڄyMӯNҕ6QmI&{^k^Ԡ8@XGuZnmL+۹98`v lVv$ptpH)E/T+&A*ILsڞcYj˩1Zb< x: W<RU>rKwp\TOqHP! c ={r{[ o4R6p9.m\I#s8itŊEA$&381:q|(&qw5}B HhiH| s3+]|y/zC_‘4y\5&srFUJWVT B,3?CҦ K$d<#c=ֶ.¢39=?Ӯ7(_^5Bѳr A橫H4HI leq#z ϷX wO,pǞ1ojK[DdDSd^ s~ =s;cps @2 }q1~s.6YHEy%y'n=tD+ Z\C=cp<8ݜl+hʳ?ƴѝ-FͳG;]{)@*9S_"^̎wa7,rG#q1o%M9<˾ Q$N{zaFe26P\W=Wyz1${Vb_M$eXg<w"y3嚀. xsUNe r "j갲! fޝ?jVN7eIVFھ\8q(Ri x ~b973_==1$p3:cT!Tl3w&-e%L*>b?~a.UK7tՖ2\󊜱й$ROAK< Vs=NOq߽Tf 3Ic$C!8~i19 ;0'PIwʫB'Մc+1$ r2'T]VۺF8Q98>9PASޟj EKprzg ƫa^1 c(GC(HfZ\ 7<}*w\nd֓z^PR+|7Su _321h\p0Tax$18ǹQjӧc[.:Yԇ8K2̹gGST\۞H%#1#l)!C:Srv <0Lc.A@1﹔a@wCz1AsB?>HPJNr9UTeH(7]>udϖǕ@?\eN/t=ܼwDi$oLԌ{*dAVZ$,֔Lۏ#[KxԞqHPzVD|CcwK'N?\ ǾPGFR3ɧ\lϙ%tD1X!m՝ (vVe7twF*Ğtc#̌u5 nNQV2TPO&7'Sm8l>Nhm7bAs <(n`z}*nb *09V+ q%]Ԍbgʜ}EWa+ J@5N1TF>T"M'P}KSqDr R-6M$Аg7?(hp@9En;+Fܩ0#j'?{8P0Tf+T7Qr9sIuy |2`sU'٫aroundme_0_4_0/asset/group/thumbs/1_53702702_t2.jpg 777 0 0 3711 10163227765 14637 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?nϧ4ݮT@ \"$bv{Oe>'Tn#ܥ+8'm֭h!ni PA<. r,[=9_8RHfP-'<#A*0~>֩_.߹ Po-SJ<WyhK$]|F0s0xLеVuh73"(өw{'KM6PǼ\0N9a$fqAº#kH!ܲx;yGit33on9#G:S ˣ۩-9pc`=HNm9bIX@iRN֜љ%aroundme_0_4_0/asset/group/thumbs/1_caribbean1338_t1.jpg 777 0 0 12630 10163057606 16165 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222T" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?rir޵j^*MŪ~Dhv&Qam>;Ⱦ[$8 ubYqʯd[k`njםxY).>ߨ/VLqX2{WTG)ܸ+G8IIh XwէRz2瑀cu skqKhFX3VrxTKL1m? =q-y*nfvN3Qŭ+X/@~>TJ7̤؎s6FR@l6K1@'ҴMC \L 2`C= 2x Jks}=DxSC~u{Y^k5K rW'a5CMͷioĨ#=\jRi:4҉YIG4ͤVhN1IZFx.XdxlGZa?jY^(OYCJL! WkYa]1NZ4yV2rpg'tﻃI|漸鶶94SgR#R ` b13gP$\/|U F?(G3ַ}CEǭ^Ex/wEΊPgNG=ȭ!>I6(]j$K_ lǑ = ЏǥrP%! *d䟘y'p*}|_VwF BIDs!ys@PUpx\\C 8B2kxPPmlccn0L`xSGUuXĖA9l/=}{WDwF[9#5e91鐹aRa[[X^K;F~ ; v=.oK /G=1~Q,ƚxy`JSh`W[Z6Y[ .ZGINz$>i$ʛ-~5NAt.?C=9rk.8ķ;;qgڷ5.M"DLn>o_5)y8v8?G^{fރI+.l%s,M"wm.0?.}sZPXҧ3Zʤ[~e' j-Vñ>b k+1f|ޣ` 9'$DλRlI:xc5XZ.ngfa"2NӒsZ)M +GX e#l'<ᱸǮ*y`gP I<1Dˁ~ F Ĉ$МmʟfR[X\A% c9GMЮ'ՊbMHԃ?Ԃ:zQFk9K݋B~ǵS7u)NAyp?-,]$EX4)qr@1\³;M2WM|0 1򷙰=AU}úė)Gؚw%cA{漦}Uz"u9qZ6^k:9!?j1-];sԏCk];ZMԼG\%.)<P~l\0k/P{cU`cB1= ZV%Њs, *y99үwz]N.`֥c$B"*ISq#VMKSM4maop>m,(Ο+ǞsBZ[IJIB T^-T,y$1@80 Fx7`Xh\m#igl}^ԭ7s3^fMx%rkyX 00thYݺsIn}~=G^'RnnpVJ13Tkb{8G$Ln$5\ĶYXӮ53MU n'RyٯL[M*Tl c.G+a\\&.^|Y#bs]YOѮR,*k6I rsqjM黟mZd(1~6H#e*q41>re8Sy,@ɴ -sqiFm=L5OpqNs і[HW9WCTI'+w0LR⯞t_Avp{ s9n 5g3iTMZ#4o`v  P94Ta=Mmu8·7 < rp8$~5x]MY5,$!qknmxs9QU]3I--L5}ʳkqJCUYՉ 2 =eҤZh ưL68iJ-FeFF1i:|02RŁ=zpOZ9-gZ8f1Ip\m+$s C\Ɲ3:}U )9y<2֌- $Vv9uuoRqH]zuƶom\6) $YRMo[dqӷiCCd8;=__P!wM4kjK"wk1 rNqϯL]h-0W"78#}qP+p& P'>._]mz T麉=%4^HQgF:(d?ōY,tefXJ$d6H8klHI\q01#&vgff\daXEpZ‹fӿ^=OS[Ļ@/~G>UʅvU9#$| ޠpɧ}V*@8ڜYU\$r9|?\7ؙv~9ʅv~QFFF1橘$9ݰWB۰Ry,c*G (20rO8<SAvdyJ΄1laX*(q=}kgbFha+'U$e+$ `S2 US ڌIHG^x.acwUQvB?5lSs4zRؑL E+S)sR7u mN`QM6C466D#I o1Z袟3M@p9R7"Ns+?S}dma;#Qq[-U`$ELI#aroundme_0_4_0/asset/group/thumbs/1_caribbean1338_t2.jpg 777 0 0 4217 10163057606 16150 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222*P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[i$$.@Y~x] YV \Hy^ya\b$(9%$^ݽ֕yZwP\p 8l`qN5~uq;JZ:xĒrA灃cvHeYd F1=}r+˼Kj#Yy!YA ]*=W_۱jW7,x- pn2 )>ԝw}@mQ2\UCRqnٽ.6J`AYzZIJ^7P#TFXqOlިi2#˲,68꾼ʧq]Knړ$mmDyS;]rZ+w϶ɱXdRۇ/cG~|Q+ k#??j۝mpYIwLNO\T :*4#%G#*Jwr;bfu\m&\E)6Wڣ{eմhDӲݪ0h~Bw`g#$qTx+3KlKm$9z4m.U!*fH)Ӆhw7u+MF[?<$I Vl(Q uW7}oMj:~)iʮ0PpH% 8s[e5 F}xI8hh9J#Jp $G=8HL Z[iFʳ$ӂ빘!NPx棛^ :is+%†!Sm# MZG«#%b1U/&{rc"N4xA݆AN2sq;d0gqc`h eNn\ ))'!> (_AK@!(ݝ9I|^I5AӤ]1Ќz+dkxV N^Q cf6`ddj`)S|s[ET»g(we~Z!#˦ͲF e+ǯ=5j,[" &q=Li4;d檿A.8 '-RZ3D#ChŌ2g#u5dҤ)NO#Ҽ;5cecioЛ˹S_jI~b}6@9>sg]^Y5qo$l^$+Frz{W52]J&C/ ˌAУy!+pDd\fЏh€vn gPF}/A$^\d>ksƫH.#52] zGjR2X8idn7aǥy?y8n;ھݨ]t4z$tÁ)cvm"X'vz54jWҩY/nH :aroundme_0_4_0/asset/group/thumbs/1_caribbean1338_t3.jpg 777 0 0 1645 10163057606 16153 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[Y;Ⱦ[$8 ubYqʯd[k`njםxY).>ߨ/VLqX2{WTG)ܸ+G8IIh XwէRz2瑀cu skqKhFX3VrxTKL1m? =q-y*nfvN3Qŭ+X/@~>TJ7̤؎s6FR@l6K1@'ҴMC \L 2`C= 2x Jks}=DxSC~u{Y^k5K rW'a5CMͷioĨ#=\jRi:4҉YIG4ͤVhN1IZFx.XdxlGZa?jY^(OYCJL! WkYa]1NZ4yV2rpg'tﻃI|漸鶶94SgR#R ` b13gP$\/|U F?(G3ַ}CEǭ^Ex/wEΊPgNG=ȭ!>I6(]j$K_ lǑ = ЏǥrP%! *d䟘y'p*}|_VwF BIDs!ys@PUpx\\C 8B2kxPPmlccn0L`xSGUuXĖA9l/=}{WDwF[9#5e91鐹aRa[[X^K;F~ ; v=.oK /G=1~Q,ƚxy`JSh`W[Z6Y[ .ZGINz$>i$ʛ-~5NAt.?C=9rk.8ķ;;qgڷ5.M"DLn>o_5)y8v8?G^{fރI+.l%s,M"wm.0?.}sZPXҧ3Zʤ[~e' j-Vñ>b k+1f|ޣ` 9'$DλRlI:xc5XZ.ngfa"2NӒsZ)M +GX e#l'<ᱸǮ*y`gP I<1Dˁ~ F Ĉ$МmʟfR[X\A% c9GMЮ'ՊbMHԃ?Ԃ:zQFk9K݋B~ǵS7u)NAyp?-,]$EX4)qr@1\³;M2WM|0 1򷙰=AU}úė)Gؚw%cA{漦}Uz"u9qZ6^k:9!?j1-];sԏCk];ZMԼG\%.)<P~l\0k/P{cU`cB1= ZV%Њs, *y99үwz]N.`֥c$B"*ISq#VMKSM4maop>m,(Ο+ǞsBZ[IJIB T^-T,y$1@80 Fx7`Xh\m#igl}^ԭ7s3^fMx%rkyX 00thYݺsIn}~=G^'RnnpVJ13Tkb{8G$Ln$5\ĶYXӮ53MU n'RyٯL[M*Tl c.G+a\\&.^|Y#bs]YOѮR,*k6I rsqjM黟mZd(1~6H#e*q41>re8Sy,@ɴ -sqiFm=L5OpqNs і[HW9WCTI'+w0LR⯞t_Avp{ s9n 5g3iTMZ#4o`v  P94Ta=Mmu8·7 < rp8$~5x]MY5,$!qknmxs9QU]3I--L5}ʳkqJCUYՉ 2 =eҤZh ưL68iJ-FeFF1i:|02RŁ=zpOZ9-gZ8f1Ip\m+$s C\Ɲ3:}U )9y<2֌- $Vv9uuoRqH]zuƶom\6) $YRMo[dqӷiCCd8;=__P!wM4kjK"wk1 rNqϯL]h-0W"78#}qP+p& P'>._]mz T麉=%4^HQgF:(d?ōY,tefXJ$d6H8klHI\q01#&vgff\daXEpZ‹fӿ^=OS[Ļ@/~G>UʅvU9#$| ޠpɧ}V*@8ڜYU\$r9|?\7ؙv~9ʅv~QFFF1橘$9ݰWB۰Ry,c*G (20rO8<SAvdyJ΄1laX*(q=}kgbFha+'U$e+$ `S2 US ڌIHG^x.acwUQvB?5lSs4zRؑL E+S)sR7u mN`QM6C466D#I o1Z袟3M@p9R7"Ns+?S}dma;#Qq[-U`$ELI#aroundme_0_4_0/asset/group/thumbs/1_caribbean1368_t2.jpg 777 0 0 4217 10163057760 16154 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222*P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[i$$.@Y~x] YV \Hy^ya\b$(9%$^ݽ֕yZwP\p 8l`qN5~uq;JZ:xĒrA灃cvHeYd F1=}r+˼Kj#Yy!YA ]*=W_۱jW7,x- pn2 )>ԝw}@mQ2\UCRqnٽ.6J`AYzZIJ^7P#TFXqOlިi2#˲,68꾼ʧq]Knړ$mmDyS;]rZ+w϶ɱXdRۇ/cG~|Q+ k#??j۝mpYIwLNO\T :*4#%G#*Jwr;bfu\m&\E)6Wڣ{eմhDӲݪ0h~Bw`g#$qTx+3KlKm$9z4m.U!*fH)Ӆhw7u+MF[?<$I Vl(Q uW7}oMj:~)iʮ0PpH% 8s[e5 F}xI8hh9J#Jp $G=8HL Z[iFʳ$ӂ빘!NPx棛^ :is+%†!Sm# MZG«#%b1U/&{rc"N4xA݆AN2sq;d0gqc`h eNn\ ))'!> (_AK@!(ݝ9I|^I5AӤ]1Ќz+dkxV N^Q cf6`ddj`)S|s[ET»g(we~Z!#˦ͲF e+ǯ=5j,[" &q=Li4;d檿A.8 '-RZ3D#ChŌ2g#u5dҤ)NO#Ҽ;5cecioЛ˹S_jI~b}6@9>sg]^Y5qo$l^$+Frz{W52]J&C/ ˌAУy!+pDd\fЏh€vn gPF}/A$^\d>ksƫH.#52] zGjR2X8idn7aǥy?y8n;ھݨ]t4z$tÁ)cvm"X'vz54jWҩY/nH :aroundme_0_4_0/asset/group/thumbs/1_caribbean1368_t3.jpg 777 0 0 1645 10163057760 16157 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[Y;Ⱦ[$8 ubYqʯd[k`njםxY).>ߨ/VLqX2{WTG)ܸ+G8IIh XwէRz2瑀cu skqKhFX3VrxTKL1m? =q-y*nfvN3Qŭ+X/@~>TJ7̤؎s6FR@l6K1@'ҴMC \L 2`C= 2x Jks}=DxSC~u{Y^k5K rW'a5CMͷioĨ#=\jRi:4҉YIG4ͤVhN1IZFx.XdxlGZa?jY^(OYCJL! WkYa]1NZ4yV2rpg'tﻃI|漸鶶94SgR#R ` b13gP$\/|U F?(G3ַ}CEǭ^Ex/wEΊPgNG=ȭ!>I6(]j$K_ lǑ = ЏǥrP%! *d䟘y'p*}|_VwF BIDs!ys@PUpx\\C 8B2kxPPmlccn0L`xSGUuXĖA9l/=}{WDwF[9#5e91鐹aRa[[X^K;F~ ; v=.oK /G=1~Q,ƚxy`JSh`W[Z6Y[ .ZGINz$>i$ʛ-~5NAt.?C=9rk.8ķ;;qgڷ5.M"DLn>o_5)y8v8?G^{fރI+.l%s,M"wm.0?.}sZPXҧ3Zʤ[~e' j-Vñ>b k+1f|ޣ` 9'$DλRlI:xc5XZ.ngfa"2NӒsZ)M +GX e#l'<ᱸǮ*y`gP I<1Dˁ~ F Ĉ$МmʟfR[X\A% c9GMЮ'ՊbMHԃ?Ԃ:zQFk9K݋B~ǵS7u)NAyp?-,]$EX4)qr@1\³;M2WM|0 1򷙰=AU}úė)Gؚw%cA{漦}Uz"u9qZ6^k:9!?j1-];sԏCk];ZMԼG\%.)<P~l\0k/P{cU`cB1= ZV%Њs, *y99үwz]N.`֥c$B"*ISq#VMKSM4maop>m,(Ο+ǞsBZ[IJIB T^-T,y$1@80 Fx7`Xh\m#igl}^ԭ7s3^fMx%rkyX 00thYݺsIn}~=G^'RnnpVJ13Tkb{8G$Ln$5\ĶYXӮ53MU n'RyٯL[M*Tl c.G+a\\&.^|Y#bs]YOѮR,*k6I rsqjM黟mZd(1~6H#e*q41>re8Sy,@ɴ -sqiFm=L5OpqNs і[HW9WCTI'+w0LR⯞t_Avp{ s9n 5g3iTMZ#4o`v  P94Ta=Mmu8·7 < rp8$~5x]MY5,$!qknmxs9QU]3I--L5}ʳkqJCUYՉ 2 =eҤZh ưL68iJ-FeFF1i:|02RŁ=zpOZ9-gZ8f1Ip\m+$s C\Ɲ3:}U )9y<2֌- $Vv9uuoRqH]zuƶom\6) $YRMo[dqӷiCCd8;=__P!wM4kjK"wk1 rNqϯL]h-0W"78#}qP+p& P'>._]mz T麉=%4^HQgF:(d?ōY,tefXJ$d6H8klHI\q01#&vgff\daXEpZ‹fӿ^=OS[Ļ@/~G>UʅvU9#$| ޠpɧ}V*@8ڜYU\$r9|?\7ؙv~9ʅv~QFFF1橘$9ݰWB۰Ry,c*G (20rO8<SAvdyJ΄1laX*(q=}kgbFha+'U$e+$ `S2 US ڌIHG^x.acwUQvB?5lSs4zRؑL E+S)sR7u mN`QM6C466D#I o1Z袟3M@p9R7"Ns+?S}dma;#Qq[-U`$ELI#aroundme_0_4_0/asset/group/thumbs/1_caribbean1381_t2.jpg 777 0 0 4217 10163060256 16141 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222*P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[i$$.@Y~x] YV \Hy^ya\b$(9%$^ݽ֕yZwP\p 8l`qN5~uq;JZ:xĒrA灃cvHeYd F1=}r+˼Kj#Yy!YA ]*=W_۱jW7,x- pn2 )>ԝw}@mQ2\UCRqnٽ.6J`AYzZIJ^7P#TFXqOlިi2#˲,68꾼ʧq]Knړ$mmDyS;]rZ+w϶ɱXdRۇ/cG~|Q+ k#??j۝mpYIwLNO\T :*4#%G#*Jwr;bfu\m&\E)6Wڣ{eմhDӲݪ0h~Bw`g#$qTx+3KlKm$9z4m.U!*fH)Ӆhw7u+MF[?<$I Vl(Q uW7}oMj:~)iʮ0PpH% 8s[e5 F}xI8hh9J#Jp $G=8HL Z[iFʳ$ӂ빘!NPx棛^ :is+%†!Sm# MZG«#%b1U/&{rc"N4xA݆AN2sq;d0gqc`h eNn\ ))'!> (_AK@!(ݝ9I|^I5AӤ]1Ќz+dkxV N^Q cf6`ddj`)S|s[ET»g(we~Z!#˦ͲF e+ǯ=5j,[" &q=Li4;d檿A.8 '-RZ3D#ChŌ2g#u5dҤ)NO#Ҽ;5cecioЛ˹S_jI~b}6@9>sg]^Y5qo$l^$+Frz{W52]J&C/ ˌAУy!+pDd\fЏh€vn gPF}/A$^\d>ksƫH.#52] zGjR2X8idn7aǥy?y8n;ھݨ]t4z$tÁ)cvm"X'vz54jWҩY/nH :aroundme_0_4_0/asset/group/thumbs/1_caribbean1381_t3.jpg 777 0 0 1645 10163060256 16144 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[Y;Ⱦ[$8 ubYqʯd[k`njםxY).>ߨ/VLqX2{WTG)ܸ+G8IIh XwէRz2瑀cu skqKhFX3VrxTKL1m? =q-y*nfvN3Qŭ+X/@~>TJ7̤؎s6FR@l6K1@'ҴMC \L 2`C= 2x Jks}=DxSC~u{Y^k5K rW'a5CMͷioĨ#=\jRi:4҉YIG4ͤVhN1IZFx.XdxlGZa?jY^(OYCJL! WkYa]1NZ4yV2rpg'tﻃI|漸鶶94SgR#R ` b13gP$\/|U F?(G3ַ}CEǭ^Ex/wEΊPgNG=ȭ!>I6(]j$K_ lǑ = ЏǥrP%! *d䟘y'p*}|_VwF BIDs!ys@PUpx\\C 8B2kxPPmlccn0L`xSGUuXĖA9l/=}{WDwF[9#5e91鐹aRa[[X^K;F~ ; v=.oK /G=1~Q,ƚxy`JSh`W[Z6Y[ .ZGINz$>i$ʛ-~5NAt.?C=9rk.8ķ;;qgڷ5.M"DLn>o_5)y8v8?G^{fރI+.l%s,M"wm.0?.}sZPXҧ3Zʤ[~e' j-Vñ>b k+1f|ޣ` 9'$DλRlI:xc5XZ.ngfa"2NӒsZ)M +GX e#l'<ᱸǮ*y`gP I<1Dˁ~ F Ĉ$МmʟfR[X\A% c9GMЮ'ՊbMHԃ?Ԃ:zQFk9K݋B~ǵS7u)NAyp?-,]$EX4)qr@1\³;M2WM|0 1򷙰=AU}úė)Gؚw%cA{漦}Uz"u9qZ6^k:9!?j1-];sԏCk];ZMԼG\%.)<P~l\0k/P{cU`cB1= ZV%Њs, *y99үwz]N.`֥c$B"*ISq#VMKSM4maop>m,(Ο+ǞsBZ[IJIB T^-T,y$1@80 Fx7`Xh\m#igl}^ԭ7s3^fMx%rkyX 00thYݺsIn}~=G^'RnnpVJ13Tkb{8G$Ln$5\ĶYXӮ53MU n'RyٯL[M*Tl c.G+a\\&.^|Y#bs]YOѮR,*k6I rsqjM黟mZd(1~6H#e*q41>re8Sy,@ɴ -sqiFm=L5OpqNs і[HW9WCTI'+w0LR⯞t_Avp{ s9n 5g3iTMZ#4o`v  P94Ta=Mmu8·7 < rp8$~5x]MY5,$!qknmxs9QU]3I--L5}ʳkqJCUYՉ 2 =eҤZh ưL68iJ-FeFF1i:|02RŁ=zpOZ9-gZ8f1Ip\m+$s C\Ɲ3:}U )9y<2֌- $Vv9uuoRqH]zuƶom\6) $YRMo[dqӷiCCd8;=__P!wM4kjK"wk1 rNqϯL]h-0W"78#}qP+p& P'>._]mz T麉=%4^HQgF:(d?ōY,tefXJ$d6H8klHI\q01#&vgff\daXEpZ‹fӿ^=OS[Ļ@/~G>UʅvU9#$| ޠpɧ}V*@8ڜYU\$r9|?\7ؙv~9ʅv~QFFF1橘$9ݰWB۰Ry,c*G (20rO8<SAvdyJ΄1laX*(q=}kgbFha+'U$e+$ `S2 US ڌIHG^x.acwUQvB?5lSs4zRؑL E+S)sR7u mN`QM6C466D#I o1Z袟3M@p9R7"Ns+?S}dma;#Qq[-U`$ELI#aroundme_0_4_0/asset/group/thumbs/1_caribbean1957_t2.jpg 777 0 0 4217 10163057644 16161 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222*P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[i$$.@Y~x] YV \Hy^ya\b$(9%$^ݽ֕yZwP\p 8l`qN5~uq;JZ:xĒrA灃cvHeYd F1=}r+˼Kj#Yy!YA ]*=W_۱jW7,x- pn2 )>ԝw}@mQ2\UCRqnٽ.6J`AYzZIJ^7P#TFXqOlިi2#˲,68꾼ʧq]Knړ$mmDyS;]rZ+w϶ɱXdRۇ/cG~|Q+ k#??j۝mpYIwLNO\T :*4#%G#*Jwr;bfu\m&\E)6Wڣ{eմhDӲݪ0h~Bw`g#$qTx+3KlKm$9z4m.U!*fH)Ӆhw7u+MF[?<$I Vl(Q uW7}oMj:~)iʮ0PpH% 8s[e5 F}xI8hh9J#Jp $G=8HL Z[iFʳ$ӂ빘!NPx棛^ :is+%†!Sm# MZG«#%b1U/&{rc"N4xA݆AN2sq;d0gqc`h eNn\ ))'!> (_AK@!(ݝ9I|^I5AӤ]1Ќz+dkxV N^Q cf6`ddj`)S|s[ET»g(we~Z!#˦ͲF e+ǯ=5j,[" &q=Li4;d檿A.8 '-RZ3D#ChŌ2g#u5dҤ)NO#Ҽ;5cecioЛ˹S_jI~b}6@9>sg]^Y5qo$l^$+Frz{W52]J&C/ ˌAУy!+pDd\fЏh€vn gPF}/A$^\d>ksƫH.#52] zGjR2X8idn7aǥy?y8n;ھݨ]t4z$tÁ)cvm"X'vz54jWҩY/nH :aroundme_0_4_0/asset/group/thumbs/1_caribbean1957_t3.jpg 777 0 0 1645 10163057644 16164 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?[Y9CU5HfE*@g5O r}L'mjEq?ZS]9|dg|gI`#iUgSInRuua&!~U*h=j-fF?*=ЀIƴ"ҢQWJcܺ^RI$8iӆsP4ﵷGG11!+}Ε cj̮0ɭi&s:5c>1Ff H\=H=k30&M]TfѲA~j66# ;A<F\Np\M_P"ăg8Mv2M{B0 Jsx]~|]uf:ܟ` {?mB+97nyZҢKyZ)Q:?}8] 9v:-dR!IչN?S^&2N.>^"1O^Wu@inDիrjhT fU\O2j剔-=mS5[+g,df'r*OO';QP,0E-$j2+TJ䚇ZM\Df-4mWȈ|n2%es,7ReF:p{I(0tڤ}V.7?09jT+*2Fa/?r=_`rF#lz ~uZOӼa'7C|<^Zğ4QɸuGo,-2lu%#FYHl1#[zJ g"uG@8$dzuUCSQyFBǒ;WVgU*=qZB5J~,tQ隬4"GQ-qp:4dWB[GB+Uk|%0r@)G~T߽Xbk[_`s׶=פ>y7Fe&%`>ѻ|UI7Mp5Ю>6BB3㎾W@ A\_9 BoHq,j0OB33qq}XՁS}*=?JSk\<;!}NٝFܿ G :nTEv2 _;r@Nz{>xћS$b vZ[,IJ6ߔUS?nJ2ӌƈZE:8¶hmhIN?ax}moZwl'- zu]2j1=/!8?滰KkAѴ°ɝď?ֹJ]jbJJA' *I6y{ư1J'q `BA霎)z:M,24큿16zJݽKznihI<q @~O5sCZg,~H $zcV\k19Kw;WH{;x<Ye G)2`}㓞Gk:獊] kioA~?=V|6,yo+'$ F{wp sYJi:ԨXU)V^ 5[Ar𭼆p$yR5,pPkv&RѶ6AZ҅l ǖߛuuM8EjviM/,`vH+t!(\}=:VܱF-_xr6u`Xm[` y e{k鶒J$kx5] Ub+z[إ{2XLRU.ò-pqx+q^^PpEq1_1ǵuQPsw.V(J)sONݱҵm03 qOkK-A,V0BJ>tj\[o!0A-=QM;2V34`?CXd2w c3Y:̻Ϋq 2{>fkӋQw*dMVD7% $ %iYI* \.4NeJ`oaǠb3叭>#f9ݎkawYuַQZ0A%nMN%DE1]em4*ZN3#+! TK>RYKvQCKSpGսnMi1|u9]|L[oJyj}ҹ©eBq41tt4651JP~JCÁ'ίoҶ =ֹoy?J꤭J> m:5-N>ONVq$q>s 5g짢9+|gzf^ ).6*±^Myo=jZ唓,@~o03{VF $C~uRoZɭ1szzfź%ʚ5̎5_V{Qɮ6>~݋Ǡ|F8٤ɮgM-NyYيW[WQHfuU^Icb%O/}? :ӵ(oLkU1 HI@$]ނsi-ͼLN1 1m#5\hJj1RF#D 8'ZK!\)+5k ڡI#u9= kk{|!qяYTr$UUf]cr@ x)Ѥ/޵F@+WI}N͋n&Ib<,NU){”Vгyӥ"LI'Et>"?6/k28[7,Z-e tV$`XBJsdTpo?Oz$OcC8ڟs+U(U@;mv3rzrύ6Fghe!`HFc߇֪jP#E(NĮ"`61w/NŠ-R7 ߐ6J]_\I8NyVCq#߷vRP馴w5-`PŧFEi:3  96kf[*Ivg z}?VXIXա_,™##S:cƦWU&,1R :)R3KTUHh<ccaށdG5$WrdHbOCEɇBƓͬi׷#9LFzNq&$eD瓓heXaroundme_0_4_0/asset/group/thumbs/1_DSCF0001741_t1.jpg 777 0 0 12404 10157506042 15207 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?XA> ׼5b=c~ ڨD^*uڬ[[,lH q&4HGNUǷXnn*r:P#'uq5gb=|jvSXAK(B"hOE(jЌ@8mcxKrT5`E^k⩡njY!&orIqy\t2 |6ʘoPkм8S٬|I#M0h'Ot(ޘbvӮ66<*p%S=70R#Y r90sY># j< K[L%$H0T{Q'8'=r*:x5bI"G ypP-]*]@ 30GӎG?ZB vYzװ' ̲,DөI0_.ICy qq%RjQKipTUf@Vp>lwXϺ {/- C{:cɯ8tnmoF,3 5$ FiQHm/8~%&(H!mt <%?e,1GL^ ᷸w[2Zg9Aj+ݭ{ lqPӉsUN&@YaQs$me0=Ӝ~ۉmI.C=:{^!wl[rB>H+M/OHfUq,H'GQZW6Hen7ĚsS-i("zya1:cqwDy=0k^HrUhϘȐC4SNI@<zt==j0QRFz6kd$;A+sҡ/2dU{Fm!N{svk&7ub3߯Jn ۳޵,#9\ `x򗮅m-te*.$'c;akǒ_lv3nPWv4O"H,\<#jt <8riksl`yG Tvv#?jAcn>8i."Kp̓''ج+/ElJ9RG Ǹh|\ ̅NX̿ƶbm=V'o \nF~V㘒KUŷ'ۙrqK!]7Ejޠ<'۶խ/[x]2x'Z)ƣ %P%m7%? %̷SIq:ll;u@ wRi=7#Xm3RD[ޥvr]--Ū3(#l# m?{yF02:w]-{;St@ Gr38'AGQn4x9CsВ=O֝%wwlOy%ı'G 9?J˾k_ ^CpOΘ鍼.0y'۽IϾ;Cpr0zӹxD_E6#:#=@9דjqk|דz?ںifʋ;2yOk,]4SȎDDX՘u# H%Icu$cjt;gʚ%5-|$3m)=ZxCDCP_iy|Fj_K4\>}6cw,4 "[1WAk&dDb5E 0PGq]rO'>GC[(s_, H}:N TW~Lk]0ly#;״i6[ʆ d Mx/úԗR,&Ѩb>Zc`cE#/?o5 m4j3p0>9{SãEgi%eS&YI$H@Rj۰ִ?| HŝWl:M4r(c/`t ϵs_Z9EV(zu=kGǾ5m EG'Cm]z4:mji;#77 2U¬yhٌOڼ]iKtѲH#ۿ= '9aԬʛK)q޺=;N[R{/-Df^N8<={.ǥQs#؎8fMNcޒk4O s{j+-QO~9¾{k3$ eU8@q9;H6(@EM-U\e̷EttAi',@}>[- t>Y4w%  VOS]`?n-wsĿ!(<\~C֡"\nVתOqVo̱)D\ݭCTPp8=3i>1}VFS+t4OBo^ qCS~&rAr>Wq;k% GI.z_4+6Ky#mzЦ,&SJ@w=kJ7//f@cOjf2FsPx%Ȗ9&n0,$:VZ :SKbm`jb^?3ӡ<9缂Fx~?+m=3d9-W89l}){e8֭,YRuP̀3V rZ'xT5I こ)q%SK cЪ܄(Fv8`wrmye"*In񒫌kkrlNxw% s="sV>uHap@UNN/@⯱[IDMbz*TKqGW y,L0)A3^M5]wp[k,R"n(T> +B/{NRZzm%WМfmV>bW1V\s<زBo] &q=(*;|;)mv,H+fOGɍǻg;rG*}5Ȼcp%Y( y2Iy֟_ݥ´DGCڶ/|:[F5Q'Nr?QMlS}Ρ=a}qHmٳ~ffii&^"2i˓O\FtIc&x%YT~xzw+BZ펫-]JGCxV<=MmhzNo'Ass D#RψP&A=A=xC fm^o CZ͝=Zӵ+;h"VW=S($|@5f5?s^9|Av#?]JQG;RgX J lS䪸ڸR998&9~E;=7KT8qVBgL<F09{J[_3dO/x{V\%:\'/La ,FWR1%Ƅ+60u_0@682`x:]4U )`ZF9B2s3{hQ,yF9jkױ\M{pw4Sݻ+J(N7qcaroundme_0_4_0/asset/group/thumbs/1_DSCF0003753_t1.jpg 777 0 0 21655 10163056455 15231 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?R6SOj](ZP^zRvRѶKj]t6"@\Tivm\3!-Pr.aO[F*"-XJFXDϯ=c9 6=A^Ӹ^s ,Hp:?=kO;(aL4+N =q Uẍ́BIl487 }*&=r/,?9,JwFB{s$-sbi`wt8Y%%R *[= RI/Sɑ4. bAkF<-} 2.Xoayy-e=j]2ԡjm(_jvjg.e.ʘ';ˠ6{PT=I;xUIhY.S$'1ֹ!Ek؂ݣHKl'| ~]~=+8rDkzgJm5ЏkftYEpt/-؏ 4S>V*^(VcyVm`"ad0;VvTْ@_p3^\?"e3EX.Ы9<|=2i^=Wj^B\r2GNG96]]u/oF곳G$:TPS5Ah$ rL"'wœ#waz[\k cw*']p;uM/h]}ciQ$VRG>ln䞃U-U1أda4|dԜN*Fy|sI :{ YA9'$rjKD?ni7RD"_L9n2}['&t0^FyAe16.W!: GV:qmMk;fryؼC:n3?h؟ҭǫi 8SU8[ЌRb&PH(Db`64`*pq׵Kӎa)=̹v7g21L*'sQr5lC%m}Fˊ \@'#3Z7Qm<,pb/2Nse9  `s-BUHi e6,-#36WY8۴M;HB . N85%ƟKo , 9rpz r3UMJԆ|vIgܞסvy7':qS{| Ɂ}=Zu]iDa/;G^jM5[GIfQA?U[j^4B{r niMbxV}S D<8zΖDէ-qr*mS$.)jj&նK%ϱsNz#AU-;q*o&kQGȭrS>i_7g1ԑjr=2 ZJDq;"KgqKt~?+CH_}Xݤ)*H8X}w>Yq7\´8I4~d-6}:4f4ư5Km.m#D]nɒ=A+Ǽ/e- ț *F1+Dsk(tf 3xg=Gk\IMw~aBcU#fYOoZ/461ǵfn۝ nOAnT8-D(uEUku-"zbכ-7陪7 ҮkGŅV¦()ILU? 蚂PنҜqVе-d\GlrT6Zf 1TSΝWe; \J>EFH 4^ %AF|֌FT{ZW:mS 7_hQXA@kQ|r{zS}ʻ-U.ys@=;~ XEo%Q4aUgp݌A+t6ZpɄE;.*{++}C!SnUYco {ҔT!͎8n1LۛO=&tx W̛-IJۙ$ GLnAZTlLnLQ\Hp}6f+^W0.7d @*kmaX`†b۔xz ̸VH! )SO_qVR>dE-=#W5l'O=Fd\rnX{{w5ֈ1ڠU!_ǯ@{I0i*4%^3ggbr0 'UKh\Ex&V}pA, R"P°aڷ uA`ހ$CvusMԅ}p>߉$>z%H7ͼ;c4>+>λANENA$uhꑘwSzS*ʣ^Jؒ02yFkg!!(ٷ!Cio4wQѐsf-m% tp真YwdR7$Y.idj/Nb9TWV:'ԓKK/yKΙH@9 r:r{UK3YN2rsDx{H$Iq7O #mmP/?OMDF0e95.k% |݀<18SKS <5.Ώa̘Qޥ-nfk?ڧLyl[K8Ogď[d玃hR* 5ݢ)e\cS_/tH?6Yzzt<@&B-[" ]ߨ * fWxq ʨkyTyQ?N6&%c T7ݓ%HsKTmKg4`U&K=R`H̬IT_ 6 [PG$T`ҡ+o]hdXd|d9MKԞ O'|dD eI\n'G]7u_%*@k؈Tg+Ѵk"'2,a ?:9!,ws"ޘz\\DT sDhIƛz2c('e{n[AF=FOS`!eU:ǞހrA%qK qr};'t\kOzy[s`c_^[CzrD<=/<|nKض壖HYHxݣu#8`pAF)VyRD $r3\V)d34Jf39$q~,F&5oZ8i"<r1Tx  Fp-Ј!3xFe$0h#߯4E[QKUbZ ӭťXڪ&gW=2?xsj_#JK\7܈7M\үMm\+ ͏(:-q*F$ QL\씒2nĪ!֟.yyl"9>:& #xQeE*^4-c @+Ű1cԊOCCC+%O2W1?O-bf9a7v!_>W@^IxE*ͻ*QmJ-y(+[((}kR|ua3#%}o2c0}+SIQwTH(v`g}v7*d$â;8=*kD6($ 1tʁy Ʈm6 .v8^~\g"K۝:Mrzx"YD̪w|1lGjMw&0&t_h1v9?NK-I |t9f2LOt4mm{(XFs߹֛wV1-kɼg7, '  Z"б9;1^tn-.Iw=C  J`N?UMd+PT{4I'JLZeA,եXh$_pMS76K>ccnxF,Wr`ʥYzjRAvsv|I)<ۋ'Ȯ" 19&Nvdv/C-Nu`9*k\A ?/Q]Eye'zJȎ+ľ81F<ΐ5ٸo3іKơFcn_iąGO'd;6sh Q#{#*Ȅy9juEv)/6=)eR0qQ\C$SoV_jTp=dnYh m~"MrveqKb&!AҦ m?C)  kOckr"/j_/ڛ?zx20@?Mce4Cۑ6G9{-^Bї%-zpq%\淖Yu hQ ~?J=8xhcD"7Ic۫t :Keý,62 (cm'MMZ)F)W0S0g ?@1 + kYg\pH,2pH+u7#:6.'proZĞ *#i0Em:u_k[('oVcۨzcǽSA#Z̹Zwe8omk -ԟ-EB꤁۠_[{0ib+CFU\rX+x//СxMRU΄ b1!X7 l4]g ,kvIP!?^MmO1f4Tf/ѰpG3ޢk :KU\+W,čud2CH:HSޭ]Y ;jKۄݶ(p bO'ah]/DOl 9'A5,$od8|caћD ?li#F8QG qaxr&t8'ZΑq-Hw3qI s6:#FV: /r+cTa|w1$3@>;V~bW4 `0z⯨-OoQj 7(NfMOs}Uw9t#hoV78ū:_Ԋ(X6w.Q==iUv. Lk1  t96C- $*YOM}>8Yw!@s` zR.?T8gH$\m_-@*A$`a?aVm+K丆BZO.E}ăsª Icv.L(۰p=@jRS[+è[KI|)}p:'n$zzm 򪃑Uwfjltla zZG bVHd6ģ9n>V(gm6om ˻bUI*e K'bh2 | N>\ FN@9/cfYF.|08N{b| "w"$UvA gjI]ꚭDTgwM.K-[)ʎ!?!;tr>S9܁Б럠5# Iq{Ħ=&^1ܠyT2~ hRpbh `dΨZl ,?}ik%l#l9E.W$ܵ'* %\xkVXO"CNgb_ ʮrXn# O*-ڴV&Uc1n{yz3Hhg 7L8E!@"V%W ߈(pL7&ΫxMGcې 0$1zMn%Y$ d 'ϿNMFմZԄ1DLW=G>IjW1JM_F5Az|/6Ȭ#fowq6>wӿ@#`տ,)] !rrI$c?4ynIn$g傌`ִ?#Ю}kW1-1+H?Z6\0uMb` {$H8}m'M !LZH}'iO\IUTԽ|cmHlԏҢ?z"u?z{In~3.&?aroundme_0_4_0/asset/group/thumbs/1_DSCF0003753_t3.jpg 777 0 0 2243 10163056456 15204 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222* " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?KOj<ޛa<۬1Y8=?5[OJ?HSj!GF#,H ? Avaroundme_0_4_0/asset/group/thumbs/1_DSCF0004655_t1.jpg 777 0 0 5710 10163056510 15175 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?& nֺQxZYx5V]pUSfl3CD ^B|+p{Li \SxN*n;SY9HJBҋJJO4pZ@jM9šb.w qO+ 5vG4:˘OJΚ!ڶzU)"TќY4xFU᭫1-Aeh3vRjQ?TpDpr)0DP8O⥊)=*(Ky-;nYAsjKAszQjkӼƌW81VI#3l#g5[=+>?)ۇG&v5 q]Dh?@Ҵ^fD1\t[*NPZ[="q6'o'`w3/Z\zwjј#6?vC\? nFcsl>_³f:45c_Y2>ة?Z߄A\VETzT"#"2M+k 63z0.Pc2ͫћҖkwe0I*S9 rBy R6SK>U&k }1ŷښ5.0RDMuJp t=Z[MuoHBXEk"?w i yZ],zջFe2ۓ {dG`JKo+k_-㡩n\]Z6alZ]){ 3Koj"^B7,ߛ¼n\,4p~pjgYxaȾe=M奿$HZ-սyy pc7gO^ u}ʻ)5/Zw= 刍>qĢ%ܼF1i8{X+[z\s%- eLdEyŧ{aI #P.ֵ4U6*Y ЗFn3nrrӣR^rj&5 mm,g}Gw!o2j`83j 2]&OP5ߥn,>MOǹR:Dgb)#VHeR#GHݟLUT]JY` 는:j3$bTCE7sg$rGZi93فzTؤ14f8a\5-4YGEH>nQ^2y(\G??ʜ:lGOsRFDv5%cwF~Z豂ek*|:[ ⡢(A=@";jWP7c#6{bP!Lu R*RҴH_jaS9ҴDEzӈ*(ZI 3'S0Gzr`tP#?j?T{j(l".aVkd9ϷbϷb) GTS붃Z9SAi!Ml;)O^JuVķHIưys2囩ZA+ʧI7a c#f%+|zR}iu;m7si2Z#;ʤ~?Jy6R}mHHY2kYYc*iGol/c{u3]@o01ڼ&-\A(V`dSzB$8Rz-MoL"kWgu ܌9nGIpHbՍ c5BèF u1o@*ŊҒ&̄zL LUw\U5V\n ߽k&TU^楻f3qJLr>Qȿ)?R]}i,Ї9TxSL?zqv8ۏ=ưؚDEUDµpѓt7좭[OF?3@]qA Gh1? W#Z\[Ole2zWlʅL҅Rfrp^Cb}mֱn,2DʞY4ReykDzY_VӞF޶g;>ҋ\#^2>c)HȖȏ2UsqyQˑՅuhץ7 UO_y_NmPIϩʗ%w',hj7~=kSOn7R$YZbU“49>ne5=rKXmKDo[c_Iq{~Jm_OoVXTdsRn9jKs?um5w6ŷh?~+" l̡x?|Cj{U]m{}piREqEZ8mi֪4r2߻]sN@<ٿZb-cc8UJ5 6YmS jlzI۽2)WIYYO 98$+ӯ/C"$ܷ|P[!h\CE4J=vXL9fߧj/,?mVFr-FaKF@ a9^@&_: $nCy7 88$K\ȴs&+??ʽgG%,#"DzOH>q^Ot?q/V!ꮆQDZ·-Hǭ8\sgmc9lR# $5-cI$l#R$d8q[jG-,dᔆ6~wEAa88q5o^0upp!d0ߩ\YXٷ{M,P~\aGGԴ?4HYc>c[ங{e{VHtfᄑ8 |(4]& OF/<)]ƭo63@mR}2U1x[F46WwH:WWVHzƣJ$txdd#KgWC2[[X7+p Ψ^P-k{Nj:l|}Fk.◌,"kSJO ?n+H5Km|;$RqcEA=UGcU'g{_SK$[N$?ʴ~ꬂSZc*|0'¿ 5xk2Gʯ>Sm X𾅧7K%1ȅYT*$N;VGr~#[7/Ok:}ݱGw*[ ?^==.k yc(>nqU;2uKC5ۄ8b$RO_O|i=ZM*]I1)jcfHz)r7|} `]oULKWUuVeQnQ@ 8:>M=j L|_ha]E|c']Zhm t˔ly~nJ?m0ƣl7}FN*[<2emk6qERP5r*ZTnqk.1 ~7*@W~\>V}&KZ.p >2Oؗ3}n#k4HQ{m؏GXaX%_Ub<񂁝/RvSeS(?0\·Z;6G! n1Sh;j{܎JWWEi/_W& &q*ԞZ֭۫kJ#C1¹C$ҷQy.G՗"E΋5/x}{`p`G}ktr{NXr89+} kKdX5OĔyFEVeܚ; }jǀ<4QT!LПhFeeϿXV7y%[-Z#nr4赇Th^nng'ڹ6גF复?vCMz'"@"8%A9Ҹ7dFBXn>З._gg=j1]~ V'rrk*,E+FA$[Eg$#DmJЏ[Cf]?R`lh!8ၮÚ>0\ZNs#[ݻ[)R_\m h`ԣV6 GcUF@ǷAs}q%Qjl2aK#1Um+6?Z$˒H#ߑ d Aڹkio}uH'lqb+Qث e-fҴu%MȑO#8湝J$զ8&xWf<㨪~ 6i^!^˹XWx3W⸺3Ok `>UXg-bE?xf~$M3"V$!)p {zzޙFqld}z Zwn&7vZbHU Jm\N:Ժ@ 5|zt.9.TӞS z%t63`T$1KP`m?ZS}#uT6$t?5^wlg,?+tA]ͿƋb6k62 [܆\袼z/I=UoUK⫟h䑸FO=j޽aZ1;Y n } Ij_L7ZFH5)HqQuݐ1k:L̷2Jśp2k;&WPTI{sY+nh4]3y,H#$aroundme_0_4_0/asset/group/thumbs/1_DSCF0006151_t3.jpg 777 0 0 1702 10163056522 15170 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?H8!q{46l I wbA4ooCN45˾!2ёko5=. .mC$ (dg=7LE.e&@N8$1Ae i&U[nO_ºMrhDW3[\ħ; 1dh54 {>ITt]7eAڐXM)LErԅ*fPdMJi_jVVii4NVV+ii\P$˼ BCX_׼ ˏĎ)ަеtP6Ҥ~e~Ul9{$QpXS V,kHFAtem?rKoJ4) BqCr@ mWO>%9%x9 z Qh!k_5Z@[ OBpXQܟ1O5e2%]p1R :df*`2ѣ Tu^ZZrџ@GX#X! y#F)=kZm\O1d01qT1L5Cw}:VrrFha7g qm=2b*tm)}Ozz\pNGnިnѱʚL+zV N,?Y$`o6*2Mv T4R8Գ7`+G&4p(==PxHXfe#{J}0YH\mw(8PflF7bDJ`nF ?Ʀ(ݝP{ Vk=A |=Md窊}+;cp9Et jc%ʏQYm׎E4(HUu˜*WrM`HT ]֫e dZDU[ӵsե)o>;Cj:h)!n=Eb7{|WZebkv 1 kR}xјXQK-^*J+sS1n<~>/m5#ԝdD0!GC\Ư>$,/4NH8!q~/cTg)N;z"Slu h-yP>36dp3Pe})@_s3gu[@ԭZ;U‡Jprd +.ngvii'$dWQKgo+.9FԃN:QعRwAP; Q: +uPF?݈R@9㠫V2m{秭4a)yJXmȲt'ۊd1HAVv-HP:}RDݙ"s>Y>r *к)P˔$m`EwvF G8z瞅=zbIcVar+!ip莁A|.Ek {aa!}9J7vvQjHfa#έaYaw߷.`,m (G:`ↀd_|W^.X{C{Ƅkq=Ĩ_tGR<3sh''^:=Ȼ\J7tqkfW08F9ⵧ+U9qҜ>RASa +DIg$)bHO* Ӟ(Hv;>8^X IPI\r3VYǯMnL g&"1.~P>;>y @;ƛFO5.z;UgaFm?HYFeՉU6܌?Ҡl) ]7cy:cjTwK;pXgjwv4[\vO?ҕ_jY4mn; Nm,\fB00=PirUenJ=ry=M7-Anyu.$2lj'DAD\X,/DB/L$WIkp2*cW?yج!J)+#HcSt54Di~OLs5Y5It4tK#;s9y>-k2u-k%rzְ~F$ iɍd#9=u'h5;}[jH̡Fǜq=辺-melg ';r$ߨZ wBHb0 @'UY2 %C `xg8kwX'20n)%@a1ҫMisqGMr0Q좍Y\?LPu>=7_!T'" aؒIy[Gcn3А\lwY#kIGnkޚS;@A g0Tn|:+t }*?OmBO{WSʞfau= c ;[4z{øAauhw\ǓUc9hKܺZgBdn 6뗁.-rXf FK{qZQ mo-3S5e=܃1๳,1!u949B} FRIR99khfJ:m6t*qҮm%'Ի?tZԦ#fdϐ1ӎޔi=lۤv,NtNsNFt\`^kbK&6z k-qr Eq gbPGZ/㸏Oޛqqך7S3W.ee ?CM0)^:pF2j[KD$.<'<P,He+nn' r.M+*,`*轪PXO*0rN:3 dMm֗p@nwc9PTH@Zg$} -CGz, i純=jͷuԜ Żdj2=0?ҝuh,wg\xԁr9i&e`xSi(GNrux) 2mb=qӏG?Og46!e,jP*zpkv ȨhP6zE)`$<櫍o|sV'K $Q+"x'pe c*67KkGZ7V9R B'!\ֹߔ~Z=|ZE`H~[qe6\| 4u'ky#aWE *&Ǒ{m w`9$ֽ3zN~_nB[>SJ̤[<;*9HNq;zt6s=ĒNQ7p@*xR>cژ0_i3J`灎|!$U9L=*Z'эY0_>qN?Ʃ48 |!֥2'fA'qKh.!#ul gԀ\2c˂~S#Q] #"bK #mu R鄯 .yD)Tp40c8qYHf7b8#ccG4Š E' v*"HL(.xycnI4QA$hؐT|)dPLLv`E$r9FcplEL)'&$($4QPQ (x7c Q/w21yUE:aroundme_0_4_0/asset/group/thumbs/1_DSCF0007866_t2.jpg 777 0 0 5351 10163056534 15214 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222jP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?qVzSL>!bigqqcGR$g^>/jz:W/j#=e1_wA5VfN& *;Mh=*2Lm F֙"o-6D/&'S#vrwyZT96ڸ}7\< `9Qב^YҒiVMz*c@}+rM8d*Ŵur+KXh+^__%J$<9dt@5~.1|K$o&_, 㑎;TZa\ȅ(NATΆTvzǸ2}sO5rU/X)SzU괵fYi0]Ѭ$afxΪxJORP~uhNxD $vU?v&_֪\+:j[ I媚V0ekrK Nk9Uކt:ve_˿7#K{-> 8Ռ ʂk|C CRKAG$b3 gp+*fn0M(ᗂ=Kqv[[e,]˸`1@Q*#d>\Q9jzVEUX]'?ZYXe9gq#G5cWar>BAx\Maŝ "'ʾX H*Oy|Tά7WO^#Hn@Pſt㏼?ɤn8D<= n:8ZG7 "ZB ,rH8w[Cd7ٻgc Oq=+0CF!͠$7~Jвu[5$3Tu N{9&U $c!F沊zISEhe}{gOQW[G3턟;1k-[7[H%3ܐ!..-ПjLt=WIǢ,v9wϜbG4FM<2d|?(zӢm>; $_a1t]۵ʦLR*`@拁p_Cai Z +B$ ⣮M,)Ğ1m6ȶu6A0y}>Yp^YI$)9'~ThhXtubs+}wy% (Ќ}*kŞD&TUAQ3-čٝ-b<'봳)h1Z+n~l\J t'?* Rp]ĝK[=*i5 ,{G8 ZW/]F4.h⚈\t &Z|M{zkiZ͑l¬^_ְ UiL^H]ѣ j9UgGq⛋ȋ3阆v `O9=koKѵ/oF* D<|Bp ׏LT)!2s֔{%PkA% %qgn5Gȴޡ< `:ّq\4EsҚNë{_V4UONʹI"}dv5C>lMZNMon tf퐳HH5FdtR :ɧ]3<`W85k#2,)gkYQ2Ƈ@7s>azs 9PyOT,Hrzj$Lǚ"K.bCgiXTcC{nxуQ,~JkNWqq" Ϲ}zWs;U}z-\Hs p9, 㪯SmOQ6YC2jI/\SWtk ᷙWyrsv4ɴ[we\Hy sgo7%0\B -`M| zsk{=ĬӨWX$`[vsFgvP:`v=jV7Dl!:$R ^sf|ȧei.SZ{,b9ޑ8my6\!,27+u]HJ9#zJmaroundme_0_4_0/asset/group/thumbs/1_DSCF0008343_t1.jpg 777 0 0 7504 10157506056 15206 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S{T8%{DڗgL%!S{T))g=P_g_YFQڬ` =V6Rl =6{Ul ?jO/ڬ)@L~WQLi\FUMMWw\_A53YPt%8%LtST_8GLD)vT_/@\%X *6Pml(@Rl>_'@JR&:BҀ*zcI)TudƏ|OeGFT*{TvD" psT'S )TMR4lj"#4֓>d%.M1I'i~d''9L*Q2r~_(|ΟL7HyR:㏯bKgM!+bL!9< 0 .jd!l%.9r8GcEY"]pB"y$o5/7{*8f[P{ 2!qbA뎵Fw_mI!Dш `w}*%QrIFgUois[,{[K"g8隘kzI'qjvH6^Ns8cTgR.s( @ kOnџtBbT5HOoeyhr`''/C)->C74Xjkws}|Mu,c$cdO[ԤP q >QdPٴ Wԕ(zZDu֥̅$<*ڸvFTh[ :0c+K}hه9ʍ*t{4۶Qg-9JWeڜbH񮸌Emsu Wavq5j?枚%la9Ν6z3&%I[5 Z`TY@1M.[+ڭ1g~X{J3ӞނU1uQ$r wN+$K 1~S2܍NI Ӱi,89x#ۧT]]-ɅG(@\6Ɇa\? ji;%~A@_D'wRj1Grrst= h'M0ۣnG% O=~@QoRL y:S_]H\ ByI8!^-E&Bzci֨k~ԙEp6z98R8',Z` ,lijVM>%9/(}>OJ4hޤ6;&? E%T7n9[6&Xm4`یĞh; [ƻ;4_|[8y<T.YpwL q}?*C%HQVx{o,CeN0y<0jHֆL) ae `N:gk(IT7'dp1V=ׅo͠ܜg YZkmE djH'9#SgZHK;cdHf m.1ԓcQcqmeTH ~Bf2S)0+۞xPh'R=~qpёp@@9`=h;D'&ylq?W3O<gn:L#c* ]}) 6>Y߯9`F b4l|Ȫ2Lxd*JŔJ)&0`sf}O:&-]tR)(=~hzaroundme_0_4_0/asset/group/thumbs/1_DSCF0008343_t2.jpg 777 0 0 3363 10157506056 15206 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?/jEVj`tJBjxگ}j."K/L 'ڐZ&jCf}4˳L_A5a:8/N:A'j'#q A5(w+Le01SgWڇH"O ͔CP8i?])zV^<=t@4Jz1E{#:49H8?ΥW*Dzy,W\|s Sq=_6' Xġ~5#ߨxJ1ϧ3 SfYd?!zִ2ꓶi>W#Tj[h_O"'ڢNIj ވ=OJrW#܎ׂzR9*I"a}مiiVwZ3e>`6_jm5 d~ܟQ%Mwl|3ȒI#6wod Fg\gsֽ1}AM?(<-+դ}95fKHGz|FF;~xk sEpά|\gӞs]`wNz[6_V$m%azնMƚDd댨e-Go[3F0Rqnq:^\{K '8O #vcx⦿ȊȎz" i]1%ҸOf)`l`t{/Їu'i~F9(o#f$$NgTXgrȭ&A\Maroundme_0_4_0/asset/group/thumbs/1_DSCF0008343_t3.jpg 777 0 0 1615 10157506056 15205 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?N8-N4㏻[0g>@6H}|߹!vqgҽo}GOvn.h&c³kfhP5*G9^k#ӣ25( =OVK\({wv9';OF?'?:=>_'@JR&:BҀ*zcI)TudƏ|OeGFT*{TvD" psT'S )TMR4lj"#4֓>d%.M1I'i~d''9L*Q2r~_(|ΟL7HyR:㏯bKgM!+bL!9< 0 .jd!l%.9r8GcEY"]pB"y$o5/7{*8f[P{ 2!qbA뎵Fw_mI!Dш `w}*%QrIFgUois[,{[K"g8隘kzI'qjvH6^Ns8cTgR.s( @ kOnџtBbT5HOoeyhr`''/C)->C74Xjkws}|Mu,c$cdO[ԤP q >QdPٴ Wԕ(zZDu֥̅$<*ڸvFTh[ :0c+K}hه9ʍ*t{4۶Qg-9JWeڜbH񮸌Emsu Wavq5j?枚%la9Ν6z3&%I[5 Z`TY@1M.[+ڭ1g~X{J3ӞނU1uQ$r wN+$K 1~S2܍NI Ӱi,89x#ۧT]]-ɅG(@\6Ɇa\? ji;%~A@_D'wRj1Grrst= h'M0ۣnG% O=~@QoRL y:S_]H\ ByI8!^-E&Bzci֨k~ԙEp6z98R8',Z` ,lijVM>%9/(}>OJ4hޤ6;&? E%T7n9[6&Xm4`یĞh; [ƻ;4_|[8y<T.YpwL q}?*C%HQVx{o,CeN0y<0jHֆL) ae `N:gk(IT7'dp1V=ׅo͠ܜg YZkmE djH'9#SgZHK;cdHf m.1ԓcQcqmeTH ~Bf2S)0+۞xPh'R=~qpёp@@9`=h;D'&ylq?W3O<gn:L#c* ]}) 6>Y߯9`F b4l|Ȫ2Lxd*JŔJ)&0`sf}O:&-]tR)(=~hzaroundme_0_4_0/asset/group/thumbs/1_DSCF0008780_t2.jpg 777 0 0 3363 10163056547 15215 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?/jEVj`tJBjxگ}j."K/L 'ڐZ&jCf}4˳L_A5a:8/N:A'j'#q A5(w+Le01SgWڇH"O ͔CP8i?])zV^<=t@4Jz1E{#:49H8?ΥW*Dzy,W\|s Sq=_6' Xġ~5#ߨxJ1ϧ3 SfYd?!zִ2ꓶi>W#Tj[h_O"'ڢNIj ވ=OJrW#܎ׂzR9*I"a}مiiVwZ3e>`6_jm5 d~ܟQ%Mwl|3ȒI#6wod Fg\gsֽ1}AM?(<-+դ}95fKHGz|FF;~xk sEpά|\gӞs]`wNz[6_V$m%azնMƚDd댨e-Go[3F0Rqnq:^\{K '8O #vcx⦿ȊȎz" i]1%ҸOf)`l`t{/Їu'i~F9(o#f$$NgTXgrȭ&A\Maroundme_0_4_0/asset/group/thumbs/1_DSCF0008780_t3.jpg 777 0 0 1615 10163056547 15214 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?N8-N4㏻[0g>@6H}|߹!vqgҽo}GOvn.h&c³kfhP5*G9^k#ӣ25( =OVK\({wv9';OF?'?:=>q\k@83Kqd K΀{U#Y0pAnݝ^$X,"er ӏ|WH|ks-70Y"dR;r+ܞ]o&m{ ++|b =zAA*E5D6Ϣ߮|賾ݾ~S20A Ԟ:9wSPՓS:`I8|slxe yzׯVO$VYȏ'+殚qgB4{m6Q*UJ}'mcڲ'MS9D.$y>`/g2zFh2B3E ( ( (4V׻#>rEܲVeMku%7PK "G܄{J+G]@5yE .GE  Ρ_z& lpd 6k\EF!a{漋/|*\|?z4xxic)$ےp8禇} F݉[C%ܗmFy3Ұn?]r|kxOrtdc#0/' ?$?tyCI\=/' ?$??LH?a!.߇0?>`<וH=;]bn cr+B-z3HG\/˭F/ =1y \97c0`eı3 xV]OBhAǩO_*..dzL!\*G.T'5 ?%q\z0Pa’?F#9*{woJ ?%q;.m_O*v<$?~Wni pbj Om׋R8`5.NK>2OaxK ߏ7صuVֳwS ;K˙UW/^zdcκ SdIWOVE n(5d7h[o]Cy/*?&V{7č *Ert|UAy?M|UAy?Ms4Qdt|UAy?5<;:[[:LK>rUjfbeNTt)8s N 7seA3* ww'?H}tՆs"`bVHۆR;eEw_kC끴BB6F=AY:t89AkJ4',~O,a⸗H0܁4zA6کI$L9IQ^ Ʃ/??O'Έyued3b2,-" o:'rǟش%-!\d91|}U<⧳[#Gd>Hkώ G#D5LFj:O [K/b8=ǽz= UMݖui33 rycH5|uin'E's1,?p HU_"𗈴MO%o݀?g?)9]S+aroundme_0_4_0/asset/group/thumbs/1_field10543_t3.jpg 777 0 0 1565 10163056577 15415 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?⇶GmPW2dኂKOhp^^O=޽̭3$qIy xŧZ+h<JGS:Ϟcq9(ĀEz½q⼟Byhn?6bG|EEbSn-mI/`9P( x8N:Taroundme_0_4_0/asset/group/thumbs/1_p395373reg810_t1.jpg 777 0 0 12703 10163056607 15625 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( LrΰZ2Hrjt櫉*Ս&ɞdCy+?ަ( WLdQCR'P 3̮b[ݿR2v.d: H1޳ͯK"hĉ5rDRRa!EPE\%#%ϗ?9*ܟViue K\4[$^Rұ\u4A<`n ~U,}OJRl>Xr3Ng)4$uH[(F}{sCGB))sM;jK0@:5xW?"sZ6p$s+c߲Gƥ?RR׮b IKY2[θaNwp3 ܓ<{=wLa_2-#$Z>x$B/^ chҪ*x WtK1o=QIW8 Lqm崶 )`hfAsp)Բ6VU%猃jFUU\Bm˟7B$V\~-Bp AŀKⒿg79Ac<4` * &J7~9C/ʹӺ=ʗm"c\{:DzR:\b͖yq>+m xVze`2?ʲg(15R ECzʶVkCzs\90 N ׽y3vj#m#= 4v-pzjs'l)?ֺ q>ޒouV+{gZɈ 7G Z+荩иҊi_bµ]wteJKfՌ91[p?`[>}+j97Եۣ"*$MHv zSqUVO9ZPn⋺!qj5&@lTM\ #dcoNqxV UڱzYU^Z=86j2碀Bx>)JH9lQH&ݼS-%4Uvf rM"RmBK0W[cCcgZ[MlVnڼ`ps$36q^ ݃wK^˒g7F(2|rA9wX,R, ?*t*RQ޳EKcq%՚K4&$du${dd.uuR|b8Rz*oM9rĚq}g;yS A;8 J.?J#q!6L~ՑOUմRRh$?mÖ'8?5z|"mSmbO>"H#p2&D/ U$m4IDP@r}{Vԧ y?6M ^"nNjkyo$L\\ g :g:^UEi3)4Ӵ *?C*6mni^/̹8&i5??ibcZk͐d5J{WRMF0^T_Wp$p@r De˩)Pu[MJF@*$|r8e<+E YVeEʌ?g-ѥ1JHaЌ9<WsG;cbEڠ߮{J҆iO%nyvRzkĶn(3"! 㶹oD=0k.bW&U0 ]xY:Y#`VYZFrp85ΰf RvV JEԽyzo.@b:kg'=OzňQrp8UjFap۪>L/#d8ϒjIx#aG(2)SH]6N8 փ{I߭xFB6BB1O8*Vs5Tԓ7Y8A5695{1کM3OLg&y.nmUT#vEj:<(0зa+TӬSNv[ǹXJƝeYEWQkHUC'XvAg|hy{b2Nq^V;}ntЯc8585gĐJN!+c"$zQqvgm؟u85Dw" C` _kMmd|A>niN]9Λ ݣW֬FWC ~XTt\ׯ5iEmB d `pQUإ{YVJ;|CI0*&޲1QU/z2Ms2 49ªM\`^']n >?>p ۂht$}]rIUkd W`^ߞjvKEEPIZ(m~n#ݷ G+oCID@v_ NĵiN~rEYKn2k70+ JsY~ KYܘdnZ*UéT^1048檿lTk .ݑƹ ,,yޚn*t]]myjOF5FIlN8*hu`5⁞O5F{] S?A~}kjL=[g C'-U2N:d$f|Ơ9#~S{gq:nغNCU5CFκ(i]ט4w$Ŀ MZwa -,{z*E5{+´9c(3^o*-~v{cҖO2A 3_?k1OnZ(KjAK, O)%\5\='*#B pF {QF컍K^TZ1F*)E,̡@B82.U8%r9VŸ|#J!8'8c߃/ }$Gml眎ҡm>ƕt򚦐y~ ,dK݀1Bf]]ӮZRпct3ûi'X!ߴ5laN& z ~DlХaXuɎ@hn\ ,6]fIpX7\{ds\«|47̢YZH%fzIa\u%_hlnkB@q5qƛ_ ,FHKY3lA&1-ڤ]v€Nr[1MB\՟єer钬c*Ts8V\/c`C]@Ky,z:W3u3CZܿ7:nNVuu7:cƘ j궍sk;~#a&Ђ8 }ƃYˣʔ拱I֬I/R)JQ6X!TG 2+ !y]|BtwCRkI͌JH>:.1y8vF(uaE@$۩8<ƭͨd1*&eI'L4VޠJn-kŴ HQp2İ^I$ׯzy|'Skc&I تQ$ :lEtv2V5Л xcH q1ZW3I#aRڪ:jωFPd:UHû[?YsEW,9{mbzSx2GX; z a51~V$(MVXpU?J=C{o^%0=1b- ݘ΀Jl~-־~YV5GlkB[ijZFŲ%9*gsO,fxcs4Y^V$ }$|mCIr'XО3'^)W2-m=^m=NU-I J 2MfA~啮aAuY{MnxrF Xp8eIDc*ë4]ڑyx]uAܘw$ MG'~C?Uaƞ/mKM0,yS9˞ԿӍӬѾTcs߽d-fqI؇f x%zװTͮ[b5%dVYV᤻Óde<,&WH9,{u+xԜ /00:;u . MZ+]zJ)aroundme_0_4_0/asset/group/thumbs/1_ultimate-f376_t1.jpg 777 0 0 15171 10163056626 16253 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?usq5ynxֹYa؜Tj3\Įsҩ`!oR9ύ]O},ĨX uvR 8#늮e{q9egn'J3#;ḒTbjП[(1 ;AFH&o ]}JVk dj!S'?JʕJNsq^:TkY sF)fYN331W4ieTkw$!@y5!ӯ,'X hOUr+YN@KqY[4n6`M0> wCVP"jnc5?T4g[dwY"8_q?Gj"&d ֫|=񭶒f"WKt9㎕{mmGN[Nj!mJFOF]O'1pΘұ$!kFm pxT*eY}55rytɭ RIA{]z+X2[3^9ҽF-gFa4jy3AM7kkv,ױ#ҚNMVnɏ22Oa_Bx+n\l?s޼fblqx4{(?uҷIKY:?[woebwތW35_{KYIm==Ot %fa#Ma~|rqu%+la@c8'52i6rV`y힕1[(2Ғg#KKݟA)o#tzn[W֡%V 89gCҺړF rG< SJ7!8[cڜE[s^p^M$1x~DxK wn^2T~8 *ȣ@0n7߀j"`V<+b@-l[,sYJw5ffԭn;E*]MBzdZ1I>ҨONk~. n=;ҼWՖj!+ Jm]asow"D͐1,fq譿e + F4 ĪNw/؟Δ\*%49]|AޣڢI Ч9=[Pw $-)[H1㿩Z3WgIhվqJ@?:4ؔFzӟfܑTI<'RKrE9@dI6UNf:cU~ųP?(W[ XKic2A]nFIisN j8JYN9ӵBO{MOn+, }KƑƣ#y 9j!Z?g@῭s{y4fCJoy`5W)쎚K+t;3Y>"ܬ/,F2iGs_ھۈr8pY6_ ou8"mĄ烏Q]΄·M]4?q>Y*zuE>kg%W2'RiWKIyxǰQ'߈._iɄG@rlVTaZ֗'\ͧɕ2H㞸 GR0p Weǜy|3 ȓ9n# l}sX΃{%_X^DHcλYTpH-5-&IdLd?^ԯ|Gmsyo46VVr,BCH y2sBѵ}6cwi\Jr7S8Z+i/>+Z3=9?Q5ʸjik'y:im$t47:6G?ʺ+/WW'b Ns:?&,ǜF Q͜~8 #_%g;㑹c'?ּ~QWDy&ݮ;,>f`yQ\&1zvuW*+pC.EsV9)tqёZF}jX$PYsްX$e@qϮ:}kVYj *%d*6x k) Sg$72ķt+?xSʽ;4_?ʠ,GA/^1~( I3=(a4Os x/xz'?ΥUa_7rЌLm{ڼTmKd~U,a{{y\[d|ˡ W$4ḑ_(kLs:C~ȯUM3I&u8@!uؤq8O^ҵ*;!jbʩ}s2m2I>m_kAY729 IRw jR$#k>O2.#-D,>`/nn4c!J$`*w'vɌ}CD-*$>;W͌lt&_i&}4#H-!AcJ3i(ithx_Zjy%k9~Q1s$z6 2aF;Nxh$3Ù!818O[5AWh8)|ڢh6IᯧPxDmw!A b?E­_[A |Gc nXخ/#V[xe 6 zkO]7RߙjT ΔeL߇z.duD's 93sOu{ ,-x<?w𗉾bqJ8B h |Q$h D68V¦V߽RS@;Wgm$vQu,Sg#5x'VN2qW~AYB?vؤu\Y 89]Ͼ0{EmVXns2j^,Ԯ46O/F3WN.Oo%Y &xݫhzn=rh|JQ&C5E e~dmb:} qz4: 769| TQ@5tҹ߼z8'pO].{k`% ~Y"oX؏[1  H֛iHOvc)EEwWZ$zSǞp@OSj=jn{P8bB+jhvLPfbLZϹU4)WGxq3SUQi#T<;+Y4L2NgCŨ"˲X`?wgtcH7ZqLa 2yHiŒŻO,: vwf@ l‘tj\Vyg/"x*7̠yeE#!z3ӚTe){%i즂@c"O+=x'E3{hݒHj E+TwQE 2þI)L3Lye)3tך0. DC 3hr;w;1r''yԶwcҊ+_ *yf24QE@M+۝pO8b| AV>,5~8 r?.QY>dtF+ٳfzErm7<  IB[qLu4Q^uOM6 %"ݎv˚9<`EM(? i/fG89r)zmIvf?aroundme_0_4_0/asset/group/thumbs/1_ultimate-f376_t2.jpg 777 0 0 5562 10163056626 16237 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222CP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F]nz`m$M\ޯv݋j;p35+ zik[{53[7HPGȹs-QfFr{I3sn2!@U8ZK [Eٚ>!f 3dF܎A-ԗ en!D`x]ZNIqYE`};WK&ƌԆ'vP$pyTNM$T&mn} GԒ$u-6H X=𭯇,|kr̎ ݂q+|j:xӠkgi|l 8F>OZ֘jH,в"<.u!֛܀F$q}14CgYJ1Cb\Mc,ryQ Q9$TŬw)  dPbX U-Uы؏64sqW8v h/ռ趟29TE?{{EuKz r#EYYn#TVa9'x=ac7Sz |9b:=E3Iawc)SM H^WihÚ÷6`1S<#%iO 5-#nVf'i烃T~!b&3ƑdfA!9p:Sh˗^SbH XV%8 O?ZAE1[6*#' C.X\:;_*o3.` {P)7s+Dډr,?UՖwW#agM8%"t!gaE$15LT3GN:pGT9U>B7FljQ'|/n ;9b R8'-t}s5Yo'wAdOZ )o@ ȚFgCT A'5֚VK6a~U86!Ugsּ5/ӵjڇܤf) 6rFx3V `_V7}6龉6,#}!y ȍ\F'hh?o%l xQk.M@He؎Ƿj)E5E 9nQ\&khE&[A5EnT(1GhVaroundme_0_4_0/asset/group/thumbs/1_ultimate-f376_t3.jpg 777 0 0 2216 10163056626 16231 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ixZy$qa7͵*ۇ˽C`m䰾/;D<`Pߎ)֚Z鑲3j@cSVZ7-'`}#$Tby#NFH)[UAj 4ƛh1k_麩`.1śH<8g?/Nj-#ᳮC8[pnbв|Xᶓ{C쭟Kym'?rB1|Gk4KǸuV# a{R{coas-kkJ8s89.L0$8&WkX卬/8kVas6.XJ1hwZb(v @1u h:@ 4wE ڻ\d; :q@Ѭ ` F Σ@1uTq@1up@Q"*b KEN 8=*nc$@1Ӧ%gp,$ab ML C"@9wYL}ĀC@.IH/ =D GL&@ x*$57 #N󈓃 S!ӆyyw<@b n'ɫq GzM ]GXb#}: 8>K0.U@XC~1#MH|D1Ȋ rP"y@J%$&yDyD6H%e Hq 2G2 Jw BλIw@y4ȝ@y4ȝ@4vM"jARr@ѤָA5IuMjԹ7n<"ܠ"Yw&.W=b2?рyDhSປDjcK ꩑:" 5 t$I}F7A }@Ď15E"y4@Q>D9+/ÏdM:h R¥<b R7nUM깏Lpj#' U-pZ#Gx@O @DK@MTsM"mnq:`6({oNP{gbPq v R|Dݼ @fsF:@{M- w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r w@ r\H-KIENDB`aroundme_0_4_0/asset/no_file_t2.png 777 0 0 3775 10155310663 12470 0PNG  IHDRPd&$G$gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEf3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3rwߊtRNSIDATxbIe@ 6 n @Q@Du  @T7 n @Q@DuHoq*H @qD @ $G@y #`"@1e q@ D 0 H1$0 &d @e Ʃ w q& $@Ā$" j.@1Qbqb_e @LQDb_Tĕq@ *&-`<3,Ӡ\bY]8M Y $F B Mp]Yf L= XĀb\I@\ 0EQ1bNb$0  b ޔĀDюÉ @ k$l#Kp5a%b XTa C|"@1,УgU T8 X&I&V@ 7I15@jb<@x"qE eX"5Qcj簛@ U@BW>@1଱ob#1}bW`/$obW@,ـ 4W]@ X[Du# HO @4wNъ“pel;M&&@/5 Āo, _ox!n9n@ Db ~:b f@Æ$ wHb%*$ >0@T7 n @Q@Du  @T7 n @Q@Du DHu,=dIENDB`aroundme_0_4_0/asset/no_file_t3.png 777 0 0 2643 10155310705 12457 0PNG  IHDR (gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEf3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3rwߊtRNSCIDATxbI!DP@T@A< b@G 0o@( ` b@vB­Āz`wi( ףLqHV@ P]7P PG"+ `/nD d T!L@1 ,@ (` b@ih* l n@`)"  Pn@1 #ś <{3ס."y" * VR;IENDB`aroundme_0_4_0/asset/user/ 777 0 0 0 10170232321 10610 5aroundme_0_4_0/asset/user/1_012356.jpg 777 0 0 14510 10157616055 12415 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?2dnLXN* ԁapSsLDӁjxjJ ;5jvH .j=ndJP Gx5pj4f&fKz}Ku-3u.hSsFhܑKiH&^y%KMw7*SHʷ(jR@ST "`jxA$۪,%F4fQi۩_4jZu05CRFh(j]T@0(CS($In)fM74 FQF* آ8)m9v𭕮OS!<_7J]K'Zj%E12LᩯxSFk4걁j) 3G4uH?ZC1֋5.k+bi#9LOͻtf "ÕڬnzQt bn5OcEr`jjȯX56R8 Tnly`s1G2VmmwRrOįWp^okf^<tӞ9Y?-L)єVQGSRdekWj+@9Oƪ[j1Y&7$h;3;7FQӍ5~[ XnVK~P}>+"WH|I p>@95z>qSG~xRN5/oh9[kw.a} T9&R-O- XT ]ERcƜ#^Q`x>oΤa*G!*A7f`hfVvys'ab65*Ks+pE^{捡5[$G p}1\|涇]Oǖ Dh"Uʧt !ٸD6ZcGiʌ ﻧ֯VW(b\;R?փi*eN0yӤ4yCQ`V;>`~PM":+iyBrsRGU*8#EgFJ 1^dOh"Ӛ. $3?>P0˻>\c<8QyҪ7>ڶdQA_xC. +O.P2< ¤01Z}(0ԋط4Xw37qUf2?ޢ(V5_tEO8h>2Oc,t"2I`/˴5UČm-)X6-@vϵqNfOqa\q=J*B(?Ʉ6 's8infqh,QiXR)c<.($űANʍ7,9Uq o1["!0I ϱ2$f84󧺀c{bs/Ǹ"2.LO8d7ؕ5u#UR$^)]cM*n:XfRS8wFq鶑dp#psW.#rh )}J{*QymZešo[p`1ya `Zb6.OOs#!Q+bGzӱ7%Te꽅5EQs*#VAҙ˲| ++6U@g QIt@; Rvzְuї`28kNksi&G E#m;xȘ9㎵& YK(ۈx=kpsh9 cG0qq`FI Ll W==;SjޟOdĖSΙOS s։$h`!09U ~I.b$IQͯV]wM!(u\SnƵ ,J>:.fRqbXϘ2=:a\Y84咰1 j̲1agDCGMaM ^vVYs皛r`xJ)X)Xg$,$`7NH;4 @pΤ@"Yʠf 8jpp2|ӌ1I ;r>ӓFJ1z"@\T3@R֞8g.+VJt:VA,pF<UUSCEȧSgIo c?&>r6.CVP#a4P.*]TA4Hd]8&Y 7WldIc 7evj3յ)0?chA~X>lc'wv5c BlsWd]@7UI=18`[4օgq|~Ǡo[JmV)%H'ޖ # >ղmX s 䙟蝹d!=*v:OdUBU&&єk Qo?x%z+My!5/٣ObF)qyRͻ)YXd@X} s;sOLӌ!'&s2;ʮ,݅O\X\8ϐG?j|8`qLhSH$)9(aʋ?ľ&@1ҙDf C)f4)!g0Ô`.prx6pGe=(v18dy\+.ܖPYu](,~0=̥wxYxn;LE~Nmn}*6\TIP94dLRlgtޠc*RszUu<֛ P8hC֒d1ր$N>_  RD=3{䀾ǚbۂysKd0'Y 䍡*D ڨҰ#;OMDJ= Y ro8&;XnPW4tl&ҞE.@ ݞRLT ӸҦTޘV{P*3X^+ǵC- `hq*?@F@ҩpF6g g".EڪHm]*bO3p9pHrʁFJUS_.F3zR)唰џ+qMPWo 7x1Mg~e i'q v慊9>tUP1LdwO)$N9QݎES{ac 'cg$ބ榎`qS-A5%BmgT'!pjUEL.p1*Jqg*H>P>v~P嶜cRG zSу(wWڤb qi Lvhx("3WѱeՏ'߭@%Ҁ@,i 1OU:=h0 ¨ 9(\= IN^ހ]&E7>DW0Qn0!`Źi3{Lڀ ղ 0ڜc4 1@F Tc?`aҕwd$lGT xLQRԮ@5vi%o/r} ; lt!?(#FKK~@3%b۔*q֚1)+vr1ǽNҚYb.H-$s fIN QBُ SAX ]68Wg@4r` 5(<T{TQd4%? jU#?B~'?xNy[{ʚІ8}*F)<4WN}=sV^݄v)pWDgS8JsӚd`IA{a"/U؎m=M 'ZU2AGAJ  HcjȋX#:SzP1#H!5s+z.qM*Eo=hҘE[1OD(ĊJ㊝*sӥWuHlJ*b#(.m:QE" *A袐n!H )>QLDڥZ(Z}(jOZ(_>SSJ?)3֊)7ݥ_QEHQ@EZ(74ku5h"=j&E(?aroundme_0_4_0/asset/user/1_01sumeos14289.jpg 777 0 0 24407 10157616133 13744 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?eC*\^V[ x|8Ƞ5<(cRcU,f=Ƣm/ g9SYqqIbUBk@h4+L~"(pM8Rc:'%K1 2F>mTl.>[I-bIyXN ԮSWUH偠G  jB$`=+ @^r=M9*>Y 4;ˑ 5/\~j,8/ֳu{(Zݜ8gd/j:u3Ӡ>ڽ_N S6+s/;sHd$ 5\$ @]UZ&摀?/93+i'#Ȫ`p=*;2[Ht栶R%"Oӡ =%p @=W[S*rDvki%ttUT5*07$T+}޿ZwosX%2&7(b<E'1"k7,ũLbi֠t '׮RO~k;Vx}PQ^xc(Ҽ IT _21F7Z*# 28WBHLCcB4lGQY OK&>3a)rUNayG\\GFw~U'7hG-Ϻ-Z ʲ"6XI@~kQhY'jNBfQv';V ܊=`~# N>W;fsM=HF9ylةϮ)v+ 9=wU{[ "vaי5#.xv׸9/ 2virka~GcHd*MלpZ "Ƹa 5fLD>Sc[jnGՌ4){PukUE:Q&Kej/4FqӭK[*3ҵڱKދ3 1yM."Xd*j"nk'Q1H:0y19?rl9ƺE%;Q5e'k\'H/5x'^m-CTHNZ_x*EB6#Xu.`8W5 CB:ljP(7vyW}{#;Dy25W卥q++cOz2Omqc(FcDq8]WI!W#hH˻A\Up-aOv⟆qTe9'+gevMK @J ]֩,Ҭ*Qx"l ?JЕEBUfr^Ѯ5HYa l$v>D`*`4tKT.:d}j-HWʴg)ǡ+~BcuZwbR66\q֨Ǻ#ۍ6#H&7fiFv;Zx)XdvKPqҹh^Mf˩N#g_R,*ڌn {գ$9RsXZsK؛}QTi Vq)\Åt*TPN?EH&n32ԯRc@J \Ro`NJ2mЍNGN:H$NDՏ5ǰ Fu9aвșN>7..R2:) L֔_ʣ>fӊӭ.uI6$zWi6O.H-ya2[_G,pp+7V3%CՊl&l&3=y#e!6ph2\ ?ԯ+#6'VS1okXO?8SғϟG;+5|=mө 14uG]7@'4s>I5kWX#UO[ FXt;*D<sR3JP60E+3F}BŻ .Ĩ˨ NNʌlV9$=5av2MBZ~ )c|H6}zƲ,[kRFL:If'$+ϠZt0k*x偊7T㕍O WZeicAxMtѨJ t}MoYivj(?kAIa?JsosITr܋i}qVʪ2F}GSM2eO .X9QP lE y/lT~c&tjl!H #\U1AU3NdR;~6dOR?1Eo,Ij> 8n`xNۧry\I$I1 iGlgpמY76Ozkjk~!]ϝ[gڴ]^vUccָ;P\!QjG3[.de-<+Gmq /=#eb~5(83ʊ떠۹d[^iH QS`Qa=w>Ivcg23<ίڀH^Ry*G4nX\$ǰ?;LۿBsYzźb$_ ~|Jԛ#V9OsZSW%'AoYq<}$PN Al8Ttgm \۷eA\† [ڌ\*VL1[Pg-D(tp ?,tl w0XLrƲ,jT>h&]Ɵ`RiKp q2}=WӵMZ%ۈWWC{mqjYB!5sMm^s\SZGs[)Z+'l+w~kmUWUd 7tґ +ǿq7z=wm#b(ktm./6@kdazִ &iN x~OFɍNpO=k~TaW1Ȭ0Uaדj^;yA +\λut(^Mt(_jmHfiUxNvQ%9# דCh= "g$6ϥ,E6̺Ѿ 78I1"]@O{O᳏Ϡ5bPԡ2N$EbG"\ZWh2҂y;:P97P3Hp_XL?ܧqȐ˜X@y΍KHRM ̎k|I9WjH #ֻ]gdZ5ݞ?J:Ech7xYhFN$: qKi"IeeG{r+NLoiX n8KmėRe,7`_ocV:^NaM)C]C.ϷjvbzBZ&쟻@f{ӃEUH|p}hXHJ {O8av~bE wC\Zz%Jڠ;onb_ppj̟z^{Gdǩepzvn&5bϸP0Y,e5>XOJ 9泔3* 5&̉s'5R]OPDG3/faoa+_srGh#3OڳU]]\;js0Xb ڽ1HHxѽ23H~ǃQӸWX&ӒGĞ#}枣W "29 #uы,\6!Ҵ5A"PB=tHWlL޿.&V"`|CT,T-=kj{{d[p#QHH>iMG"kGF3VI]Fت}NlZy숮1V>) Ucҹ+W4!nFq1UcK^y7'^J wP1QlPUP0ٝK,ї>;=23UeQ7[!ްV"Yc}Mm/v6FGkYnaR xwQZ>+EkNdW% _YgX\~ Q59;o8BMk$*׸<9똶ִ]4`NDR'm\O&mb)Gosע26m5.Y񻪷֓Q}C}=oNn^_Kdews9tʞ4[3??Xz>jqY\+af,Y1c VS ys(no1z r9`GfFÍĊWc_Ȣ16(Ʉ@c@UH?Zq#q[i{EX ئ39cu>ZF3L,DNG{)``~Tbt B"5)dTbiS,p֗ ҸW4E r=k]XCs8c+f]lxƧSbejgM 4̹P~t ):7WTqJhex;\@mGsRo^_ihwŸ=r:W]+Q,l$vpoz5]o泼^F?NNd [TnkGjyh$}Eg,i[$6IvVZBUP0JZOޑ_wpܧA$s+/6]d67)'ծ^O5.]\u`pkEʮ Hx>e5Y&91gNָZڗʄ~^ K)BnXdW/3k;mnGF :VZn{wqSG$v;m]5</ơ*& g{ԯR[Imy$KP\]2?OXUPg>LH8rOVnMȧY=ʕ影[Ӯ5Κ1s]^VX<=X>(y_biJϽaR_46&uՐ@9n `*a>|N>g͏v>jppF;fb_3iZ+nsѷvH3&@JaHϭMyN>B̒5nX%McbpZSLH0Glw@y6)L>n9ރa#g(~Ɂ`w&r0F1\^o=ƔXX0޹WᤵKێGz}ׅV r[H-ǵ0Ocvq=^2-֤,6;U '6;ԱczNYyӄasRO67;ce#ң~Ep><2 pp3"qփt\WeU9ʚdS DFGlSjXD8NFIHƁH'-SC&F=Asǖ!\qFΕn' aB`BN~h.o*OJʟl1Ցֈ*9ryJ&R]HX-AD^ SBp=N'k-^`ݻƩh>=hE&zrW>aɪwms%ee\8?#[ӭ(؛ynvy%/sMyDdbG}cu#䐟(?j?\ 54  }=t2lV iB?89h)M|rM0LeELa{b9R3!\9`A*AgNñTH{EYhbOZ)(Чj GةTd&$ Pd >ijRyi4 !iV8 N |j,+[9 1J jnFJs$66JĩR[-OBq?4+}P986.*i.P$FG$uO@v /BirjHP?Z@J2$8G?C*.v99CqIO^(q{LP:4>8` LmF4<R7 M7 p~4G 4F lJ]UbO>)8jo)f1@\̪G\cq0G${][WGY.,~WytuЏ)YŹ1w̸Қ!\d+ &N3OF9|‑ӟ xR?'|PJ.HsS|ޘ?(hY:~$ڋ1W?Z)|VS JG9nJu9ڟuiG'B xejjx$o[a$r`d6I'ceTomlØ#9E5V)nȨ=HuN8qՕBJs,$9){(n[1.nBZAY4mZ?Z˷֥M`цO9K(Cߵj8_*3M*_̉QbԇHQ@I;D5%l3p;Ej% l+Io4Y9$)t=>S`) SN[ s ,þѹ+cJ1omrܗ5`[2e-VCVB)Qi/V _ohZN9,簪#1f2mzӺO`a@u# * *63d f 5x4kƋr`K KKЕ99Hi`IȤ19IV39Cj8.[ơhY\Iipĉ?rz[#( GXqR0p6eWnsҐ ѡ#u5}KsQ~S@A\(U(fxjIz4HTdP;yKcRTdsPơ؆qUlz*_39n4Qvaroundme_0_4_0/asset/user/1_1_blurb153.swf 777 0 0 3054 10170232321 13415 0CWSHxm{8{cI8qK -eD+r kbkM-21Hc m\*ܦ*(KC9|<?@(2R a_Z>X'3aEkFSJDK w$[Ik\dGCgm&bo!͞tOd^wK[auV1B< #mG'qtH/$ p,2Iv^2Dp%- :]DU*tzY×\OD oA84^DzJPj͏ qn?H;Y2RL+:xXMof?sWjQORư.NNmR4QV.9MĨTnK]T|uϥxǞo(ߴWr< w =/p&UW_,YBO? d\qhFο1f=IZgcߎj2YwMY SBXAgzNi6=JNb2!.C{W:~S'~U6zW owh5T*[^ig!Ji݅IL`UTH덡zŞh'*=λ zx3>sou.sRd++1И48܁eo$j2s+dtLJ7hý>&zaы7ޒb\tt1쫷u 7q)ꬍ"Dir\[(<3nyөᷟ_kK8z-{j߆CfG J-F}y[َ·?Uz5G5ƶn\~~#:.$IWz)eA^:6Id]"7~A?#$y&!0F#%/ХEo 0{!ef VJU1- lT90K(Z:jY^2`Ji}* OdFL(he?w3hۥC Lj?gC|7WL0aq;Rx,6I$ʃԢ h"k ib נ9d R>c 4 u< eOAJkk/?1Ay):L #a\uB *#5/TVS;{NZ|g2laaz!MYDz%-tBdդ ᗧGTX'3aEkFSJDK w$[Ik\dGCgm&bo!͞tOd^wK[auV1B< #mG'qtH/$ p,2Iv^2Dp%- :]DU*tzY×\OD oA84^DzJPj͏ qn?H;Y2RL+:xXMof?sWjQORư.NNmR4QV.9MĨTnK]T|uϥxǞo(ߴWr< w =/p&UW_,YBO? d\qhFο1f=IZgcߎj2YwMY SBXAgzNi6=JNb2!.C{W:~S'~U6zW owh5T*[^ig!Ji݅IL`UTH덡zŞh'*=λ zx3>sou.sRd++1И48܁eo$j2s+dtLJ7hý>&zaы7ޒb\tt1쫷u 7q)ꬍ"Dir\[(<3nyөᷟ_kK8z-{j߆CfG J-F}y[َ·?Uz5G5ƶn\~~#:.$IWz)eA^:6Id]"7~A?#$y&!0F#%/ХEo 0{!ef VJU1- lT90K(Z:jY^2`Ji}* OdFL(he?w3hۥC Lj?gC|7WL0aq;Rx,6I$ʃԢ h"k ib נ9d R>c 4 u< eOAJkk/?1Ay):L #a\uB *#5/TVS;{NZ|g2laaz!MYDz%-tBdդ ᗧGTCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?i: 8RK@ J)ZpKiHl.@ϔ+'^]J}Դ8t*}6M=PZb (Q@ EPQKE%PQOWsYZ-ٮMKj 5̮3X򒰍ڧH>dr}{UiN]CCc2̥8״g;GդB\b!go$"2*O;mf-7nOk8szW3?ҷV73ͪTv:J*q QH\Tq1WR?HG:kX]|mL<b\T9s*T= Q,#OR`8n50v}m 9& 4+dW;BUKK}i.gTS˜nc+K[ـc/Z$ɗ˸^]ֽT*>hs"ݞ3h)O@+aV7Qڑ\QSw橭ʞ ֣M3O&\FGـ Ƽ&T+^jZ{]Ύ+*Pgjae$U#|zb#^naV*-HԊ䰎8؟aQF&MYE VߊtˈHX6uL\-!t_0FB*SyIRcVH杝SjҫGc^OB=Cϼ<*)od=MhT`tfށJoT0y]xl6= SONdn3[sc]>f-^sJJȗ`H_{WeytUv {.^cRmZenU27 8FV63${Ud[ ҟDk,mfmu5l̍dmIMZ\d @.y7-q;Vى8u զ=¢}Nv?xªt'ڗp-J<4/i.%7ShߝFXyw y%Rig.zW@>ڟ#>z]SЌTT<{$#BhAnHXg[}*Xw՘Vյa-FBV0?:啧x-=-b(TnQz`&lUap+M⸖N@I&jzͳ ,`*zIo^k|jR(? tKՙwv~OjOȒ Sp!50ITtfGM8Cyӹ>(hOE«)p%$QKʨlkT$\U+ՖlnqEBh-%cA%`7P{Ӆͼ#p9j}u!syԕ3JNKK5ߌ$ ~Y#kiK1,rMQswfܻҗvr*]FĠ-)Og,G, oּ&Z˲h9v5;]8MU3~ٗlDwl{VVmq!6X1[$zVQތ{+4z-&~?RTXh`>+hvjϞ G&#{mvzl좳0l#nsʭ)Hy/<+mR:V؁ z:? sGZڔ0B%]Ē7*Pi[G^؞izQiJ@8I"~F{/r0(( ĐN'McL44G> cHD AjiYHM A^RujC$N$hp; #4Nrx3Rېw4h<)n@FwgsF@sMsSNp &44QE8/˂9Z-ȍNd=}6I5 ŭyORH>ECV 6ԅHЎC$[OfԞoJRF7;dWwDA³tQF }ڽ44 ][v5yJa$J͹PNO43|Rvsn\KgXn!f͆Һsk&Nb_cUȁA[ɘ7R0#֑[ftmo Y9Uoz^ hڕ^y~= ֹH&_M)u||:%h6QoccHbTUFyRbךU塈֝F=sĴލ^t!DYYI, I˱vvR8l q£h6Ht3['+x7d68 [u *P[j\A+69q8Tg JP]JF 0]֩eZް4f=&?Z^[\WZnpTDO*/V'S;P똊. 댞GpWjDkOQqvggg=:~uqm䋀G_GUVF[!zާv:Ms&X%Zt0_ q*ąQQ)b@q]QT֟-.EMs9)>Akþ) %9dE鴃GWȂ4Ub8ocX$%s0Rm *Im᠐d8"*zjR(pOݥ٨NV`[åztiqNc]\w>ۛ{Τ؃wV`b㖕ڼ{>$d`H?ѯ+|ha^@W} 0X.Y7(qP{lirh(ÿZ4[ N G`Xsg9|+&i8@awut%OM9]Z]byt.n좮:~+6:j(焯qҵ$L.̿S)J<+qXP[RK,^?NjqCs4qڠ l\/$tQkFJ8LX=:Zg1).?[fQ~E.ޜSZwH0$T$e QRa_/Џ=HGiS*c֜ |ϥ+FnycR<ɂT;QJ$NEFV 5p.\ߐIwdEl-Y6AS`Zӏ)ZͩDͯ -xI: B9 }kL|Vbp9]փMwkww<^V"#;Wnǭc>e<6$~Tuc|$Qdo5i+\H6~B65̢zvڔO,>2J4TO* 3s+! 1=*8 Aofw/ztiJRRq⢔πMjPbAc_zJ;h5(*hhz[sHW[h)8^Yq޳5XoaD~u-A ak[1N̓v6>*E^2g$ %ɍy?t/u"L#ػ^GJ覻V/$#cQo(֑Ռܵ/xIŞ9Y킘TG'=znjm#wk$ 7rAW|7%5v,k M,*xI$,=(>#5}NV*QnOK{, q}HRV]t3ǥe麕VWV7V); :.`c3# 2<ҁَTŷ/AO)_.97f<}=y5 J|0v"[)o/&rvrzVRnsJO\5 .J}T,ֲ.MQH`M[q튿: ׶wG0M C:Gl8)<ƒnP~R0*.!WCL IX'SW742->Clwnjhklڔq ?H,Ddx= uռr,%Xn?'Ȅ?h̩ZHp9CVgakiֲ=ʫdc^{s/.P9:9Z_ع= zvTi]\^\=̯,rǭAN'zV`d~>B,XfhS,zV+9!SF;ѭH3}? \8<ꄀrj=.Izj1/Qc6ii)5{"vvl)wc\nO9&tNkgRE;X,{~Zh69r=t7ңJ?8]-c4Q6ּk[>#_q. @p* gYjvVnUq{d7* \*<hm^X,E <6߸ݺ@};s1ˑ+$n⓶K$ $UyCGd'- '܀Jj4aK x[;~7s#B g>Z9yol| 9E UwrL+&F1ɩ%X$Ѽm8WE&iF[?AHQVFCVSF(bbY$cRv59я;RBS#}%䕆']~ˡ@:hJˈ=> T}b~kMI1lлourrt592|`7t`*rXJy^p1UC;|O=.w5b%ʯ]Ba pH>-᳹q"^Y-ܒLGX00O(|]&i|xRO5u$r;Xo 6 ǯu8tP2nkams&1 gɮ9q.~xcV?3]]Os#1lffI;/+4/b+NLE)09D.`CX gh_%Y Ԍ).Sבޭߝ9DKtl HN)=hkDtS93ww6[02p0=4{+Aw~Q)1(#~"$up&(p}I9:D/6PHZ,6qRjFmWVM܁@6$hzIaifȑӞE E>Ib/0J︪0$TCn$tCrGa@et9I{QDr1-}pִZrM7:u_#ϮnvQDPNp)0v2oڭ1OS?ξW<cA$]˛AVfVVA0sZ֋.cwVu?ʮURI4-b<1T&$]PqJ\Sͪ&2UFjjiQ847Zx>#Ѐ'ݷzp@^q ϴ;^ 2,1`d9F~O՘!i =w3qҽ-)NqoSdžtA j? X/s<\duyLkt="7̰Z:(Qj̶0@'o@hys֜mhR"qOJT!%OzRL}qR൬)ۓJ\Cg==*k6's#=9II;ܑ9 γ$'+I%q'Z?|9ȑjF2/QI6?4d HL5hyQ b@$}k'ɭk9 ?R?:h9x8ԻV*wb.Be020z)SO Ö=2+qm,Q2΋NIMɼ8?jВ2828W.zc?4f?*Յi{’GNK`I(9$qG#8[Ɲ9!aڊm~feidv"9Z>MEycA5wF>fn>Zmڿ1}|Cq$vxYulpUJ(]Sӊ<<%>/G]'v]i Z<,r;4!r1Xַ3Z,=Aѭ XJԤעݮYTIkuC~-Ws"U@g UڽƲEqӊxNx/,\ d Lf+)а*\^SiQ]ϯ=Q#R 5mwHJ-j|˷DGϗ~OxSPP!"3\'GQksIga`֢d! s=UN 23o)Fz#,EDT]]u?oX}Q+7~ʤ->jl=?clct֞btOSGRUF9gX.-#`:ZvrĞAZ>T@?Uv"C~nL[Dʼdg+bc-׌qgi$3ǿsZi qCz] {CkfcTI[oz/r9'\$PIow(TE- |Yd 9$ԒO?Қk"»UG<[İJv8 ǕR ?jn慄[ysҋu[Lo ՍmdG;WCǎ-ѽL-. #Zjg{dMW nr#Wr:QW--m?zT8p:2 41.rO(ʒy8QE#@8=KYd|2;XEoRG^H;H73rNlCF2B? Wd& m#m:%io&<9:Et"Jf8l^wj(( 6`U~cE/q0#O~QR"zV}"E,_F"/MoWE.jxx qxTqS bEbG篺4^8*#QE` w?ʥ*Ҋ(OSPd=ϙyQE&#aroundme_0_4_0/asset/user/1_caseyflick327.jpg 777 0 0 17400 10157616144 14226 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Bԁx*ԛx(5;-5cqOU+H ri*RZPS{S}\ E9E1zS1RIC)HZq79LJ J4h,\S`SH'fT* Lvg4tve0A$D N,بsI&{ed=d0J4YRK-@ i&QBZ5-vWGlRzҺJ$2jrq?R:י){4юlଌ*Z^$OLVXT~G\WC-tLpuޡpmݹO*ãZ#nI'Uo&FDr0.h"϶b{WL[!:RXI=]XNZAC\VeiY\h'P䏘 R4]%㜥2ށ!\M3=rjiݫ#L&6*?kUyf4VQڊ-̈e4]'=)ESAymH-t+j=)})UN Ŝ tMt)j-JN]t;R.{uVX/ؠ1KNո #[O/ED2MʿV@VY\sAzgd6  Qf/J'JB})@D)|PԎ jJ$\T3JSIM2Yj1h8U.ҢB)\`궆k⑔C7t8U #-jjqFƹl$dܐ5MMh =d:nUzfB8Uw9WH.dF)⹭Al>Ʈ#cYq|P!'F%Yu?A\JB`  s8'}kM[m;R$N>Q_-}jv1j-ܺނ0Hetk8\7@šjH9Yj:VvZʁO+UGQ)"RGO5Li+ OsGSѰSrHکg5yTNhby"~Z"L)J&M]6JAi>hB̺*; JL4KL9&V4:_kՄQڀY^BT hhw4Śe44_[Yj127?+HzfIZ͡F1ٺ [Ÿbpo۰SYmQ$OJvl4ЮyoM9nU@.Gp{Uv7"55CVǑ. W^ˡ}T͒<^n H]VgЅ`H* W|?K._ab (:n̤UU ȨJImUV)>4T-F4 ?QK j[Q򊯚^) paXمb(!n#4xĶ2Fˉ=hwEbTzռR7(f8ffDsל08.R*v$H6zPj:\\E=y'np5|E)js!,F)S`fAVcV16HmY?_OŲ9 dHw2 㣀7;{lpg5smsh} (AhqWhw% [̒p*V"vs]`zDP$6&UGLkif+NxZI##rP}l66=[r(&VV @>VU֙Hds鋋FT[*Wjy;r~mtW)$Vzg],[ X`D'QΪ`{?Ƶ#ogU8t-1*}0YHtf/-mmBђQG5R!W kK+U˦r8CyX8jVN0iIEu-8SM3R#me9R9Lw8K\,\z/c-,`*ִcm,=Me˯j0:ma֓* ڔ4j*3c#<ViX-nBYBJ:kq_Z9v;c7(XXp|pQY p*nUDZnU)E!^6;}jtK圇Uv߻'֚]NDTz*)ly.Xr\D涍޲&DU2p? {`sn1"]{OwtdX$0 {^͍ ƲSQ'ǯqד) NQ$m*@p⫘`xރUJ3gTx9sr#@ 0zPd8O! &M4O9G5QDMIuV$SbȎ[k/F5)۱_:te,t-IE-KJ:RJl@)أ54H9 HQGҁs'Xo[G^Z%~../Rc+h&J 25 eoAwtX\<ЙBVQ鉬jV:fI8ڸנZ[鶢&DLğ3~+K;u,x{Pf!`ЗYL.gw(QF@5:J2zPyn+ʽЌu!כV"ⰵ oSG"2h 160s*_W";ky,q~Tc9'eѴs%qybNU9ʃy134]BfY- RmDU$J=ٮ%W!J1m>6;D!T.՝gVXw+l=+w'*Oq=KOX7~boxWXƒQ[Z˟F@LLc>E22Ix23M }#fLsT!4ғH*y3A𣙊IEswv`P:FeGZ6w=岻fV/zn cJy;6x׻uF8CCCt 9R*Qp:YtY=FZ( 6{lнiɃNXSPyH'*X z1Vv iM-@`D[+#Ҕg=)  OPwgi9-$n HW;&c9屁\j6t?c ( Fu 5g{wqA^9ƔFksry e&P1㯿ZK6лrʤ OVO\5ɴT̃6}xkTM<;[]Fim^F-ۣdmaW#Ԋ+88^{u),9AtM} *4@rgs[<qT~u|ݸ,Tj':GW1%ޣFmߐy9 \Muqkp #u^/ג*K$J&Ltl*Ʀ\pFA)byG!WeSc%|tҒMYw`|Vɂ̣ҪR9ps5wG9m1*qZ1VU_b*ꟕ 6PѷnEUHGC2%d4 E \- f5k*})BGv8u_# ᵒe5xKľ@ ;GG?Zf0eA toOa\I!fbMuQ=VѢ:/ ]LX*Ń'cIm-VE|'XZՄ r5Qw9,) 5$[1YQ98mxz:HG;+!H^{Y1qqpz*SJlqWgRbO$obe@Q7SOv5cuHѝۢ5vEk9bc,qg5;K5Xـ2J=2r OZ4bW84o.0K$=d^G0S8z}k;RŬ[aX{[GHqOsMF+dnR4V~kkpO|ԑ[| ֞@`U.8W#yYϐ$q+$ qꎄx&l\3?P A^`SQ6Fy?*yRCogy[jcӵiF*޶&ku&A,0}QgrfckѸ{Mo Fmr÷ֳtLKHY!st7lM*Esd@dtvW83LNJ72/p3A+@IB 8NvqZZ,+)OGi.යIL•%G Aԣ}ZHĶO8Bxڶ`}yLjSSܩ<#,@z&ͣQ$rJX:F[l|ƺrrIjחc(/BMQP< +h.b١9eLeD O!ϸ\md2񎞢a H>GiUn;-1 '֚V+\W%G$i`qw `kVNԞh۞Ɛ(+*9: ITrOV|D}iqUL4< I>d;J t6u}k7XY#@OΣ֯~Ͷ7=k u32qGT)G컨jwJ^[.qWQ1ZGn'Az.)R0Go3M 9=U[Z騻~o*H?f9YdT#=͹]d񨔇`k,ȷ6cak;s"7bia}JTړآH%A$';Ē̹,qH JS1<dǰƷ.;"L\WV;UU#U=/=y)k1滟;1ɧGaW+p\/)j+jJ9Fᕎ{t gc7Ҵg7(A[EVU*#,CkakDz0c=|s5Ȼ\QQJ\ԚR90rxnZ u3-S;V9UM 2=qR\S+5drzAPO4T{3 F)`8V%PGJ!Tt6`I *_HڑEG' Lv@ьc:R5+0 H01MBx˞-l]!BwzT%޴1ŝ~\"qJǾZf{TyzSXkrKk.}Jy:Vl|+rY'$kjkST6'xlf=69NzQxGtc^OrYU\4g P=J5򩘮[}g|E87esW=?p']4bKʍQ im&oU.q+jڳt z5DzzV74ngn(eQ[L<>?['3 c5]qwF5,V{GWQ ꞿJ5d*dN)yS C܌+garoundme_0_4_0/asset/user/1_ddd.png 777 0 0 230004 10155156632 12430 0PNG  IHDRbH IDATxyU8|N{=ua_$aU7GgafEpFFQ` DDpdPA@!$a $@t'%|]νUQG*n{{{V=ܾq? .+[z: 8^{ 7"_}'i ǖ%k+J Q(xmYf0*LtSD*L%)Dp@O,՟!"?I# +oD>t~A|aScٜ{HO={sm5G֔7'Ueceّʺt&qDuSn'uyD2\t|Oi> S{} HA8+xHD@b~sʹOJ eeC&du뺎 P8 A|M鿦V^ZLI^"p)/'M>=D> 2ё\.70ZWҕx?*+|/E(9C !""}]3oFԿV]1})>Q6?y'Z$o۽g'έ܆^ y<<=- +>Hgs%eO&\+"1!1(3)@Am  )S#!"D( \/TMˤwޜ2H-x|/ +h[ NܹiM={͂''@<^6.L ^:ͤDDQ8n`C*$@8 /Mv'"pkUettИ\D @T>DD5'N_;C" CbZamhסdY!tܤ *lnlxl}KcfW!x8 !1DDtM=|D[]D`/<r+.boQg ``.N4jE#ID!Tؐ9)bjq[1eId&~dc}$dovvo*xyk~ vlMT*:}#^ "b"麎LAA'Co8pl2rzu y܄:(8:F촶#n@qJ):NvA#pc:+Td}1;FF&N<⓯&z۷lkgL9]f>XRuTV&^T!c;cq[(fJv晘B㌨\sH\9kf̽C 5vevJ H|*_ ~IF* S!Y*$" ,!XC{^>潜˪;l^iՎ΍6عgkM$"#fe̘Nw=t{igq+iԕ5G#//E:Ap q1!t 8褒&ME@ .8ӿu{WO.+X>AsR.>{ jkRɁɭ:g~! ^KRt8C{{{`ַs:+^yꀍtf~&=/ݷjT+=[=P]1F2ک/xln@RQj +>g @zrUEM6}|-y4 Yg3Mg+nۼg78C>" pL&]u⦤aY ںtp3 ̝~誕C/|c|-lٺ{"bEyUMSɡn%"|qɒmYi9䳅5/|mdlooO甶C=Ã{&y{wv8H8A 4 Sql]۷gykC瞺gOG}}>μY P'-;;V n?t%G{cՕ ;w#]owJ$~vn^QY}T6m{?824:{{臻vog͎|Ez8vWW-;Г;Moԕz7D%q7ߜS9/z`;j*J+ztzY7?d\e8UMg]Xs {_|l[ν|w?gvl}J:p vq&\qiUӽkpޠVH_^Q>ȒTEC Bu\yNnFՑOg3Y#5u D4mƌ|!G;0 6⽶EB6wRD|O罜<!:D˂h=OxGn\k?^kGYGHHDp10q+̝{G44OqG iivԑ|( %W6>[׿ͷx͇}١u,k`xƎdL 2C":aM p7\~3:b\xNO#Ϛ?}5e۶8M|_.l (t?FiYoб#U+D !û^ᄦ=r _uCȸo{ CiiԖonxއ7y~!؛ n"x4&‹~3π|mz yuD)-M &uWܼ饎O9`;mﯨW-m6=svKD ~[}&55-{׭9wo=?Oկ~署/mw:g=;zEt;_tҖe۷n[{P"_W?$Rۼ$W߱e>ɭt~ =#yyyNKw֋zJٵ絕/=ԣ=S侻7|zӆk_]][_⩋Wǟ<ą̘n\QE7{Hz%$L/xl>y_ "1^.zg@>~ raU[BcnFh86{lcL̑U)3iR%:8x&ցGoS%d%G| |6W__'8CM8N"B(8䁗B 9g4=wY%%"D?8>8萵];P„̏vI%:!@Bqsx}+Ϝ1@Teƒ$q>>}˂^`(LوIꐇm:dOICMqf٦B R6$D)o{ qr sn D0xqxhqbK5|"w3eo1p\ }!}  *=u 2RCMmu ":pq ؁ "7rrEg3u wь љqg|?Ɩ}*45̛xH!BY'!1]}XfXg\6?ɹx"|I,tPm/ G"t: NF e*J[Ra쇆h ;~yE_IJ hT]YZ~W6h^m43 ,R /#&d3J#{* 6@3ǖ rb@lL)Všr"6=N9`(78!֘ &fJG,DD~2Zi˽cEZ/K{H XC)xAqRCۮEKfqKxɦC1R"%~{n|^) ¶amj&BKXI bϓgdI}S"bmT-KQ^gW 2bJ^D!uk1hڑHy2&F% (Q srmtbT&Pޥ\y;ӯ4_RB hTլ4B)-ʧ\dXJ"ibf)T-Ul$%m0g,ePP!$)Ή Vsg ]˪[H=Q|P$@(}3A[ +LrzYE?P=J (E"uCA%UN(aM8FXCGA4@{H+*GPw4w"jҙ1dyK,zP+L\S"] S"s܊D7dAݴDWUzJ |_ήZfbᐐ=tLd{K B%29 P fGQ>4TBANKQJlOrOQ[c]>1gCvxJ>#b p 2JL!E T͓UfdPU(n=w{0'E_ ^~|BB0iXQlFT 7ùl/5k*$Ec,C NZd"N%46Қ `{>-֟,0A1EAxFb "qI{U1%E@Ggһɗ9/f~0KALf:jlj@3gK]XH\7-ZhIr*Ϗ6pOOOgg5D (Dq%Q7H@v+`S$S!>x bf٥C&pm)! q)jt!Xa RY&憻,%C-Z6ȐCre4F2+#C 7߼`}k ˹%K~d:묩SzPRRrWb׮]w…'{sέljjE}񆊊K2ؑ!3J*3Y0 iD֪B (J@ i߮:4&ⓞM8ݠSWU(`U VJTq6._4GזY=/@:s P/#@%9S(fI3ypU"s*vU a$ "yU;B?]BƬV5 ]$Y<ցؐmR)E}FBCKFTaыXU:jH d!iycbjY xi@/~ ˗7=أDrllΟsacmkbcO=$>#D044844UUUח 64>566vwwrꚞf(]]]8N]]yUUU@?DkM~ݑq'ګL("Xf'7jO" F\eXbM6%</jW c _E̯z ,hET;<<쩡rej]}|*?>[ KQ Aږ8E56D64dtޝvjߢZtB"tDp芏ST6Le5#o9@7@#U2&k\!@31lDcKEvLx{uE0n%I+=CD*cznˑmH1!د^4ӟ9%&0dlf  9" #KHYLJR:1R0elY Lޑ$˳[9j^{[yYIMUR`>FH┐K mxkj"{ҙ;74eI >0b, P#{d1-jׄKros1o E;EQ܊z(m{DpQAA!5QV(- 1Pb"PWE5lˇYS(O_,Odݻy^ HƎ%`ɩz$ư~deYZRc|L&ǦS}SVE  :6nsGײQi,,X\h*o*' 3O 1M%nW$u*εƂ2kG\rPjɇүd%sPXA˃!0Hr;(\b>2Td`n \?Qekg\(=p)Nxz_e4᳠bRSB16 d\3Q;<f?@<ox/C8 2T/q$Hzkbk֐,~#c˧ϴxUc#T q5;Q 6x 3x(_]dՎ&,Q1,-=xe’@Qa}TV\4SRELdmhUYNpC};[[l[EhW:mfC]UgPKATNq[pB Xл*N04g:ܩ=iuV*fUWmhs0 UegT!  zb*04n,X9Ih)$e`e [:Q<0gFVn&s56ϨCJW~{R1J2lZ2L2&Hn0,ɴfd" mLmn[K78R9:AOp-Y7D7+b520V9ɤ0hKdsƧ"|,S3ɊPzX`ԹD'1(T@^/L:tN+]XENA͡ !U%Vy*-*XW:HU+RQ Td$s^Lm+Y!.1IL)d^:hIJ?_s岤boQ00&fD$ʄʅEsL}@f!21R*Sm%C\irEיxiR K[ SHHȮoA2uIḱ"Y;*eu60}C IS%JHU"2tjVv+L#2*4?D :3$$72MczV`W]Zbӯ#E.2㗁_SwDƠtp .TaPM|͂BA_ &Fcyh5 Il_cy@@>OO\*TL'em) 3-tJ Y Tc@CW2SL3e7 5EZ.0'֩Lf:"}*M,<xČjHY”c<# \$.YLs7 ŀmiCH8bNͳzetm9 unIpψ=']Ht1O%0TI%d5U7nZ(9*uՉYT 1öN]'ԹT%Kyy,NvZ\qEY%p* WR>`VS#*mҋm'5=U!KvYFȨSE!/ mIMb٩J`D2 S@jxY],D$2IS\6dO8wl#<ӁfR (I_ "JcXp"dٺ=P ZCBu6'! _a~u@"5D\{"א4kf"7ϫK)1ݳ4H\B_= 6Jų|dTBHM] Aua/sz&;CyA٦P4edKrlʈMd.,!EauV6BM.!6ԥ*Y»"jo+(qۏ“g6s:$}GU}OMR/0cLۻe+Nmnjj6%'[CŃ|!#9E.6]I d ?b]LnM2e@3N!0ص36yyE1ڟv[\X]> &45zGs\l[Gx>xdӉE M/ >ttttwwZ[.DT(֬Y#)ޝ;wʵ9ĝ %F$](td@ ǚpP\*.2uV#g\ңH#4FMoW~`F`x w|5OP~M/ґ+Pd.Ey7~g+'>g_-k /iӦ˖-{a8"s5e|S!qH"yB S1 s5$8Yf͸dڅ@+ :&U5?ZqL_#a l[nz0k裸]*xOyl.4ӊ7AEQ?;S|8EZ0asE]io  6?n!A"hE(:Er@);{;GsY ,N**>F2LyۡNQާo|G?GGyd˖-_.]|_|3Loo/s9d /袋JJJT+V8'? \s5<1dɒٳgq{׾5ϐ兗ZS 0/;Y"=ؼX."q'2٤6h7'Dd /~=oˬ|`8АkGUa^ry} rbBlDq5Dzeˎ8∇z|K/n뮻.\XUUUUUh"D6A1ϝ6OP"K"UVx1 u\%qZ|~W37@$UHͦ_9lG)1Y|'%ڸ3yĜ6p]fc vP /^xR嗿e8T_~9zGpW"^s5pW~V55 g0_zn$LqxN‚\ 42J)q[#ĜHӦyT 4%8/QkVg\I)ݤ[ZZHɧG:݃x>yu_vi`X1i-u["O<9QS{LqzˡlnڙKm!m9ag,S7kּf(P@^>85"SN*I`buyM;Ɠ'sDgjNHհa$_}AQf"2݋6d~#>w!;-h&Dȁ!tG1IxlAO%ۻ$q';y=ѣPz!{g0URT-F444444DZ80N#@&dN"7 4uڃ&8DH lMG&vi(3ex6vB"GHzw^ -AG1 ~3 F\(,컎q0_lR!%a2i4qplgDŽY~5" IAo! g[<'7QIęT,/Q<'S6RQ9N1QlhjIS"YoO_$mTFWE L1Eblf銚#>T=zMht#9]Q@J38DTOOrܔdqCE)F&H£l:tn_ޮ;ۆXrB ԩS~N /s!a6G@#fEdbpw0Gkf1C1ʍBo Wڎ(,tW0G ? 0\Rv#}L381m>V?LU@눆c- %!KCIzW8A-A 1"\\0{  X_`+DtA얥unYwg"1C }k/{kLg E| |/,bA#>\ϑ_(q=Ղ W;C#E/dK5!v ]W:ZNdH)g&#$EuV-gfqW)D+* +d!Q/q" VAQC5} aO?P6t/,ĘCl&E?g(+kfFWAIvMhtfւS3!O !~CjPڄѹM'DA m2٩xj\)€8B5@aFr+v39A'*@dAq!B9a?(r^+)bB-92K):R=u| $ RT(3@-*?j*w೤@(iLB"u@T IDAT Մ< ?~A +[d )`]sbHjmHm"i%1 Iq;$v 'cy&@mi5 P$Nbl .&{1,1F#Gr!ѯfͥHaq"m;bʌyg #a0){tx<$F@bp`NV4EoMIqe{ mG϶w ! F)b#':5axf$AW57GgqH"΢đ *q' 8:GbD(9Q$X&${Qqo#؞,H&d!;k$~HdƐEH QQE}jd󇰽 ^`/pCtfYDǭ+O%qlP,rƣOOmCb)CLq83s֮ϑJbe4a$E("{H/*BQ¿{$8qMWc;$&S(A EEQH"@Ql+Ge4ی'aИDT%BעZd?ߵ~kV}svOOG7ر=b'?rl#y_} !49a퉉_lDB+Bclp i;rtD?bfYկ.Xp\{{'wuuX? 7o~׷z 7Gũ="> :OwyڵW^-LDbɖekS61dGқc'ke.֗믿;8K\6أxś,%+W,yɒQj7/Yr?\>oo\}oڵ?=@[޼d-?Q#qqDt:-MgtK>{gyK?SO=5f2ybB\'?mg.}C9yɀ@=Kn^dɒQI5.@OE-K8/IOvCB/Fu[Yl8yn2ZGf$עwu3~zo`KsO=f͚斖斖뮻.lppR[[{7@}]}}}beph.asKˤIx?󌓨Pg]]p'/:$駝ēOr-pԈ5q.! 7HxsgѥC d^/4q.nM׸q}_`T&ݹswX}c9iѢE)z3gUY~q=^ 0 Rɉ[n*]N8/\~?R)Shyo+|T$h Hnm` bt8+q$aE)`*0NhC 2Ϛ1%;?+($a]SUM:t3<3wܺ:ISٳg/] clpWwO+rSDŒh΄r]ع3TI>2:6a$IZZ[y"Cx9Ř^h֊e<V Sƙ :peyYfV(p V:Rh)2DҜ&Y ŎSau{wuץ\o}i)?_zjc䒋|r-'D|,(_p_ ~c %\&F| =HQŇ!xW)/~.X$tq\rŜ"Ϩ /Zc+FEnif نÉ(SEdRDM$Ȑ9--VDZ؁ ,{$+هR̜]ByEW66>sac %7n wuv:Gp׮]-͎@GG)m@1eJtvtMi @3p*ٳ$蠳$UH$v؁gH$\{vL6" ؜!c 0ɑfOp*B1b8q-<84̲7qzyj ,#5d7"R{mḿ*I!eR^RR2]W@PYYP_/%TIDKss*InWL<R* SMΣJKKJKJBȩM jvlEPU<%,F^7SUA`Wh -ʦ5ۊ2` {89"0O8IE6FFk$J '>_pᅌ`ԯj 0$RtRbU<,_Q㍍lS쑝_n20hu1DD\_+HMMPvj>! -'&xx@,UxT  *b~\/2p"һz^Yw^i$)ijBga IAE-oE `K(}LTh-qΠ|S@u12*$C0a|05n;:8 p<"%!*a]]y ĻF2f&o'ZjJ<4vSqB R -"yU;(_A ,~C-eL$$QJ3~\5{N:w B$8*k0|~?z O&xwmbԩ<~2WY p~.ń8\1WIABDr;o?$x&YOERB!Δ lܛzUtweUk!ƎTG:`MNХMf P $fi6~W"Q!LN( o4)cu"K ˾Hp`4HUE-GކM7vzk4,-|j^~90du ݜ/AϜ,'"yHE" } E 86ؿv/nݳg w$v|)]sI%%u)&rqDs[ohY«LJ o*P0N # f}2DܗM-;X976!! uU2%*ٿ|󳅜s%AhvxE}?9h-l!*g9"|GgL25 }0Rc驮njjo6`6Gldg~|(0gy֌>-G/^U/G |#QYQ8NUUUpb{phnX0u2r$V@Sk{~|MVy@==-%`¡B'a]ᘠ}=/ N= ?יξOł_sM?}_=7eصmc- +woHLu**SOy;s|uv™r[6s;88c+++h)W>coY~k֬\׽te'SIɡk;3άNṝNP[6q WoeD@N:[n zL6s%mS2>|n n5k\wuwuˏ8.5W_M?ϻ Zeӯ{Y?Qd apl;C{n%7g,Gq֦w|VC1)̌d[}|^hѵ_Jm]9g3{NwxK_>-?38gy衇9_~k׬rYšstAW]uUMuY*.;cU^|i`vsۓy06az$Y@]_h l2"wǟ}>~xdd/^r;ȕW^9gΜvu-'%|tI"o!p$Lֹkm/^eeeʊJ@}] L@ooo@sRC}6q?翿$weГFܟѩXWLx̙3Xzʕ?`:yΜ9+Wljnw '455(;}J"M@ M*ҫ bE; 4QPE@PCI4"EZ@I?g3Nٓ{>w {fy{ٝ=qDO6m*2<"vn;,,Nڹyּe*CwBRnnpDhE{KN%ewr爫&uuٲeI&Ж-[N8(=r%]j\իW?x`pPP:Ϟ={5kֽ#GƎi̮)(TÙxx6TgR(7)PJ$;n@NG޸qkj󌿟/@>ޜ~͚ʕ+;v̰;w-h5ޟ8w|w!!!Ǝhެ?AzɁq) Y}gyfͧk/|A oذ *W]p1c>\+<]v6lXlll}tWޕ+VYY : \jä+iAS\@K:]%pԽy[T(Y2r怼nݺ_oذaÆURݻwt|Uy GXQ2A[$ӳJַЂ_ @r/G¬I\Y\Ç*WXrŹo@ ˕ݻvڸisYG\٬YW*WT#G9BW{|64h ݺuk԰addddddVFYxM?;mڴf~~~~C =ztԭkӷ'}Mݏ?ѡC=k A.??tx̿!~R5h~\U-.mÇ* r=:pP dر"####yQ???ڥ˅?ܳwoL)S:tĈov v,HD4Te*:'Z^"koͯ3f?wVo -͡jU{/̚ fee[׬4+;23Wvhi^ ڳ<@Ilx=}d18qQ6lhgpBr/)Wڹfh "$(E.{pSSTZA-m^^xN N}>2rB̛WadشwEѐȇe%*BFg={< ŊEoڤ/[l{d]zϘ_7Ə_;orޢ._N>ml}w} [_*$$(G~6Eee~]_ZVS3 khlp"lJJQХK2eړ`" 6&'at`4&g2(/o%]}beJxq <~2vA*W*GuNQҁ9#qE }3./`D 8a7@۴iYlE!ڷxŧ?W*V, ֨^58(G~^o;JOEw߾cwDDQJ⇟ /QXDk s΂jZꍸ[̼EQsgp7;3 ϯt&ӫQ:~.}']iL%x/$ @$RґűXRė]b`&\jݺ9PڼY# 3'bl@iꕫW @??~𰰐4iҀP{Ԡ}-kItf^P/xA|փL_$U5h)xB _"AeQr?1%1#hwկSLv'gf,QLaaa-1e I@۰J̩cPSPire[]ĕdXӂ𝗥˕)dM_..??Ͻ/?(PEO>4W"_v !5WhT#q]+rH,iU!$ $$JUTA (sHca&s}!#ks%HFۈ%JlA"rJ *~:ū+VB/O4?/k (hBxQ*tMKO"Iq#4_Py߳8"SYq*7 Q$ g =s lƛR{4+Z U;?΁k݃m֭tr,e*Ң:iorSs(/i_RT)_QW,Av Q= Eҁ@&? IDAT,evUEQTʮ* n 1(a )Hʖ^m?wpӚ_/ݝp`qy(#}/7v@ŀeF'$vHHeMHrlgv 5 ;̲MF5mm`2suCv0qS-tH d2m ^+vkLP_#&M·;d%Xo''/<9 /G`S/_N:Zo䢶֨""(bz2hI$R/{jAxmmaf_s5쎀uOcH使-Ճ8\V]&$UoZuՐۗԐf֖J6-) }t@St|B~@&4jDF116cAyin_*QfWËP,;HݎsRLb"}IU8.PR*Jq$sQbqAy! ~8)<B*$>ٖ޿il% eS/IWXW: +/|W)[Hl/3YPpZ M6X,V?}T7`# D9 8/%url/*~ւaQ>%Vdr !ȫ<H=+"F6!)*b+ 8QDNvQDZC2 m2;0֞Fdg)m[~6EQ8Emd{]z\H,M hPIԞP6 zRMF$$ * I 2JiJD_R't?J6[ b!6EP$}PsFl$ؗ2<QTRcQLj۫[3(6 8!}(P\-kLb2zŞ 2֓s"H=6(BQ+%=:HɈlH)V9o7i8La>e'N3!Q)2>K9QRJN@D4Xђ3 l'Ү)4xS$0άld KQц.Q^~H≍#dkk}Ti'2F0+IEɆ_)Z60<&ȞFd*D7/؇ ]j`G:)=N)&1]ȍ$X=}t7Q((M.c38jԤ$ Roj+AJk c,k ais} eeeݺ}\/x[_YRDT>s( ϺkFaHG ]veger*:bd۶mm۾WMK$?oR.R_z-{UVsϞ=k׭ 7nrUVoٲ?`@b4'I`ڹ3;+QS ~KXJ6h\\빟VZj.]:vکSƍ'N@M핧BB#FZqǎ9>FX}r媕+WIb4 …oE?p(Lj(xeQLooA(/ XfD[0Ɗk X"##C ?TzuV&,)biL9RB\/RAY[a!!!J~  uWV;(TX'_EQFX)~^ұ}9alڴ9аP?\h=v!8}T||< $CnX,vPZEBB,X/p>raN |c gLb2U*aQj/yHNϜ9?{<{/*)SYfEFE͟ 33ƍ"bccW$33c"&M2xӑQQQ[nzuVmB2[j!0zѣG 0`{tst;&&&w^~1QQ[mev&LZpaVuW^y5*2^u*Uy'|B GϜ|pa^(;uz+w~a""6oޜGFEo~Ҥn{ذaQQQ_|~di[/wntߧ"֭[ظQȨȨ?\5s֬Ј0_~SLu'}&*2㏗gggEEEEFvx{Ow}o̷z+*2jI))O?tddTd@@%l_"\^CcU_!ח6}(ɇ^E3p'N"#OF)g]ܹsMvVP1~w<}wwl;.nWҥKoܹϿot߶mۖ+W6H;[󴘃e 1d*.;wʔ.ԬY3$HHHH~7''@??Lo펏njSxq@K/ ) ^ᒸfժƏ&Lzw{⋳9ւ`˖%6|XO >PңGGyd۶>X?""addǡCԨQ^ٴi7,L2oXz#G7~0r䨉'N>7<|pXJ{ޫڠOv~o66lpiQv?xw1w֭ӧOf3l 䣏nNܹc@@߾mk[X1<ږ'-LT)[rcB=n~K:loFCQbRرc/ͮREhɕx4C _R%l"? ˣE` tDiZZZzzĉȐ!C<'8pjnw{zZZvv<(D ^55k~77?==5==mҤD?^4kPPpPʕy֭1b,X 3#!%W6uYYhӦСC,yq9K.}z=HkG?棥KG YA-[|гgN: >^TR˗eeh/!Q9*(RYk."AJkw A8c31#qX;`H,8;sE"U5kUګWMH)4jؠJ'3,&&&8ZtHAlSxBPg٩=#pv' 9$_5ǰ6$2WL 2,-18 (iz0&p*/~zXG⻨>EͲ[Flb"6S/!:PtҥK+l[Ýd'&sr(ħ/fDD(NݺD_04`XߣЋSry-Jx7&NEo{7DXa,8qRqFˢXHR۹0bٙ'xrUgUAH$uqTF$L,"4Pd70FUBt!އIhDge4?Wi I%|dP=T1QEÁ|䄟y2拴Z:f6RL+=|P2jG8cKCJEFan.1h'/s)( Vi0cF+/vaC n;~`?ת\2 ,S4 ~>,*(RiG1rNu!gl5\BB4̞(+p M̟m I8E@Cm]dYMPX fT$p|C$6W %(EZ`w Dq-5,IRġcoy(0J)njWլ=ƊC\ 1蜀Á=#7Hdy K$#%7 Wv. 7ddMLHe gБ:m#I@z@VV8*օ*>- $(ԅ~1i*o 6)j8DѸWDҶ c ' bk85h*`7Q<ilSiH@ p^¬e)0ZlS>&<:bB8QU#aNґ 3 . tmoa2AE4*EeGl`&L!ͅyEWxv#.)XH>sǃqbٳnݺU ']{v1S,\ٖVdFo $ѧ52J%+p@"&*g8iI&_|egk,I[!`77nTO:=qiӦ[ |I&o޲c/ݻ7n|ʤI'N7f;wyG̘N;c#+WСu|ql/hc0X@= jC5`A\UJ+$I`%css$*obӒe19k̥Kz8ѧwo=zԐ~뭷{챙^hݺ| |uPF\, l9QdƐ$!X63*F/0@>c|^~y PjU3MѢ-B0tΝ#Ξ>}$-&Ҝ?ђOޛ}Ç?.n׮{jƍk׭;|V1]`E~ND3s,g>wD}J60E4#fˀl֬w,˙(;c%a CRL>ȤA|? IDAT0k瀐GX/o{3fL?N:@k.4˕K9vViႥ8֏]` \ CB1Mx~4isgS5O:& ~.jcsO>I<$Y#-/<~mxdwt5SR8Z{KBAd"_d)z8{{x0e-'&&6n8''򫇚6]ɚY9USb;$S:I]@ɓ7n޸sNҥUVVS}˖-F ͛7rʩ_~%-=صk>XhIIIƍBBܹST۷oݺu<@;uZժׯ%K7~PN]xbJJʙ3gXg,QZ:,,j?9H&MD5[*S6&pzG9Le1'1r pִOR8A %;uP\;jf|dgp2túmHư(HPOЇx#b`l`m!G< *u}HO ]KXkԤTf߾?0K7TV8NP8ԋ@UbOZ"$DIqs!֎r<b83H'6E- oh;12\rC`ж>fAYBGN] F3-xAEQHPދ[G'q lu,Eu{=&9gsrwʰvVv|#M2Dōj)0U*5R SFmPuh7uҺ'GHhm&1%[2`_eu0 v^nJ"TS s_ҕ 3}" "F%?w,e7bڏ9KK'e$_jD&VbZ*^"%m2ZebH(HEvF a$h.}&9PIQQ8egx#AH PU](^LF?/IJ?DlCd+殔Pf]XyZ5H/QPAIp$ Ym$UXTg Z҉-K(,:Yn {Ю2 hiEQ E0!8|QL$E`}3'V@QdyQؖV)_P>}i+]T +XDQ"RE^\6Q LcƒuksR@(ےN8NfEiײE2*C{'-QU.f[AR']6#T٣D3(b#$$oIAh``F/cPFY;)Hv0"#'s[:>x/}.P#0yDAvYp` YՀ m|fhD !X ($pQʉ%&Ly5!vڙ81]ujB[A։t*wL[C _*]S<gJI8K(GB&$&NF`GN4 Q;8!:)cVvp6T%Mx2s5Q487k[?>5i[0ub%_tT#m@eC-TILJcN:;v_R-@Y`qM@믿IKK"uBĠ}]xl`[\WDrY+H`0/;| [bj-} !#N(Bx?P ;XLFS!ۊKرSǎO9sf޼Gkj?$JM:b8Ν׮AZ\(f2.5# %k{c% l11V\3.nG{xй,$))ׯ] O{^Bử^ҝxsRҽ?\-v>o.O>kgNNm[0/]JMM[|EUUR4"<.n];W֩];0 ę3_hnw|#G۵3.nCܹ3{/~Mm< g} [͛7͒a1볳o޼i*? e*7~`|)""i=nwk9zo=kIPX$&J*5i$ڵM6[[_=ޱGK={v.^&{|qc}5''d;l2K-H1\y!0& ܖSb_r)JsY*:7{?_ŅT^gp\X6eP%zn`_{< 1ͅ> v/>W\ .-UO Oֽ۸qUTy٫VTbr/.ʭ~y|Xb%Jw^ՉYϚ|```R:=;oSjժ:+tspҥڵjzz'_;@z:uz[hCMz<~8'Sddfdfzʕ+{ʕMyž}8c+8$U6'mС`H4G5Rqڥ bC;,^&Cَ#@ ^+W wytҟ|uVzlZyf:/ 2eC9bi&'HvOu W\oѼyhhKBf̘j'C>scvwPV(C|`AAAA.BboʊWN˖QJ{^F_~s5WUTiР+Wڵ-[z*UX/_YfhXP  hqĉϞTV-996$&&; vܹtٲԶmTTrJ$ V\ǎ=ڵYYYuj> ׮QzZz}c# 5i' \Vp!WH@x4[<)c;pl6T7F(8s(ILE9 SzH;=­&gCEJl!xjIݻ ,,k.+UVZfUX믰}-jkڴۉaaa,UDjUK(ZZRJ@jUPW^V-7jTtԒ%K)SLժU+VPt_jU~3+Š/QZբE#-Zj2KשS'9%hѢY7?\[jذB UURrxxxҥT6t gDxsׯgiZժժU :V.u 6Mص[rʖ/_>,4,7/ڶmcQ,UThhhXXX˖-7jt֭ccSXѲEDD=#%KήQFN-[hѼi&oj h!R$):,k~sRݷ/>Q8c+)ËE]2'@'$bыxk1sr V<kܳ{φv[xs Q_u)(aPŸUCQ5Pa.d#E'7L2dqٲ6mܪUkm~U}p@'NoatN)ۉ}#ESaC|J: ,5\FƻX U4U S?$2R4Hv&v'm;"a2mmI Ԡ$N]o/ᗱݧ.!ùL|+0ёȥB 1td@Ӌ;!7r]± c[rh2DӴ3^.8c|Cz\:PO;r^|PSxѪ"3*s ett+QWUCő8ӰA[ dd6'f CBxEۨ!P L BN:wkP|Rܮu#4hPj_]jjOî>|Dst Bbhw9G[5NBFq$QL5QSL;t0$ԧi P=mO JuW#kF`8hSAߐ% a٪waO^f#Sa$ !! -#DD`R["14 YgR/ ظ\Z;jlב)wǐ+^e/屗s߿@" }7X覥ffGɒ|ZJ-œ{@&QEo>*V5Jm0G _=*2 T 6y)ژ7H2KTQ2`g/jL~R t8}faQF"C]M2+Xvï g&hVܮޛ_5`3XRkm/RkdVRյ_4k\[A"WMy`,*reûJH?XNEjU^x1/nZGR*;fġb5nzOtX:(C\EdzG6i  }raer`l#y}O`x)bFv,J#0h"q u4?Ư#Jf*))5C@1B"+Hմ"9.&-Rds`eC9'kNjMX\vq2@C*%q<'.BPN}%A (-ABq/UY*{r;>$TVuBQwܖ f#)0h-DDd)"FXK Eю1o𳑘Øp-Յ|2)\ud*:DKNƎpyBfD(?S($کDĀDD.hf$T[m&;BPERUe'E'A脄 ˜ 6`(Rb2*]\;1[\fA7dOHl^A-0޵q[yԩCd<Ǽ N~ۭFbp"^R>Cp ,I-H'F`'YCمOqCA\p' Am0-" 1s-؂! B@E-j6~N.cg ,%9̡eZ&/,FHT$BaW9{"7N2{N&^XTo#8-:HܮqhpKC=Y?yU3jM֥0H4 2#"j 'xt G";g }!|y$A:NdZL@Q?=ucQBGZ6(#сF->G dUse J;W-q`cl*JYMU+F!#!Q@{R1+fHH4-hb2EH( =d$ dG`RaG 9 E wD*HbUHD"rN%+DE]%2;'"}LuA빖Þ ZxEJRz<ǓҢb @uSj%_CV(I!xd_dy2=<%'7'+)|K,\AtI" Qhnnɶ=ǓyOVVVA~~~^^6ēx^!N:=_ҥc?*:;~Dn=, ?pUYնFVLK78y#.&< 1 LFЀxSU,{or[uAaÆҾn}̙3С:\jk ͍'((跓'_Ƹq%Nf/<].ڵ#G֩S;11];vQFϞ322_&1B {@ŊF a7[:}L׮]hRRR}xcv@Ϟ}ԭsmt+W|JN4u> >lDVMIn1ްO>P㏋k4tɇKw@d]oѤIr޳G-/~ڠC٣B |CXnLkEaefF݀CHLNNB@`!!kzyLPM7ӛ_:w+~'~Сgmӡ}+WIʕо]NV+;oײ/ڵ\.Wj֨@ܽc.M6=3IhI %%eOf͚/fQ|\|W;oס}9s^޷o :thרa5k> оѣG;w[;thr:u_۷ :_~Ç;ojo7mz~:U~6HOq{ iߋ}5WճQ!}~ᇖ-[ԪY{n?hQ|K 8&e򔉝nӦM]q񉉉ǎ?zظc!SAAA۶#K,)!\ZMCM&QT "A=8'&NpTtS۸cz}O?[+.R:p@.1oAnn D?շlٲm۶ILiϞM$\޾]m?q׫(:Vyj:u+2Ê'%0/ׯcؤ(%{Kxw )b*ᛍ;v쌈z:t k۶͊6iu;1 Ђ|}k~g^Jitt_ђ%oaWK\.1Z{rs:uXV-b/_}O>1|m?\0aXӨm'ܟ Z'*fʟANԣG[qP"#G ߵ35ԩ=sork3P۶mvmZw/iϞ="8h7ĺ2%r^֭iijլR򮝱v[A;eʔsJ)!On ?_W]vqivmi΋ύSVk~>r_ݲeՄI&BRSSccw\eIouEQ/sQݷ;-[۱kgl F y˖?sq@YejNFɉ"*1T6"@ɬ1{*<;hЀ7EGJFEFZ5{ر1ʕ8qg9:/7~{WׯT̻ݦͣOEO6A/YW\;ۉn>**\! }ᅙcƌi߾}ݺu5jTLPpO罾_t'W1c!nb鲏cjt?\{4nx̳9 ))VgڸQÇ)]̤77w޽]|):3gc=E}~3 }1@`?,YtҌu{w l4H&S`d2QEfQDi7ʓܮxTLx9A۠eߌЙmi&5k}((2Զ6q@RùŌ!/,S%lh33G]K. iэr XߴƉ5> RRMXc@lg)̦62}D\37%,8bSS;S3E+Imn/cxTe* YM[K]AXF(eƉ}R(Q`k~m2,XXl!aUa5*ՓѪ3y8"H2L"fQE+ȉN!!T#p1VZ( R,l]EY`:cm(/PJ KbTDlSaAJ(%8"T* s:^ IyoLѶR2AX{8##Tfт>D.#v FRLTQ)s]Bn)\C8Z$A1)&9l8_bB D.6(+aFN,}`HhM,6|V;\aTi7JE#7¢T9>/i90L`gGE8՚=p`=y+=,Ch"+*"R^}bN6:{k[5!U{fL!, 0wAѮ{_[F^8EE-+el81jIX"hR6"Ӫ3,BZ lk-!;Keaû(3)$!@Q˕"Di*" %Ŋ]E lWT4H  ISfv?y}4gv9gN]#{}z#r"!aF9؜wYp#G5Ӽagߠcx1o$)muU#] ='Zv^mѦ i|)E7g6D/Q=9F YGg쩧՜i"#-SDz"T7"K oNqgTbM@)Fah9S e0ߑdXY/uF$^(fF SyEHv.+ZY 35#sx]\LY 1ZV5S{r;YE,Y!ADF2A, Yl1Մ[3=Vm&&OIv>J搕2[6 LMР T̑ur`aF|H  D8&QeOHޅ]@'F&:x}1bńm#k =SsFi á 7vϪP^%ߴ w׬Ytdk׭3);…zm߾c=_}M׮ݾbʕ+yH \'.f|qHu?V{n_ ޽޺~_ՑPXwE ,\l:+;V) [^̈́0$ذa…VZmm ,/.XKs׮ݹy, … wލy,\xX\RRp  zT+Vhx񂅋v-pD7Hlb|'!@dʤz9M1<(VKlD8LClo}*PZ{v_ pFgaIJU^}㿚9KN#;tHMMs:wsŢ-rcTla?\TRgnk׮[0PfAz}''%nڵsGG,XkԨ>Az޽IlٲW8e3~=fΜyX#r4~_xq/> a֨Y㆑#eV^; B5LSdA;>6$7vFh FoT޴WSa׾07p 믿6 8w^˗ @iiiA~~1/?pĈa7oFgg_vکw5 b/p222:u:M#RY6sƋ5jTz5k֬}_o_7b1w?kL~~_LOO?FoNؠAf̜Oۘ1w7+OʫKKFYv)_?n޼~w;q?Ocਣq̙9t6|DǹM=oUR\bҸqޛrk eV 퉎2:5dQ2]Nr0"'!`D@I`h۶[oW\1h…w}e.m'NnԸᣏ>>st6l,.)iР矩Z5׬Y3zԍK~})?sMMINzUgWl7e/2LؤI{VVʹ>p=wUW];|xNii?:n6mzaVìM6[6;n7V՟:nu5k~?XӦ=c1lܸ1,[ls?#I2pmwtt֖[o^RRio׾]ii/]|qǵH2I&Mo(lݶ<33Ex-fw~ Uz~xCzi;vo׮tƌ/F bۇ3gqSq#Ɵ $ƔB$+>͛5kĪ5ڵk#bڵjhLrRRZ-Λ7o>/vZɩp%WNQ"ӎ.]Ok#oz7Y[l}뭷]HNN]6(.)r%K~ Rkժ}5j$(=`,;h/epy㏥&MYy|cXm6} XxjժٳgsԨ bu#z/L|􄉳#ewzm@yy^|im,ճ˳^[vF#<nܣ{μ`sk~věoݶ]?W +k Uc繹˗+VǟL<f2V2eNa,]7λvܴFG^Oo8,YY +>I|{QL~8=|梡#]~hױNgImrlخިvAqEv|,#ˈ _Վ:iG;s|V lɁM6iczq(ۣ̌veT $(1:]Ǩ(swnCITw6 G@b8Fjh\!ۍמ-/m 1(&%w*Ҩ&" vZ\pAv\ ś);ڕcHX <S1h jD%5FHTa+6jn'¾r贈$0r9V4"Pl; tQ)CY\G=R+8C_dr(P=9}RYŴm2HjWGbP t-^aՕ&bbfG=A& aa<5SIXytqXk*@X`%JD{ЮѮEC~HED x4L)X;g4^hU ̜9kڵ-λ&usz OO?}z ?ON8&O/xyϞ=)x#C ,P9ֹVNqH^@LS P-ǟ~ڲekQQcggw ySvv/g?7|;;e?!;wSXXxM7ggw%% .}玝YC ޽{ ˖W}=ztرuɭ ?t-[~7ciQQggw瞱#Gޔ}%%%g}nvv?>//ҒҩS> nq_3iT;b[>~6ܴy_{_rΝy093={y=\rq7 4WϞvHO= ]о}[v4p@J+ҮZsNt`GǭXgIIɤS۶icG^ޫWO !":$$RU֞@P/|q$'< ツvݴ1%%%ee|iug ! M4A/Ϛ 6;>hozZ~uϿ8yO ffЇx甘c#++;+\qgibUINN)*.ޱ2Gyͣj׮={g0v샍j|ϾCffٟ I'|o^Z5g 9掟/6uk?1;w~O!W49 ̚?2 huR+۳AV^}K@ӦM3V~YܨQü?Xz) 8㪫A&tZ{ ˟SHxo?觖XZb#Zr[%^u֏E~2KwBƞV:h͛7⾯z꫆ܙO5mz ߷ଳ:n}C(h(ǃ[3;0}]GpSH ۷ SbVdܒuN0;y={u#7}\~yUV{tr^Gz8+ntY9sٟ֜@/Aөsf]D@\ VرuC_hX `~9f1PG.}1ՎDwA wĦ|+3rf-eqjjE%%%%%_ܧ_K7mޒܯߥ.d_jrT~\Իv]*i[n/((( uփ~!`n̪{ RSRSRRRR ۛYh7%~Yo﾿{nF_K,XZQQ_PwҔm1A/((((HOIInۦM~o-!_~9{Æ {*((()-V-V%9%%9)`U=9trޙgvW?ϟ1eswt9SNn_m[C=_w^aï_^VVR\ U32 V0O>U>IεW\Ӱa|]o‚ zS-zN-C*wtq2-1Z/];!>Yf Oȏz(5ضMSN9پBsN}\3rhsϽ?촋/2GhsOx&F┤upF\J핆2BMFB0pLXFǘrӗSW{t0eO[l{L~FA^(_h',N9FhSPFds 'DohWPd|-6X)4 bZ+8D%yW1* F$$xo' ?d)qbPp`$3nPCk4U#ո/Zy %3&S ѴXLSxT/I`b&зaЁj _@j-wQWc͙AbB3oiDD~3FϰBB{+m\;&Dz6+ "tFudS#_B Yd}NZAO- 5~`B͌jd?Ul$eğ|gJT)Kzﷵ'r0p-)QMق0M!!0q[R<6`f>3:cV=Qba#q4:s)FEHzɐ\{/B/ЇʄJAo(?P_WaxNPƄ~%|PT 缠Ϊ!tV鈇sRyHMڕ)XG̐c|f[f" l fBA"U܀s2%J [ ѩ?!#$U97gev ;+~x(uM5` #6r F v qYKFYf (`l pSfu}:]E3*SH<" wqvV-VjD.MBb"a~S b# =dpv `Hk~b$fv{F8GPG:N THkq="H1R82Qvƒcs[k!jw%dFYEo`X/*g8 dst>5hl]*v)NP! j x ة%B7 '%`m n р%U ȉ>ЛiC DO3!FN, @E)څK مZs\a(e\YLq8ק`(f.*\/rԒ9/1ۼ"@U!m;Њ l墣9*6H!ne>ɿ!OC90A`c2ہC栲jO8 !(fЈDjv17Ώz0|nH#7V$X!6n9 ́CAq ' $溟R:=8 3M 14'7H'x(xP6fJ;ϊ^QO˄Gع{r r?3)oD" a5dmud2<ɤ?ŀ-pCYȇC4"UU~{u;II.5)f!!쒷gڧNnt%P" 0U~' !UsqƅTK>V)@8zLkkH3}NUxkS5+cZofs WB*bYɰ!mDt֏9!c b*zj-zm9ξRrJF8HNEwI:Y]u-ނ8n⨺!vفC#=Y+ZΩ,mgSIE'z#jRdd}ë2C\vݐ]28܏M,Y`U_D;b,'"iY&7\;*ܺ^;/V4Q:\v{&4p4~ =Qn!Uv{+K8W 3#^` P)R(КG(D-$ȮT&CA wQ;(?`٣D 1*.I&<!/%6|SA|3xT BN:HU"ʣAQ8޳x?oy{,/?:+Gt*$תڠC4("bWdl)v4+sџFQ"2wǓ_*St?:{0g9'Rp2x1T0%2G Z}"ctIh_/d9Jzq}?>ˊ1wǶmW^:|cø]nҨ֑ *Bn/@|<$g1FP [aG"t^{N~'}۟R~>wRSS-7uٸio߿%+7lҧwy?/)(wa| 99>zjwߟs|˦':whF}w:MKҹS[bqV&Ӫi}^Oό8,3Jyb&Գ"W`wS/uQ"E4Zp!IG;***(4@ByCT-!vdch9:Y lן <#wG WԸÞS1&caLlrOl^^ao=P۟b,d ުE]Չ8' ͉'6X.wX m֫Vof'̓o뾙p+WK!PBoTD.Ao(,ɫ "=#D  T[QQZ P! 1Fל5Wxb tc˖-5#}Y\w6oҫgyƿÜ_vکUy֭OjDPa($bofԻ $''''$'&''~m^jjJCHL+W.*E*{juI`HONNY'z׬zSvJrrʊv C=zwQV,_bK.1jBSPɼ4Q+XFr+*b 5O<-G_X^QVZK*~rSTu\`lꆔk׭㏥͛7/Xhݺ7͚Żvٺu[ݺu:u: 6lذf²\غu+,}-@mk׬۹3Lqok׮W:WXsgjՆu7dc1I>))m0`r;Za IDAT>o~sgފ+geed#ި[[w6|u>XQq[ ְ:Gzt!OCœaם<ovu='?'Mi}z0-Z4?kJJJv_lڴ[no={ r?ϟ;G~ի׌}#_C-!$%%8ZYLNNIJJ}O=Ԕٳ?C^z~*ie:vX\\;@^=jתߖ.]f$'l;W\Tt>}~rr,v_~9 0_|1[%${8zG ,)))m;#β {|*UR{@AA1_/[U37,//?ԪY?U]z-4f(#4qNt܆ѐQu[n{bvC PoQ#VW: -2?Q4&m}/xۧLR0G{vڵv1n9sX`SOMl߮sNiܸѩҵk1B"YK/5ƆFlѓ ]l_}oK~7;yꩧ.[9< gc^{5k־0%cLYYdS&Z=5af8i~<3B m#oq]wcqqsX𗧞-Yfd'OZVVfy׬]4Lqq/`]":4n7%7"9Z'k*^7PX_}}65|7 srF_3zM˗/׮YBuWNy?/ڕڜ99G++&^3> 9򎜜ѿ, *pܟsrFz}hBWMkb1&vwl[Fu-\}\;|ذk@ߓOiݸq;vV6\ܷϹST\0+c?4cN6I&uԖZPcE1QONSr?oߕ}vK*UXꫯ׭Sp-թSW_w)55uA?Ӝ9_}} .ݻ hF GcA%.p-0MԺҪ4=1I@)S4II:֛@);Dx7mޜ>x{ܹ?|7EEIII۷Z Kzթ]a\~I*~#w~c^ޮI']DDv&V˹)R b05rssڵkcfw?I'6irԒׯϿYfݺu֭ۤIWXYQ^q|˖7n\7yf´_kFĩJdzh%HƅvڝܨQٳ?{va?0v=~k1O-,[Gfe>; sժJNWM6":FۨV͒V/O>HKOjUݐ[#j)6ݢB(s_ 0%ԪYc7nZac-7*;u۹?[ȸO?~+\kXzfM nQz[N{~TTh433#7)[R.%mj%3t萪U] n#<իգߖtpFj*pQGݫh%%; p ˹f '皞=ǻ쾸o?bÆڷo{Yg߿_&Gaî+f5}˵^ rBcB@?-tq֭طOwƍG-pay}#B''<7 k׺ꚛ 40U32f?#?D̋7yn#c^f V?=f'xUC֩S裛4ol0!MsCmנANh䨣<ؤI5kf^=8XF'QU五 DԮi׍ jU|cvz1lڼ۷?q{;"|쐡#ڴexΐ*i7\cu#W t_r^9˖۴9KKZh_|/W{yR{=xF(a}Ϻ/F%: DC`[/2M«$H# Dr*OmMO⫯YZ6_7"gYYuMݖ׸qee;w>]pl.طcع7ؖgiUwiiU׫q5լU}Vsk7o NrRrVV]+@cOǢ]%%={_l_xA9*&Ćý>W,xlG~A~MH?`"RnmOk/dBdab+H;eK6}fL"(**E1IV g]\A&QEc @.̍ [gW $Wd p[o_ؾ=豴Q[hifM _as䤤6gV()9~ڵkڝqYuv؝kOzssKjתuvcjTܴ)zU365+^jjJj={ڻo Sdeq,eUb/c3'~~p0j bK1\ Mh8j1T-A (/C~AOe+w:M>oIZ*bف2'1 kт9Rd u"%p^A ƕd(bJ2*cଳNzjҤ=i֬s l'M9$hܨmoب٨Q}P'ث?,ge9& ,]D 6=>o="T 9 ~R2wmٔYDM*=}⁈*H40I&hpiTx<"?) ·=-XJ]u1-7(֍Uur"ehFx/JP%5ìpwdqdw5FKJӼڗcʒu"x:Ln!&r);~g<ԌUg()ewJJJ*#٬Sa@?)6x!"iV1yrٍR~1 iZhų#z b:$U.};Q*LQDզ G^D1h*RRG2O)$);V%c4~Ey6]]rt\V?:Ĩ I)O9}򲳲 `ljdv"ɁØHN<V<5t?1ء^X2+G$ʊbkspw,/UQ(W\R{URiq=kLԮg=$VGv@򧭬yVGH14 4gҜ|0U{S^PHd X#Z,T3rq4Hy9װ8=1Q1I%!;::YH@ `zC;^YM9YW#I~y"Ӊ\34+z'n®Ԣz[FSۢxn9ʯ](1 ~Ih,P#d@ GNp>-](9s@"$\ AMϣDDIV˞>8d~&w#JK9+7OP* Bcރz|5,'"=H#ˆv^Vixt1<2k#;.=-BZ? 9H#[$*.)bX͆<x X8y^4 ÊB]B-)&^DH-1$uv߾E&.@'܆mbi:c bָF딌j {p%cfwAJD19(?8Uqn 3I?3 VTLz*\B l?7v6G)I2!  ]r_2%0%kَ"- /1 MW!4HDudO$@ݣ* TI8mH0$hDɈ @`dymcO $6CЦBBre>rePrF ORȈpG#^pSWozz4˻kF-Xw t@@G :=FOvvZ ~rfe$T_$KA0F[!d8Sq#1Vȋ*؃L;Y5WH9 !/>w !#eX%a.rWBDAf$n>|;Zh&⠴"f`tR9P bi%烔fDt6I{+۩{rhOύH wZsN ƞ@E J.Z(ʀW  tԷ![1u| %3eXTEdW έ l )Ra LOBOCh,·1p HĐ) rq:#?xuCGZ(29H|m4Zd,E]Qy(n$0e~?nwL.Bhkq ]|CncK/z6Tpٸl ~wQ/&=#ƩkDɎX<>{3XOOz8:X|a%H FnG5`-)N(5p,*+` cYaFU/%׎F抸o@Q|'#˔CŰsѡ*!D3V:|Qwb"L w6?ʾN$oHѻICdZ%sX%0|F $u)CSa݀zB=' W dNrIb (l,]S-"ibzW\H;f]');F(?`QR_%@9bU5]5Jt)]8dN. O_VKV 리.H‚!` ndi2 %;k:qg JT[IvU7K'["^ $9YHNIQh>t5EQ?ĈU`bDNg6%!7<&8MpQ pl1Ud!RȐ\fvyHX_K=Ƒ-;iuN?X;%Ж;yw+qdf $|>#~-Zj*]T|I\[O&覤I&EGMJ¡Q(8IfMI/a8Aj@FoEPhكj(_n(V(+Eg=G;ªV- :v8 =g7f|d|Pl[x լJc\FdFF;Z<((șV'?iFG s2E݈Ln^ÿ0}XDޗFFSN>a$TILd_<:>UOQ5O9z(y_%ZHKCeI mh5k`DA}5bIQXEDHTD'lW#1S%"`hHZ8k8_|:1ߢlfPP92pcƪgJ CEmE|(3U]ᜓ_PӤU[ ݚtFn/)h#vguxS^#e 7 <^Z'S 98f.K+b1֛#=6C._\€t.\ $b3ϿV xRіR`*-MF+H%>| IDAT XֈTMy'Dm3D,De:/rv@4Pc5A2]Rbxnf <aB2∌7Qre&U=x Eg6Z~=vqa) g̴34@VCE魫8 @ fKWze܉TgXȩP4FAo~^U/e.^Ơ#,!fDSnHZ*4grt8W>yDUaHpb$PY J/&!]PUdd2 Gz* h:iIgl@HqŜZyPg<#{A !^U,15,eTR%7DȁōUIB*RsM/m3F[g[અÖ }X s$m| 1(!p*D^*32thFlGԂh[Nˬ ̚ZM,c ̭,؂SK+3* 2'X (icB/Jc(6N $?$rƌ ~ X95ne )XM?f$do4n( dح@C3 m@(ACM-s:'\P{D+BdT.P߰J\#]d,@ )t$NV,r], wIsH̰SKC CsV lЏUis-n&_3 3E *̓$o;͂CNir-"`!Eؑu#%Ȭs:9jC0 eG4 }iR^H I:_Mq$\E8{~2DS)/.N ei>LSd' !4p f%4w:yE+G5n< m(V[" N?"*!/:YCm$ әɖ\p&=[3L>Q~RXeyϛFDCiL(UmW0fFWP׌/(0"MyE[ˆ:Ӊ>z0(GzVU vQq^KEHBG?q2ERY e ?,(,lXLƟW1QTb ~/"7'&T&!!p\o!%41zC<ROebyQ2[432PP0E^xd.9Eqzf—o4,?ꄚe Md~U]䄖$DUwY$"]2輙Qʞ<)GHa tZti?K ! ;bМ?A6;L{37WuLpr06rzW#_30GT*%V75AAGZ rې7WRFEn\SKW]PpB -R14v n ~ ɢ+:=!AX :I"',uK80ñ&ۑfbЊ8Y"k<$r- Vrmyx;m|]!Py8 J*BS@`AVSh[^)MφC!̏UYr = 06d$ITNNL4&".32 CN0\]VB*|_{U;)g Qx i"3ADGawFqu{cFf; ..DF MyJ_YTHK4faDCqBZaŊ0h$.ol_C@Wc+SqC +L+ ]c>!wF%u 7pG/?{sgHHwZ3cf5:C*d||m\U4%L+ hʧ#>ݡ'  gCڭVS7y1Bz PFq"Jj\yA&^# ()G~hC!_d#2^ 3RTa -Yň H5JPH@6&3HY`VIaVq=Er" 'HP!T(1bB@)1cxNFd "ȗ$_0}JuL(LoȰk5`(tm;̘Yќo1{74PP(w[oз Cl`!$V^Xa+(3<r4mx~yȇW$ς KDOlȋDYmOCHM*6#Py P/Ht)k;jg|] |&ʥi|7;Ӊ@s U rpt/$z =aFw 'c@ѰWY\EI=t5-?Ȭ>ת8< xb3rwafcs, / Oŷw=hp[- XC TT4ب ME_7.u#UH1ʧ_j0`AV\Av M%~KA B0/TȫKyv,澯 =1I ijCF9&U aQ䚡KL2b"xk!u Zʌ1c8# 9\WnC(`w5N\2`@b1.{ّo)Aŗ\ ~T&$>-f*wqI;F:bQ`PEH{-=x0%x Vl@  M#%20T\8BBWpEn /\BBeFFp|jHT)5_A Mx'!ٹ #D B<ͪ`ȴqBPUdR)DE-;2I֑?N|0Pxu xGT慬uYfNdGG$?#+qm;FMÒ̞~I`1UF2؆D.dT s\qNd UFV@cD(`]Óg'Of|%ޕntHoC0HENCyg*ۈ:M(@Z€4x6ҮxHi:;՗)_6Uˆ8 0af6ƫ}b?i~Y-F*ɪQ~ TM{/VAE `@\?N"IoOƑ"™'1LDnl %& odAkD5 i&v(axwB0fZ)VLdBZ34UsMsy5k&e4u"K_5QQ)-.-m{MxL]jFH݂NP8 4(5V dCJC܃ B/OQE:#/A[l;ѭ/3fJ0cZkC&DƲw9q)AdyEJ!ǞW+WVT&7D—-*PIEKwʜѡD u_O oP2 ]5j&y΢ HQ`cQ(sh1bk}aR%;%EBCzEf'B,[E.݇"Ϣ.`^$*Ne0MQI 'at̹$#GNɤz"DI.PiBT,e U[A :"$I%8|)PEDdp!~%&d몋$ L`QE&%ک@JOB0anj!k V7;}GH' $^( w0*H6 d 3Q$@ Ҋ `nFV|Ȧ8F!Oacy'W ɤIhҏoJuȇ̪fWW9E%=H9NɺҹQ TS_LzMQNä`U|f WVǨ]]N#JzTeX'QtPև8c bm TqI.iH JxDsێMv6%>j$7c3W߷t*33 yc2|{+i\)!{ EL M3NMbLIn뚙ٔb]v+[4,jA3<j@4,DR;7Q5:N!T<*B4F[h9eh8V $A ;S*~XNv&0'0/ǓE @u1Y.TMb@1Wi/qlX$Ub$L$ ]) V 5BSЂBf+sOLj5 OzXE/Tl6{Fn|!+s[: ۝N:'48yk \+Ol6ڝN݆5E,O#?se< VfY#5N]B ={i~fuؿdNl(Tb}x4S n# & 8m/r+b .k>HJ |80iߠ`.mD:ٹG~Zhd+ʆ Jɯ,(WF|,cPH%t S3Hgiv񫯟,4韲W}ҵ τjA+CAelmko6aɕlb #ީ#%eRe[OLD4h{?y VFDA'0H3f]םGBV<Ies &[%*}FB&@N.Ĥg]}i4}W1PNqt6/mfjgN2z΁LND#Ixf tģ\~MEp:6-I9m׹1%S.k۬] Wg9˪t8I #|n1 <)J1qC=6R*;uO2tT7q1R7@+h8Lsч@Ƙ2:'U>; 4SR߀ - p6X<2.N_N"(n;e5B8dSytqm::c? hR9bڇad,U朙.#r{5&2&̟fJDqx 6 #˥CzwEمUlIEAfuSqںPDn {z϶%aTf{ʼn<ƀ:BL>5953sG(N{ppP-re^hdM($uR q b g HX19!'NѼɶ6BkW^O|ib?>yp /0TONOv LzFCYWS_M s:Ov5 LOMM  =0֗cP\ .^G ^JBFd/\Ǫ6tXe1aSki}g TӈQiPp֓?6Aww6\| Nl6+{?} Tj':T/޾h*\L*6{3?}h̿w;@2B٦>-]z~FY]^Y"h5[D@bCfHZ"ހʁ.U#L7V @(fs``ۛs+|7< VB`W&~HU\G Kxߧ)nzC\f3d,{esS6R̾Bף٧ _IDAT>ˢ,K>Z0RWPvgzi[Q?6ЋJEf-P~ w4uʠ Mdp{93y/֌A`v{uXK0.m I}uW#zÇ'`p "NNN tz%<.e pn799 VkO~򚣬ddf`4Z@Iͦ~aoރj535FeXsNUjyHS7^_Y4%(J}S7lM[.=|ܲc;vx;߷oc3(K*zsJr'>tl o̚Y#[fQ'@OX}{oM{F #]כ&G/r6dIȓ$lRQyTYD72~Su")Pb^*|sI= ]^x-7]<8@|^d󱕒LU:ɔ ?vէ% JO~;.x݋^~hzz7/X0[xk?Ν?ҋ.pԚ*$Ƿ*D #A 'l?G>r]d.Z4Y}F駝)'?l%03BaD3t ICEqe£z4 ;K$S_e Vu KEY&g[~sJO޽ӎ[HE3.>o d*~35w##}[n߾%/~E ?Zxsں,G98АO  ۱xn<18J$/IF?;,[%K۷{;w8 m>W wڹbf4* +?܇6kH^k9'A)Ζ`{2W#*cq*C|DLf0fɹl˂ecMkkHo4eq}j)%;^*$Nz@ƒw|#;wC.3x;7:::2o8}>sFY'GJS&|[EL_nwtߞq?E'&NMO7,Z mYo6][OZV[mU|g@dqmA 1TMs`{za%0F{f1m @.,M>$-C$/A)܅nQN?lps[޵~=W>ϷwHeYHb2}勿|u}+^ۿ׿&>zy,Y:!T?KoatJ"%d'gY^Y&'迿>zx-7mu/z%)U>; }K'aA-?y<7m޸iq믿NLM6~6W~f߹I/PVd>~_KxA stvI DX{ֹ眽v({88qpe333ws]߽sieKE1d$)4*d0t NVt.VcH6D&Z+APy9۬Bj1wǟeZUӐ 󡚉*ҽ$QA!AH͑Q ^y`xx3t.\n J/s߂2ꕺwI5,cG~toj[.f98]]% d@Iz^j5:|}eQ;Nuۭ7x,%gu h/EJrX1v`j{9?kk򤕈l4s45Zdl{I"9ULN燃>_6 A~Kny#@":J- bh#*(X  vʂ:fn5;, dYBi  eQt-MQiӇvnuR-n\iT+K6 ${F:|ȏp‚V3ISN>jLΊ+BE)Xؠ6 @Śݴz`ghkZ:P : BZN)`ch ¶ѻo;BcS@kh&TE[Nmu:X'eYﴆlU/˂t䯟3U]p3Ly5dz]ՈQI+!BDj%2=`$ ZԴq7#w= !DM&Hi-z~yGZ=|/iȕiiv7_Z{֓65"/hB b'&Z< < G*%tg_p%ʏ7Hg~BE Ckl'Z%J1Tv-ox[um<-mJ,T@ѹgWML8k pşTұێ/ȓi=ݦK10 0A)0N|Wׅ菹~tpj@;te_*g,@8rMF* 8H`5@(?=qhwֈ%9wRP7^%x&sI= T'^sP5a RR e5lGPH؞' ${y@RQ+Ur*Vzp+C˟j0IT$ŌhTa-ΥIʑ{CwuE`z($NsL2> 2$/x 5wgk*6CJkvr4to)78D(]eP삨]>a)Do!=CmDR5z :O0K]NXجPM+ .rQ쁍f_=ɠ" <qF(!*˞cV!ZQA@@eDl䀙.Z i߰s $F~KLc.N';F!(Tay9v˫XDuWV6S& aTj $#0Csuenl$CJ7iv, !bT*Q_]3R%FN5]cD ?(^A. ĉn !'th(4eZ|"!Fkh ^M|thQse̕L&҇N}flΕ'Xʒ=4 =Jj̕/h%1IENDB`aroundme_0_4_0/asset/user/1_DSCF0001354.jpg 777 0 0 26262 10157616233 13136 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?qN O O ^ӂ0 ZP`JvxZxZ%<'H"KTiv"-Ի*Ph-Ի*]6{RQb_/ڬJ.q8D*^i6GE'KeBFi6E+gOjB(.`2ҚEM@VV+HV++E h2S;I\Wуqޡ;(ـZP ZpZӂԁ)iZpZ-8%F N @ S2*\s9GZ0\<0?=6s'Lʜ۹h%F#jm.#ǵvRѴ(S jڗp[ijʩw8h^\Lƕm UWFʱeWIytWMVJnjW+IڬbV)Sl)@ *RR̍Aڴ- qVR7D?jx̯F}k8XMv/sU&u"-yb<*8[vz\['!"e-Pq0/g[\zҍzWBiFgOl qNٌN OB$ vz9r2s'p\`i_Z(M7߁i=Yi9zM6\ |Rַ3"FMO{QpVz|ukGT1sY_aju1vlzvABwP;HYX*p+MhܦLS9X:!{gڡ@1"T%n-0&-RKzbj9NݎTҍ&.ȏ \$u os^VDQdU 8?Һ/ںjcU.m i6կ*s; Rl{G&EM]Z})M+c4Y)M)EPyf*)\,V1QSEcG Ѱfm֎>e,W[(%@hn9+U'F8' t,Ope ݼmi{q2犣 a=E NÏRD#`j~X)u*#mrZ+@a |[yk(:g5RIK %cl|g+#R{(9#/"yp+c5z·n>O3\ynzeX( ?<5yE͸ZIH y"\qZ6T>iVKgw:B%h9_L ÚlP-QАNkZXBb ԗ26Rlx{HE"K}|Ѵ }CN?JS8퇰5.#J9M}mlK/{Fے@P93L[Ns޼XU8in;i @"Rn쏔`f3KxaKc9EUW;z@]T^N3Q,zog4.r;V>&K4@yM9f!R5kCHuKiP_3HEsO \9Hz瞕a|)jX=;)yO;$ mm`V΃Oos*^ĨYzW(;6*^uyW=if Ȋ_F9< WW+exDFE zf80 []4ΙVcF A}IX%McI$Ć hH GL7NjG[˼lgUӼ>ֈ?vY y#@Yx/ 2sp:XtyxoYRdA9n;Wkg^n*Pg2x+}*&]0<_?ʥZqCzeG\)Vs3Q+[O=ZFǭZ_mR9B^ՊGB*rfQUf˓$kEjf n߃J|M} ̟hBUۡ.~5ms$}*unl2 CZnzʞe+,$ [*#U 02$r2=5ȵȑ1Wc=:֤]Z8O㑃Zɚq{lDY '.4!ThnPkS;~4ф54Qm񫚞Y2e]2bW+wlQFNbgPhdC(?R޶574v+Ndq[\}Z$a|yQW^3MPBf8;ـ>VbD3@?\SwKvzjZW Frǵ`[j}Χ2jF'ˇ\1/ۡ\T3xbԚ)xa}*I4wwKqt@imjѝAHE0͸ҫii[MpgF\+xRgX9U?{ZxDGf0[8qsBzK]l[/vwG?phGpT|q6bÀz;ٳFwR(J'j$<=EGF*Hl1b7ҩHJ(h[W)#/vsU?lD?cM+015''nJU18ɩ$Bd Sϧ5;[D~dQ̴֦Նs$p1vӠ{{qw#=qVu9aKO=K^ǥm_XZŪ\47+@)749Ym%eP }99=hl!V6)"p#yQ៛ޕ&xYC=}iJ7*JMmDVxO8`qFv"fBHH'xM?̟b݋N-FX1-S\H;]MsW58HFUf2(!FIy^}|=2 ba%a#[0-FIҲR(3oY CKCxRȽˣţz+}ZK6t+V" r>_ߜWCuCncc.Q OX3t4x3)Dm9v{3uowfp 2 qJY}*'մuwcr?3\;qq,A^@RckQJE=]s"ݴmmMXzhOygnJ,VUP< \P\^vB n<׌d$HĦwh$>VXs.uP 'ևr!'hv ׳Ern<ެn8Lה^1zz֒4~db3]7[Fd薯sF$- U3j rG*a6jO-{=mSO{kH2;@8G4q࿠,ޚXg9Z[Kwd1(u?__ƊӚ( i3Wi][O9u+?cQ@ ONx8⼳Z8THo_Jri==QcA:=H[? וԙ,l@?4EeMn d1s}^ɵX!Lzn4'ۻX F?w^Pn'54W<隆l˫^@'WIG3jKb#a鎘Uwz-7m덶&6{ڟM,luq>/cG=̌ ,DI?o\ ˱ R[I%[pCI;$T'fX<Qcwz` ׏x/P=Υq4 8eX``$lN0c&%NCEr׍j%.n7mRU@' nu5a 9^R5X8# sϯZ z;CkΈf k;33\.|FDLcp]8>YiV*Huh~/O6fuU ot84n+r :soŶzoVWk_g׊K(s~ULgh+5 [W! 7bG`;} I8 MyR~"p^sZYMY:e펕mvQ YV9'k2Bwu_X*_#$k$}}Ǩu$r͌Gt[={}RmRi׎I rKsêwyFzxHVlм֬ Y& U-EEeT6ݒNcf.*tqEmb 9 `RZ߃ u% XLJ4P30Io<5΍~tN{*}eק91fxoYq) ZF?kS{*wt{nd*@ l Cv5}uDYrۜӢݍCsYB;JLu$Pis*gR/T]:r[(׆oÄɩ>\9o0<Zޮsǭdi$Z;#jDW4X3WkL,\*{R:pir\hEL#aO̸;y3ֺ!RcFK]oB_0 sjo)H4N1qR{H@(A0hkC|N:3FTsEUUbH]z߳ޔ UC)>f5ʁ'J"=5'`aK2>`ɢ8)Îǿ3޵Js)24[><`NҞ@*bx~S1 ڔ`y'_Jv2(HL+ʐÑ4RZ`0FPGBsEFpi\Sԟ{ev[ȦV|j RIv Hra4F + 2 KO*UH(}8ù\l RQ0I0rUq&b H=jF1L#+ 1h_ p?:9FNNTb)"Vi V :rhBE&^9zE2GzRQLI>i>i#RC{lHrQE J{EFihƩ?7=Oj(M=S?E mSE%! Cފ(ңMR(xsESaroundme_0_4_0/asset/user/1_DSCF0002425.jpg 777 0 0 23733 10157616251 13136 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?TEĚPXu:\sariS mc "I(HP$hG`1[P(6ٍzI %IB Zve.ʔ-8% Np_`VDbh+y~Oǥ\,D".vѶ#!Zm.`Aڍ>6{pj6{TERyt:P&ڛP%) Ti i6i %ijr´ 1Z(gͶ+XAɩxCi0= T#IȊUGXa1YBIݞy8+u$:MJ7lPCAR_ 4_il)nkQJޛnaQZV"p^7nɍ6F\2d0 jzSm)piiBimMѲlR@mmK(K)6i6;hSm@S@S4(jIRi6Ս+'7eY4JX1V3 $2u3$qG*.h9֯X1}*mN@ڥZ%clΦŭIe<F$k\ײ9.ۻ"p XZ0ᱞF{PbH;X~Q֐FSSMuBSgҦ. ]"pRm&O.qRyt]"=ivT?j]6Th@SmmCѲF." mO.o&jˤ)@`yf RFN{TS--#?AXQ&`YT_¹1_*6MMfmPoF7K#=V}+zus9EدmXғ>w&rҵk'/ٽHt>VSIp;f;CeRTt⢸V~91 둫ݿf3"2F?ƒsߙy7&Sٵ{(q #1=ATcO awO#`T8{\z^ggEW']Ƒ{$hќd+ZD;NN*O (s:ω5 >xHHHIesT%%?l) ~DucҝkѺĖ$#è7jFܨ慈'o:lTfLH ?\s/9leg?v~AF+RWk0%ib @`MW4&,+zT*eoK^9duviM)PD;=/S`Ѵֆd^]/RJ!(= Mڗa= G&jJO/ڋM&ʲR$u4\,s^#fU|+23Yn$9NHSr3Xv+2F,njtQW:ʑ:Mj7n +_-e,:9c#d$tWe4!'ڟ3yQ3Q]J ㊻Vv7$˽S}vև$o[|ق8#ް4Jp򩻱U@< =ױM-!h%W{QSpۯYZmE"`,*.=XIʘS"84\H o"6tP;4ZϚs].vc>BzUk 2i5qlxq)ql `N7 h1#QXeD 6x\0 L+A4!c>=Z+DF]Eqr@^m#cb [ X'A\mæO,pKK8^[hŻj N=i$`kZUڐÕYӠ$o+_r/#8es^ߍmHBGoqu˩$q3Uv. 13`OZoآtS=*30WTO/ hC; ƧsSVQI嗏_+.$I[y7~?IשܥBav1qnȨ vr=D6;,X2G:\V{}Bi!!ՎANk˘೺4G,\ctaȓ9;{~5^].sH9EۍNW2Onю(19E bR-ڐuL ќiʌ84ݧ=) vix>| ,=1MYF)Z,.ֺ9 ??2Q\IGLTrܮc5&][h3d[ um<;% NG5̒$Y6c[8Ld_ZmT~0b-gl +Doa7⺫Y5:ťi- q &*%@5]4wvh1s߯F5!C<Qx ~ocVŴ:4s(FCn \NOϮg?,hDq<2OJ}毩[OG U$r=WOm0ǴTLd+J`628e97]ʩJ\dz?Jw#5Mך((8Ebϰ-Id czV (~ݮ5 ܐc ~'*֪!ՐAC($ex_/uFеw5ĭ 6uk,;O?N¨Atb6G?*X-|#^pWG\4mD|1Pִ&p{V:\4 gQ+r[Fy1+UƸKKqۻ&$MpK9vpO"b>*my9OCU&XyI-FT[9 r8^Oy~Z==l;p ݌j5CϽ1$m98B E9F}33#4Y8WI#u ۡ:Ohf511؜Kˑ1YD $`n$IxH,˶-LV =jFfl{[$J { ~.SsZ2٩5l USO#:oϷb쬪w61V.Q[~elz23^"˷x{SfE U_p>5*-\|sL*k+X^VXn u8?zM["HRHEnnzc{?iiѱH Jޭ,\3q}i($7R[D{m=Ӄ)u%fW8ߵWSmGp dwcxnyu[;/vON`UDž.$f#`0?0-9ZHol (C>q]^gHmaX/!ZSV5QEfkleۂ}*5K(U(?JDZ^38u@8 }OB :>PYC*,;W<Kv%@ʪ*3QZ8.,'%΃Pm4AC7$}GptOo@K.U#y b91H,UiXJ?^+vafE}m^MD,嶄PW.Լ;Ιk{b$qP̚G4<v!ҤmRA$f6 Ă::ҲS1UH.w̚1*Qdcʸ{7R)SO_hMB(JT#X%O)1Dڔ GR=?J4m%rw_rA [I,oӖP2,{d0wc\lKk¨Q)XcTqTgs/Smo1P4oʌOdUXd#c@'nð41#YU:qקnRX1uDV=HO#rF`x|z /Pf\3 2d$62|N5xa29f h0[6I[ !n zgj\9)KS+rܶ}N)?cʹ7VYo#KK,=䑈*^-^ݽ;AxF7𦭭<7_ssSP3̈́LnӟJ=mIV pi:)S(MO9;+-m6 ~cU-rZvi|R~@<Ɏ2:q_*eQfOtY?XgydsvJi3~u5)3B jKf;Ydٍ''# $vsZZB((=1 *Kf?eEJ41<*cv3#'5M-6yŎ}4q_^@J) myAo> $e ;\]qߍ %^jbHԅֲZ>j<{0Z(=/4ly#zVxOZri;dU\kLx? o\}Wۇ‚@0>JvSO1{Dwf~FI=g^3&>n^ ~d&%ΟQqtSՑt?d ;}*~tӫZǝӧ\LTXY=?ALmj<iieÊ^9ζ-^3)֨ [踮adiM.D>cNĭBP}OYZyl֭+Iv ʸo 3ڣLִTC:ؼOm[mt ݺaŵS\T!a~dTD|̾(7doF2NaM 7 Bydx豒CH2{cy>GP.r$~uY5:oOOB"=C0w +3]6tX"1 mI٢*'tvMy Rgc2O=qIL9ɍ5˒3(/g_@xh\~5a(1˯YEwG{>sWΏ}QG=~5s֛ھs[hi}?:ێzbjFz/Hn"fޜQh ٣K}:OGE+3A/jѤnb(L6QMjO=AsJ1cC_Έ*TMOέg=+9{U=Iz~obR~ts֍ DnL[[{Ta} <9oʴN5Ԍ/9vk+(jRWJnI󇡤ݣo;}(2g7cIAEb/bz(1 994QLD@>(%Tf* N=袐 ~!QKZ(zү4QI<ӐsSRv@ ( =hEQRq֊*R'$QE $o)S`EHҊ(aroundme_0_4_0/asset/user/1_DSCF0003753.jpg 777 0 0 50624 10157616263 13145 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222u" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?B(ʹ f]mmPBъx1F)ʹP6Ѷ1@ F)3mi40-[m8-˅_9N$&˧V!b=b61M;Td(TFkB]BdrOGW-|Li+u:haUFw?HђIȏ9ՏsUQ4FMW<(qZ‘Zb~g>~'.u4F0P\"$%Lz}?/~ɯ᱐d ); !7 x,=]N,u@7²l#2vrO]'!HGr>ʬ,J1Fteѵ.=sEoYFsQSR< >phZ\SKn)qN.(R1Oh f1~(7mP1F9P1Kv\P1]܏[+՛Υ :.ƌb9mtEB[#(OLGp8F1/vv·LѴ/|ҧ+˜g#`qZZp,>BQ=}}f[[EkLOq}?j hv m~]˨t:0!SF=>Sڤ:2G:z" h\b{w>s>`8li $Ab+qaGߧAm)J 1囎)rNOLH0.#zM566c3m"< ewU5z͎4S@b1Ebu-WRNk돔c@;R;b v)qL.7mf(?mbQf(?hw*Mlv8[BJns_j8;u6Aix|3Xtޱ3{zU35KnWi3 en*ŠSU6RO R_V|\SSӀ3Q~61K~(@ F*Mm⟶Q9$,*Ş.fh8*a?=|L(w7WT 壃 {{o֙ h!+m>c?@$?=^ĻUEvZB[٧*>]JYGJi+"eh-!Gَ{CKEo4S?2CV(ǗF]pZ6Q[B=+;bm"YA'~zu㊫u[ DD.@co oMO~6.xt4IsL&=v'`Guĺm$>޸'s{Wi4H-׽q͵ "ΘXd?*l -wn85U}7chooΧ *"ۼ v+aKH\4v8v6Lc@v <4W{q {y6`WCmK1EEmIm6҅K~)qLm;1K~66ѶFGu ijtI+b;w <ן5gvODKje9 L }5\.<s߯n$dFYkS؜t^߶q@>ɯ&M[Rv([Ϋ#(?~VhVD=C?sW UBRt~c ?/ʹ[W )_++8<洍br,ib 2_?w2}KYt {Fa޹ZKٝ|#aPϯ'>ռ]ާHm: UA#8䃚R:2S]9dYn&OR~~z(2kwϔBeNK}194@lrgfě֟Oa]58cg˷$}Gԁc ڄem#ݷwa7NXOj©#6FIj4,-+WN?XSBN,AcbS[)OC ~TcHGub O f6ԁiq@RmD!ivԻ=@;hRRO(Zƥk.{S+:,?}hiIi%6F=ꗐ Qg<9 ߷^F+)7hz|,b婱Nb e98Ԟs=ꀚkƃKAuxėœXWzLLnH{gk-c*!wݵw$JTѬ-pSۅ>~wKlYc&j.7M54 :/dǾ{+*Q6~UV:niv/I5CU~,[F̍kp9W9$#V{j{>t2pB8\z{[6.Mtvz;#d {ZhY{T޼U2YfW\%7"6_<+ٴIW̛r0HW6iS‘Ivn*[-z5 MvP q9yLڵ)E{$Ld=dl~6C b;g-yXzsG3nE%"ͥ!4R0e#UơOF@53D4 [q8N{Vwې1Ӝ,:u.c?Mc庁5d.[JJ>ֵmxQZ?S 9R9E2W.z@-JHcvjo]:r?Ӗy&p-/9%Ν$bDo%qQOSTOCu |낪0qҢd8rG^Gk;bKr[ R0 rcqϭW<}?kOrˡ薗yqh ff̌B?#?鬼JExL0r@3 d8jaec QJ?VTsQUN<І_Un.m5cZHtI紺J9W-|DZ\hM|HD}?*0@#kI=MniZ?jƐG"Bp~@*^cd<0,A޹^+kį{8ƒ{"i?30jQyKܔiQ$ߕ`jډqs*ܺhv=܂:3Ut{vP1NO (Vwv}ZS[n߀Y&hS}GUl4ϖ ^} JKI |=G?4=ePkuzZ4q!g(}3ׯc4M֢$8:~$昍m$_ԌvvwRa+nfb: W XKnHvўޚVbmNK[ILF|>OBqװDX]$Vst9^jVE@xT~gkؗ4LO-qp(S*cx3]c^}*mRD7s+x B:Ʈ+ƵpTЋC}7]\)ou+|?y}.XSdO3nef T35O=PEcJtOyntaiWL`(݌Vf?̳=9U=O 0A9ʊ)<Nj/H@zU Fh2-˸)ܣ<{i.dSlF&6bA Wk+3J6_^>LePr;9v!yW#տ&ѧ.QQt}+5-?3|tLc@4}Iğpw E[0%uV'9N1yeOr-T!@ld(ހSw驥ݙ%q I$>WR[ہ-#s;hPz$pKJ6ZYDR,UŸ= QPpjHI"F_.IWcJ"๕-#1gߗ??oS~YxoRR %ZM6Lکd%~2zzq>{ɖNRgv4:X[ U#hlb"9%pe<3.@*=qqҲt8̦D f;8e}zׯz̐hb/Dc@3z.os]`Jy<@} X-i#B1l2:Ú_-BQ$(x#OP1bIh[xqi\6|v-\~uN GmlyRkA}b=ɝ{ :~4۰mzHdSq8ʪ!bEqcxXSHGdky͡@ꡎ `g'vduxUWb~O\ߋ4N5Iv\"p޵TMjCFAS~uI&D"']! Gz_iǒG#HIu2Z2ղ$Ur܂ql]i$*A_0:tm;Eĸg bo g:ߜV ss 48iRPc}ղQ۞mG}5=*_۸9Q*f0%@COPXZZ-SD*+?XˬjJiSwߝg,Mcq^TRв]X.;1.ڔ0;ԓCB16IMلYf*;~m sQ%g+L$_HFBL /1N.X֐дIyۚ蠽x9ؠ(q7tq&M} "%BL}ZC[]&HF yZwwL.nBUAkMB1GA|tgZ:RZʶ @īt]x˧>sfynC0$G5k q:L,$+8!TKtƂ'$ Y`0\ r򨿳r˖ NzN$bĤϔb ߷֏4p>Y|,?J$)+ϋ,%tM""Jɔuu X?*ӳq[jX=emX8|!u.798V<.joòD7H;KZCX$v( +ַ%$\X氖Dm8ɧ50#m~UV+ny죁N8ƊB$6`C߸oҐxr|1@OiFEYp?PյbHm#3X<{VwOSW iZ ^]O ~ =ӏ#unSU -r\pANX~Ug|e$j 𣨓94ld{29e"q#M\M l^x+UYL6-{s[6̨eQy=)(@PsǨcTdbvWǾ[mTUAzU84ﱕqͶu#‹ɜF-Fld_ww#% 7$&(=뺸bf n ҳ3H1t8*\k]3&]ihJ`cZ,myC6kIoo(*@ &m.F%d 3gSy H?0a:E4:geI c &7>2p:Slc{uV/ ZZr89ϥgI.GiS)v9sYY-ȇ[tk5Q%]85Ut˃.D. 9ϹV?:篵KMaY7.qg'V̥M{[lҫXX`h2dm#[v]JFc|CC>tG;~8&N}m}y4ڕe7Q NO8+2mUXGuⱯtxZ7y`xgcUUPG1Fζ"ɓɈyfOUh'SUH{ըmGoV1S]5kǦ)S]To0[Fu@TK~U3t+ķ*ɪ5S( KZBRRQ@XݟPqeju)i 8]@PWWcV&Xvҳ[o(q:cSˢDgpD ;A_uSݤQФFIǯ9~դdR㩼oQ 2 @x&qYHGrdn^V39q9?ʮAՖXGLm.I犤cx{ vח$ETԯE $l8=Fp+QC .6 Ig8 cLD⡗SM%tN_ \]MŲ&mÃk|>慨X&<8XˎɅu VK.6o?; 瑓y&/'?4?^m!8Wݜw=yjdL';r!Xڧ3/d#.v)(Uzr;WV27ũo-VYP3tZ ߊt~-HɪŠIxe8^]2pq\hb I5s>{/嵸sgJ{h#DQh2@\P,@7{P?Ɛjݹ },(⊎I9sE#wNaU FNoO޸OOSjͷ`(#$ Ϩq883 -6Hk4sGZ@lJ͚K3i*n$kQtٜ.H(@3wxmWt_k/)xA5jfmN{aS;NG_9l(Y.8Y"RkW,mUH1mst;_k;"UPTd}znv4fIe nO֒ottEUu#?QU䄷XcN c1?*襘V5Gfa䱰ykUU<܆69iso{c)׭`K&V`F0zW4sngb5} iY } Gq,9h:OyMs $P9ǽoY淉"/ZgTntf\0D?.G< }5[No0*6 gZ J{y'jO7z/q3r7'?d׼`-P7 c`xO*8Sclgǭ9 TK@89B |ю+˸|OF|{.F(ncЅ{⏴g8ھ~Tn?W{(U>GB1^I5WƧ)HwHo u<0nZ ˘]Ѵ`Tߊ?oc{Qxi$]Ā?֫]jzpI0 SO x4i! ;OY" sӾҺ1Q[l)P`cl:aA\d7a%JpOuZ%wv)Ȭ:F rIΟfwI꿯+܆qҳ_0.1#8uSqU^$1ҲBdn*)2xhvˊ.n$ˀGPr:Vll%]JÒPb}id*L=?1'QȈP2ŵ"3QQZ[OhgQ@#ʼnt9;d7B8nGК-.g~=~[WC',3'v@KuF.XpF9Rm9'nm0`x09s/~ܺ! w{uoCjMR^+k&ۀ>GY%(_i'o3|<7y¹'oSJ}w ܩS΁ jg湟 5rewfzrkӣH-UTf:uk|y(7(ɫYM[t*H)<~5QNjs@שT${W4{4ًߦ ɽsRzJO4PW\u\?Y;\=)l 98Y ^oc\hPE\zQT+rO8XN3Z4x lvg*um>}GbMD4M2w1?:0׵tdV[HbEd*sk>xe$̹@ 'jw_vKnޕRtI?[" Mv+/#\ Ƕz8MxK ێp5V#Y Wf9VT-!RBAzsQJncT$4Qc6ׄk.0ɍbr3v]> GG{>nFtUsUo:ivu+\c .ןҲexrCeIT$dK[SQ*?(8 I/3y4qҙBoKqi-¨yˍ0HIÄwr*2zRIF[Xt|ssIiwV $H'SPS@O'ʓXMFxʻKw]zLx |hJ\L8nb{͸dyWOu-*7.'DP$7 uK Z'Dd~PO=*\ ;pvc9[fLʜ.xI=qVtX2<#3d+ϷLuEud<Ŝ5 =.Opy5oԿkKv0YBc. `c;U/(&8-\ޒ Oۀ?-~x-2Q|N:Ԯbi2fN2KE?QWNw|$[3&˄-ztn*Gm`@2`s6q\Hj[epLRG~v[Q ~cKܺ8 zӚꡚbX0\k:wݞ&Te]**}EfӹO4 )eϩTUo F^qHH5V&TN m6Z}q"eO8Ώ*R-[i[qVϜJg  WKY «Hx1OEJNkcw*[+UH8즾,m+<v, wV.vhO孥d7WMqm:h9Ȉ~r1ӊumxRYJ…<3ʺg\$8`H8F┟Su,culxBO7C-d;cխk @E8TQUic4מm!fQ.:=?uؘo1c "|iC*=j)4p~6E5U'I֧"ԍS!&]M'xBPHO'鞼S4Q4[&IZur0g?ʴ-wGAZv֏$(msϖ˟W1vĖ$ QZ۵8oJ܅KoGF3;y胴o?ҟ$BE\k";Lj.o&~0v&.Z2z'{Vf[.e`~qk2qc<ڂvد`w#Έv?Ji 2:=א?qZvЩZ2v)ˆړw*”>faW˷\}N*tuh6ZmA!<~e:M+} 8L(?t G?7OWˉ?ƷKq@!2Wº bIfG3ģ~`d}qCkC:+"Y׶k[?ui+[#$zԪ#j@kRH,$i)skG*YEi4R"BUgN_nG a OH]ŠMkՉMэ-䑍>]JܞOYvJ-Y/G(sڝݷ`z2$?ݫmG݅*P_c5'q\q iҵD" SG(s/o{?::QTGJ _Hcd?*7r¬?)r?@$pQ" JyM%Ugy)ӊ3L<?-hYFɳUd?4E@a$ucKLMǭ4(3n_Γȏ"c<ȥF:*7}i3@؞c'njMvw;{"7ZisL1`j(cBb5Ɇ=ir=j-ԡ.G(#֢ J&)wzq{ @NzRfsvX KU`͞mœT q2=iNMEzTA@}FO@&NM& . zuLcE<74d ɤ,i sgޘM&q@֒}4CL,i `8*"sފ` #*xp'NAH z\yp4SϽ ҝzf}0$ P=hQsKPӇ۳QsKzP54&3{QRN{[0IzQ7'<)7RHE4G4>RbC@ i !<L0OG!(2Oh1E0 i(&;qEPNqKE!wQE0qIC .h i($.JE!=}袀pA( q(Q@ M!`4b)ON8( 'B{ (4QE4?aroundme_0_4_0/asset/user/1_DSCF0004655.jpg 777 0 0 13247 10157616275 13152 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?RmôJʱ1Rb.#+L&"=M)vF@X@F )Be27;.)E-:W B)ah? &8qE1LSb2)1R`RNb<{Q~)1Ea․ w X r;O$`RDM}C.1NRbIw QEA<>BH[S&sR>)JfiZamJԔBE@xբ*}@7Jz MY l6u=﵆QLi(?P)Q.< Sza4\,D.]b 0j}(Xjm?*.!!SJ wi LVE;IB1EaԞʏ3ւA~zi!KILBQKF(RF8QKEv2jhHRE'hS)Ij_d5j4Lˊ'5i{Vl5"4kjr hFV5XeXa0CcgM]"Ø^^AV#`r! R2| 沛жB)䌩 8Vu˅ ϥ&dQ.PMH4LN}QܹQ8"RxjwuI+sO0Qs>ѹqsVS2ݼ#9Vcpj L$gU]Vz6㔭G*,q@uOZcXaʣ6tWBcW{UAG0Xh}Bܒª SLV1%MI;qX4v.yȖϓ>aҳ H|1 GQTnןwCs{Gb*(JLSJCJ7Z)QEw*՗P[ TLaBjYEW|?VYtTQWG\t5h\l!J%KbIc^Jv521"~4^ɾ_%opjƎKt?nZ~`\M =55(NW*Q쵧Ef)-aUSgOΫR lֺ?HYȃhpxk*, uajڊKrE<䎽^Q50!ixWA'}tQI鑶 ׄV|.0} =/kfiOy) ?ɉD{gFCvReGqYw3([,m/bs?yMSͦۺ@GS:v"t֫_I[(* '2Y_l +ǻ^~ ylGSU*}OVTCqIv81Ӎ%0ޖR!bwN?:/P3[SqS84EFSF." `c,S--ĽB{ ?1ܩl]z }nұ5AGKba.* }t.V?Kz:Te}%Gڬb-ek_HPnbN1K5oLtԡ I'隂?8gҫTcFps}^|;#Λb?Go&AnҫDF}HU4m_Ncb7)?lhڔZB4W$'U[[wܭwi~JiXԖªZU*/-K[M4EaJ T9'=9mH%UǛv"rۧ׫x9f_̱id);[ӟ/$֪'륻PۈJ˻ha`Hc3Zz̛+BO>+>ҶB -IovSwg<Ց]OVU~W"b6M1@Ki@"Q@TGTFtD8y4BՃw~]'2بPokyJ1Ұnp?1ܹljKX?9mWSU- X>WC'u?٫k' oV4n=bmplvҜ ؇5cWo=gZC4{ OԈrIn <9 hhڌֲ6sA!ޥG #vtsX˻I֋v^)<ܗIA<`?#h*ЁnՉSKSXSZ ,>"' aỊpT#W#WksnnYЂF؇^Qc/<㣚ࢲ=26 ,exAUЭM6rFJ꿇"ϑ8-JtjZ RsEGy"~E8[]\;y-]L*EE[uE[deGM4%&)iE0(4Bt@t9] @A9a'Ґa7}i]Ph['mw ǸzVχZT5eQȟVĵ_\3MKl ZI?@.  -_Ps:&c(,9'5 ,_\J\-EpXm8 USҴ$t4j"Xc#uvv2B<{0?ЬUYpծu]"Eݳ[O1]VR}Aӿ\Ŕ+š3g# H(O2Z"Wm?YaͽTd"5A,R&YO{vgέ{--=<ݏfܳi̧06z[cNtɦt섊>sH/#$ւI+~$vWROV_Ռ*x*)}U 0 OC572WvV:^$7JhcF8]𾕩_m^ɭ1HB0):x%ֹoo_Χz Uc!߈FVi-4ъ:1-R ESozjG|<%#,4"/>UZК?J^M,'%T ǰ.;ug 8P=jEMw"C|aqN_?PzNT8^d}ʨM-RZnҁvgj4>s_̽%q$k ia^ѝd>&Ɲ} pȑwB^?0ֹ=ij}ff"Ĺ5NOT0'8YU=kxe-B7~"*pqPĉE ;(JJq Hib)qEvP;PkBJa4IC\djx&CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222u" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?fM&8!1Om6ъm1I#FړD{hRmm0"Fڗm&(-G.)1@mJE4G&)1@bmJE!EB=Mdei Ԙ ""(2)1M"#"V"E"+8j\qIvLMܑمM}rYj6%7j<`c gv]8k٢FMmKF6.M0֦V*5{Tf,vqb2TeiF)sKx<c JE{RV3=2y5 GQEbZB;%7gPvJUU)ELWP3< LM4RRb i+$l[/Hb(ZE0!(OcM1J 173޸qktf1K j*;AHu¯rn@xԒLy3)q8^|1me,qƑvp<Jݴ'#F@>s\U+6k|?ݴ.N*Gƻ{IxQ-= z:n ^A sv.o{AYbv8 ~ /3ړ~G`-(P]LC@8)=Fj_+,2VxHZq+ZsX|9 iMm*\vN8؁ASV}Q=e9'bbSLj`Un`X<{|t"jj0hRV$8츫j,8GP#&*U]9 \6Ѷ fN7̧̂mZH7@#ﱱ*9YU;Aȼ{17 `rP\.ĕX4և1Ԋ>ξ\\"i%&s }+SBl|u ʼvhG"+ER2nSTm8*\/gbD?u-I9۷Z`CWiI#2-Zf8|rJGzZb,nc<{Vׇ/?tt(0u+fkg_F8e$f(c@&I5ƽΉ8rQ>g0Ҙ0`*gsF74@ZY\ap/5Y6ΫjvnZ#i֮CdOI$ަN4=2[˓ `}yq8o# \r9c {j6?aUXXMǎp:ҼU=H%y ߴ5P^ͳӷR-u4+{XUv27FW=+?⌹O1?*r}+"iqXtYzAq׸5wjlֆDA=*GG&Oθ+4)դb#i]vOjyzm>kڮzg]FO)ďm75DlX ?5ѕt=wy&XӼzq4njq)>\kpQ?*0ޕWB]6of24r. {[pZ?ʦ3pɎ`IッUK.a~Y&*G|GLmĐ[nyVa)s?T|Jܴ-c)T~%j9-ry&7gkJhݿXOc8W*;?}6"#i9?WC?%^Ƨn`iZhtg+55k;ZMTk>{sRw+Xw>~g d5_HޥhiI7=I^J4CJ].kk2o6qMg*Ҍuܨӌ:MSWӒ, 2{z5|V J㼿%OIVvaiY1w[EH@F𠢓4T-M)Sj%"c<s;kyq 9=Y o~ZGf89=k ةoZ-' | Qޯhng<*Q7CJM):N lLT:8mfGȩ#UnuTkAZQ4,:f#NG Kmey"9SUu%\{#+*<*}n=bhC:` gOb3Q)#W F}rW2T2 ^4Og[@'2"H 3IDmIVbi^@å0GaF>!ie!O>IǚNȽ,Уmy[МVcی~5?Ɔ8BR4a%>`;zdJ%;FɒRhy޻MjZĭ#gçVh=6O0KC'Hv ޣ'҅UQ=*mO@Kz⧾i mޫ-{i{m@sҥIeVDM;r@SU3*,s?,3-w$Ij#x=ic̆H8zJŘYEr?ɧ۽*9Rm'jGbURiȢ2J* Fy'VMNtTϣ,9&1M圱5j #eKʐpk˹vqA݇Q&Kq,ż*= *da#3He$vsߥ3xی{]A*ZwX8Geg5uQN2NjHĜidaq<6IOzDB\>+^9algry$,rI=ֺݥʹ%M||9}U(@ŇsҒ`KP1d\}ċL 3)>4CSlpSY7υUyem{W8m?Vt;P0 <72VԽ*HNu ϯ!MH 'U@*;T Jnw9 }Ҝ *BQI E/˶'GJڕhK9#?Pk6v*XUG,P 1ӡŕ*C1E`y7 hfQ)(hb= ᗉJH-uY6\+״f[ P9c<#\KU;sⶍnUfs .dϥ."YadUJ,h]*X x ;K{ ˨!{i'pq?j*uY\;)?*)~VE+G '&L<{X+GlMpVV iQ%y299u3!#ezO7?'N۫N:> X}’ȯl;sϽ_R$1/„s:#MPM-\j=4;f2ږf^ܞ( -FHszhaf7wLF~XJHq# <s޺=8{:\H5 !Uw,,<;crYdMDFz<=Nj5 .nJL}$`-ҨB<̮rky eE6Ncy8LE!Lz!R>SF  AM+`1:Rͥf`*ьCnTF67\XtdnUkB:|79dF`w03?-ciҝLJhǔJ>w*G'g?Ηp3rtJ"ǟJ 2HY<WG[Ӟ1UY.T⧳R!2OV3ص"A0esbGNj5R7Hx(EI2:s,ěЏzF㧥IiQ J[e✏Ÿc/#ƫqv贫$971ԧeLn ;2r{ g?p~=+cNonb+9xc3cKl`Cc =jhU™I*9NDrݑ]N'wq$A :Y^s+[=- W zJ ˎ1V%GP\[N)!uRN-77]vGoƇ4Ȕ0q'coEb p|n~_ךz Bw.Dfslfi $MW,"d;X]Ūm͆#Th r0HRn NL˂w cQ?cWLer2ys3Dm#l15J5g$wGC7't('zZ) +SEԣcj׈ltm]ehaU KȪ'$Q;~{~T| f>Q'uXU )Q+*dw8kO+sdIV>ԟ5!m}?ac[vGmH@OWOc;q7ڢ@I*qV̧HÕw佒>p+oR#&;nn<mem-KcjL8.p[:snS.7o ҵfn$(D"&Ov-+š~fn|˓3lFW'OIQ0V.1 {XS `qBU}r-.RV $G qsJtM>Il&`Vϸc3.}.>Mlf/5>``^]'V|C{rӃ)8%k NM&0ǽᶍ˖ @sǨkAl-!1Fw)c3?ҦkXqQY4-2}YRI19w\V$r!B;iյVgvN2v EU8 iZCQ$5b7v6>O Dkb>cbs,yJr.4H$muQrUn=~dr[=fT/wqel0>;m0 ݆8&8_sF .?@ ܪ>/X$}Eu)notqDD=j4ԅsϱ9v_JsNG\msGLFs{ BTY1ؒ+#[ƷYGl@a:vصLeLF=1:ɒ=w{z^Bػm) rKRitooȼwuGo2GȬOPܶN ƇOqPF-0[::)hT˰mL12G}@ZnTvmSaۣ`d:,9e # FI[ЌQa} 9h[H]}3LVP*x 9^/~)YIm-R;(~ʮŒ0 b Ҵ"w=>3X)Q:Y,r3߯Zy,sD?@`hPqz2W1IJ=yKjkxXֲMzg{lfd`=+r_hjml|k b{*U/7NĶJ.mƳjVۘ$ei?Ru#{5c='=|i ֓:S1!"&/_^"^,]ͼjYrĞGkXxGK)V>qkbث8V/ '_O@G= O+yC L WCx^Di #q"l1{/O kiԴw(7}ESVܖ<}ko\Qm,mV<'?'Ш\u[M:%gMzZjk4Mw[3!~l_燭_Ehc#g[Cr T6<!p7CQrH1g}u~7QE }?Q#mnBpk@ʛu3҄ʶ4uQ!? VZZR g`*BBsF2[Q c8XDPm1nr~? |wHe@\O==(`TF:+{ 6#$7ֶ,Y乶sByҀ4—bzGxS9[pCYBeb0rO V~ZJc <^GvemځA =gu)Dhpe,ZR˵XWOՊ\hd]4b3MEi&1ni!µS+XJ$3KQ}g{l&ى,ske,\n֞mx蟕 COy1'4X[A i b`?lK`Q 3֣PГ0CFNm'C2?LGԜRЏwАh0zEUy,\)dsW sV[Ig٤B|Sfic>a 4ٰ\$ɒZjVH]ATj!PE#Xj`b[` ;m-W*1Zu$Xu0}dS_ bۏڴ+Zu*8. e ~ù͋K {H=HJN @~O6(z϶ +n۫ VCW$~Bϩ곸iQ-IMNX`#Rq&5ϙ$2*9'tR;k:r~ҷ(:9%Qǔߡ"i*ȢTe9 WZQ4 4>(U U< al=#U!k$}GofD*_ѠJ.(Y-,|R( Vk|j!BL47ZS?#LNKg'޹׸<ox幹^&)XHC!?:MqĊ.Oub:ve2qy+{}QO.u\SaTn.dDc+o V)gq[H cGf#^z΍BYv@}+-R~ b'L pj-.bH~^={Л'үʘ8_Au?o[y jqbkk{e 8bN=rpHthkFvGjVܖrկYHv]ס lcK # >OZǞ=@60fsï4?@,roa$\lfV8fhSNCv9 INBTqbUv>ւxn3/(b;jƓ-c≼!'8NrP~T ܏7=t8c@X=#GJeHnXP3t힌:ASЇCDM4:9:7aN841t+T㞴A, K;X4 GƚC*Xr^i!y_ɨ; ~>ˊ;0"r[)}V^nx5ltֵ\cnE56Rd\E>C)eOsel{$0IЫ.Rv bh.R͟.ۤ/wϏʯ']w\e|ބpm [bOt ,L< 뫛YBDcYN1XeWlyj""2"ƊQ->oڧU!@:cM RX f_pO5NY ֤MX־&^Gkb "LWg$ү4ϴq,;O {6 a VPZ *B=9xnƊz#j4pL\C\Ϸ#sEӭJK-֏&C_~^IS$Les#Yz䌏«Y_eK;f2…FIn,tt/knQPrVu; ,[#R +wl_n\^[]yB$`lu"H2̪w0NQ)ԯq J'scC=bavpzK4*9@UPS[z~ct:tZ|mvgXmQ NqӰ]W8H,Q "2,QiZ=-]jNTf+},퍨`?u3R[ diC:p@}TS s#Fl$,{ɣK$ )g'Z C%ݳOޭͿ/2tQzh]\ {C@᭧]3lcC cp`m1Yd%zp+K}P[\]GgBK2Tۊ5PUiSpqEyC}glяJlttu++Uʿ1,$(<НggPG_4I{}Vg؅tۚiڮ@{Sr$iH$cA1i"7SD0ʲ ʤmr~\J]9ޘdg5An3}.6z,=gp!񬥻~ueog.Lh }ME%?x ̻s튐]@?2ZqUoQNV1[O"-1@JH0#:U+u*Pbq]VFWMĩ?)Lg"ÐBnH+uLiEU;Nv&rBĊ, ĒOAQya~pw"zֆW'ґܟcq#eS@+WyB=pzT /qL-ӌhWGcQw1T.9?AQ)O4;V$7vA:w5(vDGpAu#(#Wm}9RF$uxU6A>#}d(# Kt xPHe'.QxH,Umr@z.#\%B HszgIr$ՔeL݊1t ?7Xô`!W3vq81XN/RQ@?Rx$c>qŽ&$6sQvk\NnzgruWyV2G\FRNb#$w f'X(~`[?թxM`o¬lZݣV2?a*selrlf3FO?UW;(q ~s;QfP7 {ϋT;?5eeϕ tSF,X hFF}*HîqG~`hAbO"YoGgn{gv#1Po縫qDwdIjvz 歼X:hh3$HXOhB=F*`!繨NpHb8dk9&d?0:ՕP= D|Jd.j4s" @V}ۛޘfwxcPOaD!NEF<]Nl֞w =w̍=+)AIFN:pBz[vv#o*R3eJ7+V2ї2!d (N.@vwynj,P!oBةtsj)`mv}z*ܕ%s:pGZx;d#ؚ\s2E`ɗbvGh2?ſ8u01;HE$-3Q [k J!{NX+rzCe< 1*bx *y>3I` JX:(;G@. {zNUhnp)vTiIH6 oZ~)va1ޢa"kw. 9n޵`)I|ЫltVP=-DZE;bT,w֠xcr:٢OqtZ&IH`zoݣ 5=\v. caϵVn{vM![9qr,h>b>#TCNe _,g&HҴ*Bb(d!u)YN8~R{rȦ>K8ppb6@9ƕ;I) ̓Svʁ\rU$wj0[ Om*?1$ TG#Y|2<<0m]۷zqE%I$KRo(@2%<38!zZM Bx O5-Vw5PpjZYT8%ԯœ~4.~s*B4r&R4$l{ҔCPX{vkAQ##j`Hk] !8)ƤgqPnT! g_ZzJ>HHpCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222u" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?o"7}˛1l!\@AȤ"y?J4gR0:VՌH=K ;)Vjt{.cYWGH/YJ?Ogsr.I{gVW0Pp&qRVgr]וa}ج-'RVIV/bUUH#ūMӕR❊1Z bQN.(;bb1Qf(?b1O w$sc W9 /d^vS~ ?^tz 6w_WjOF6m20]_w 'ڿ:KCkZ2cɮAXoՒ1 2wqz}fK&+ǭ*aEGs֜&V <ĉI@I/+P}B\8P_?^KD@Зc ɸ\UO4UFvXy$Ijըb dI#EOpp=HZwZ'.*J>ک\+@EX-u8'4+naz3Np}26ۑH펹W?;5Hb;Gn/4v/O`R\~V=Z֞,n0G>xLDPk24㩄7}\Cr$_T`jlWF' Hv̳:o\]<ws0H[/Aq I$2+5#?(H~)qN.+BbQ@7b1@ 1F(RbX*Oz^c򭽼?܍K7 /ᶓ|e\Vʥ]On];i%f~w)zD"K1@8xJm u#?I?Ҳ}=r著qRצkm1t?O~ #]`hխG Zd BW'9bJn9P8Rᮯ/b?ݕCZaC5چO: }m$9'x :") zA#9ޤg47X'Um w=wc /~٥ =]!lԒI#jWH#yD@hђtmB 7WR8? )+x |RApj-ڝS:~EjhDvڴdL'v5%ʜ^ az5@gi@}qT& EMb캝Iz 0$n:} PUFW#i-Qmэjya wzsN4C~c:8<m#?ul rFyVSUNX +_I_28-9WQU6EKt+_jlRH8EM8$uq5}okӭ-+VY<ռSF+Jǎ&(1 PqF) f(?b0Mz,ɖU>c>/5ȥsbPFOB9q']VūB, Zo i+Rm`jB1徧h֢Hm*<+~DU`g574x5ͺ28qExNkr1`!SɭWj\K$j˶X#Ԁ;/SEd*#5gyO/]K?oƶGg46RMok98=mE(*lzqYn.[0;V ʈg⓲ؚ$3Ysˇ=F?=2r p:U9R(̹A÷>XXxWX !=Vd/ܶҕr+OqaU'ֶ*ķ'm"HT3~Ҋӳ`Mg6iX(W{c`X]1ddH溭4^8馛,1IXԣ~?$?R_Mq8姰ʪW!@WY4k3-'M YV8QpRfIZ:iVbmzVkCUX;p?Z,GC6P?Q]?cS]Xm?bS1RF(K~1Hm)'dT Ji |`D_pJY: k#+'i <=*Λ]LU d~鍀Үz N #x_-=̎͐PW%dr֐4UN@ f:\hGL.!e +WX!Iy+S#Ǘp!ecki5w:Hƒ팟WMut!To9?uv?± "1uy3}hh҆ #=GE[Y$sу]0iψ-G,RnI+$qG5sʴKaQƁt{|`/) zc @B;[(AWz)xfhcI":s64dߚ*wZdncKIb dv}ǮsE QHxmz;f+4CXO=k$ZJ#.q5їalZ e)!hcVhl=V?iP|RܙlVMfbo3;}Ӯb8_WO>gW *G^94iq9Tjbmo @4RNN3>h\P% O1䜀:.-SPI''GOڹrj`j{>CY9R)I]wS\5{{l,IlpC9ԡҬ־eè '׌tקK6j`6G4؎ֽ;6yE"OFw$8kq6҅LBChВ`2+J]!<1?k\țJ$M|xZ-v>$w$[wh )?Ftd9TRHZW7FQyL2ĆL9 ?=k:Sn NՊ^I n+]+ۘ]gcc|.|8|9u:$iv q+C H߹Z oyu @HNxk_*=fԿg\(o]/Ad]TuUڣG]JjHFqpT/!@ *8ci%>ܻ~~|`~)^ƔWP+s$Cv ?01>_t#U nu |a)$իԼtmNpQZI2X B6I4AvpV`y|Tyq>j *[8,%^]6.:OF1mṸII՜1Euݏ`NqDv!AGz)I+`gOJr3\ 510&+GK[[)X? '?=G 7sC:co l5Mr$AoOMhOSP3\71߶ͷF*vA8^p*Ty :le9͹cr>_]vHa91$?5O^ߡG&bAźr= knzδ=NMPg^cE{^Zx,u<qUܵS$eH@+{d y5i8+3gUJMd򷨫pkZpZ\' rT+. #;;cxU[rpM!J$iv#hbH _`@gEywKC߁נxoU-m}Q$Vo. 9YcFpJKb-~9&Jp2+(TSn2pp}Bb?mHi'5RT;I@OW23|ܑ^=ݩKC^_~Qv 1.a"qZ{|nSw1up6^chٟ$kj;'rq<G_9+aic "d>SQycPKw[ ?6zoe?.|UdNx{aFkp#n`s~j gwK{ݑ5x]<Q1¬͸'Ⲿ-8ܩےdcnVXƐʍ0^P%m' NN^kf17<Ռ ;r ?+5f,Z߱>yUԦkۖ/.F7Wg֙?ZMuK֪gl0X\(M; (=kVrDl 89baxOuW$B1GULQ*d^Om٢FI]MfM`jYH_1dcy:(/ hy/@ڢZYA^pmaWiyC >82vܣcqY56[瘬*q޵/a7~x9nYU8WZEP0+rOxDmꪠ|{6u}.ޕ9A&ХcՕ[$LjKL'9V Gѹr+d8$gM^ZXYC&Íx?+7ӈ΍좋S~pϮ;=1Erouqk뀳䴾l #,hQoc̓Ѩ3_IW#aWi$^RʭD22wӅkm8H|ɭ #M'a=)Q̡IqUv7Re 9ϵJҸyr?弟<_ ~Ý;摤q\/F~ _k}f+jW]d%w*zQ21,MX}>+V c(Ă+H`Uqa #s@i}@b f\s?0K 5[FG(Q)=pRU7b{g8Y N1qמҹҦl"&.cG8ۨ~QinArI5|u9u4!75!`)2xf4dW*$*׮J翽DS~|FdL`OSjռp b0o(74`9 ?{&/آ eWw*®_UH?{Ҧ.$hH8Q0 =>4#sWsz"&Q8J hvqW9k.t I,pF' h\›n-㉛bm`AE6rŴL2`R#|,F}!Tdf?Rs EnDaԁMFMBjcky4! ,& ΊUR܁sXxvU(wZX?:Gk31]G>VԛDKG >M5Jn%s@brq+n̞)X-!b[ @yǖ*}Ɵ;VMXʓx9 Vhgٓż@xP)fG\"5 64:SzSFXIk݋}}o5W)+ vivhۓHbdbjBlC))l'yg<&jcxP]}x6ӼPSjW0w} ېA+16yD}@7#ҝ"w>wFwRr~k6-= qI#r)2F2wD̀cQcԕsN9c n@p#<-Cm7ZIہS#3Vrjj[O-hkqZVԥn\0 S5V#gzw էAFg8U_ʰm&n>V,tO=MXq؜N|qixV{yd@21==įŔ偗:X1k Hd(E%[o9+ڊ銹SJ#RIȾ#IMW:IrǕ Eٔ ZVbB>¡+O8QK6qBmGHEǗ3j.Mt/[Fۭ[ՍVW/ԠT1d.?[cER .׵h@$41zW |HS@#aR` d~+yC8=i|j*qB~ƀWN$w"ؑs;Ց$l3" *O,HhcvYdFSҙó.0*Q`նL; 8Ϟ֙S)TG45N05rZ[R2#.ISWd dѴfh91\]z?ƽúͼzR r0?/^_o{5Z>GqxH  V^ \Mf^<'w,b'uHFN$wi%pƯ`y`-} l.61d`רw^Z\;0:;43=ȏqҗ3-D n[5j>lm7l8 W1 G!wŨmxRZ66p| 'WhO|yƙWE mö5gwҟ$ahMFy-  śo=0)ܝY6 l8dA?63Wc'F3R ]I1{sҠ=CS7m*AnHRdmu)wcӯV{I#2̿eOKZ[OiO?, _Q;s7A9MVGCcu*=p#tخXܥdDe\z&gg@TOZFhjDŽ9 u wc^edOs_A13#PgS#[^eLŹ` 1EЮm lJx+o4ws[?J@?CҾ\+Ŷ;C/ \|wSK ֓[)۟Z7G Ѳ+$[6j|a ο\G|Fvvg D'qj9Qp2 1NhqXdNTӚrqfV(X8ccfUG01cMUt4>}vӿcrOq%mHm b?U6w-`w(OPi;zֵnp:g<*e,hԟ){V {E>ժW]XU_l+g"!$dzhe{ͨ]d*]b2@j)a*\ny3^.u1gi!?t7oJS+dfxtX %K[I'kN1sbe,2;Q,s\to3j[U\ S))=8'IǿJH~Фa9 5,'ٌVU[88xVkRqI ȖL\m\|t+2vKuyI gg9~lw5*<,76z>Zv#,qIɧy.g`sY7^}:͌?\dz~]nCfǗɴ7$ra΅77m QᦿI9NvaON/uiy8bzYvN~QG*C3ko#A POZn$Z V|> ژt]qȡavj@Yti(N<`GB3q\[a֮Xqٹ)S0zn5+ eҤ"W@] ~{aqQ<2䕏=*݆۸d%}O8-CKq]ah=&I@T ˕/8%me=Su-v wbYAo!InTǵ&8[L+n,HI*Q5BQP=uL$P1f}*1r;F*yUP:M-I-U ]bzCmAlk٤i?"x29R= QxMn${fx쬥=]4wᕢە<-:A#8 X;RR;N$f|~ҥ[f1") rjXYvI8'dQ<$$KO,uUKBk8 i~NEB:>3i&|sP6-)'i$ƴnb-R廸?!߹5Mi0HzL$hRul8Ϩ&WdzN-Th?+xV gA$ Bv<GZF[tvbJѕ;q53֤In”Tޖ8mm%Tce=;#HUp;rz494˩ j1z]=ʘ>J/2Gv.!zգlvU!pjjw"2c Jǂ8иܮxAmHrIcdp8^UWP~esAx cni-&UO0fAtP3U`eٹ8DKS/#ڣԷOnq$ qƼ> xm_rQ?R|0vG_s6z]=,fV6$ Öp=ꮫ}gf^$40OCӸ\,o!mbfIҫ>"@znm>솱i֥P3#.J.hxĢl1V@{Y[V,Ivdd ? #+?B;L$STq_; db\{ώyBﹹؼb}kO峳)65Lk !h+ҹhBKTXGҶ5A2`Cy?Cm2m{$OL`bizYBLHW?%{V4dfҹF+6Z=P^班AE2Qwcמ+ +T=R}<:Ұ̥{5 $M7Ϸ֗  Ì+޲hP\HeĮ S!R[yidkLUr'GWoMT$gwxn"E,{Pq[DZ@2PG(Tmُ($GnӊʱICPG8,dW'9pCqcA7}ӊ؃vuO3韭g\KvE^rsF9y^^p?c)VeHE!\\"8|.\c~Uq`UB2{U%VKppϸ8 xt8$,]:H"0YcdFy.41SESfωXW.oAPQ*ցXHrc{.,y.$Vl}/n " LpS}W]풌~=!صaw4HlUX t ֲ.C|ҋ ۹1~?֖[1gG{)qzj dp+ZU Bƹ+=E壍I*9`_/i\zX,H_WT!7dOR ~7unD(/[e"Qe9'qg<*Z H,O4 E=^{[ .ɲ% `U1*y@SmsqHX)'TQKOpTVͽ$ٽyK#ܬg855$qhRǒ]"BX#Xn0 GXN2|Q{PuN@rcڸ K}:gh?&0b\Ѿ \de!]n Lj9Ͱ #++̋YV-Կۄ /H?J) HjXn? ZK`A?;LDʫ%+2Ȳ/7NDLmYfW g.NȤ }*'-- ;jObNH$]HE_rƭo Pdz dH <J1x~2|RYǩ\&?wn@WGèQ3Q?4`~4Eݴ3L`s,?uZ$ˏ,?xu|ҝ\>Ԇf_nAW.lƴt1P4c`åĄ'}ւܬ5|agKт@3#o1mnmč Qʣz"f%ʇ(+,oTPY]GNƧM]|9aI$6.<"UfDWyd"M]8Fh.mۂ?S@r=͜mrJ+>n\HrOj/$y`b r1Jɚ1rp$pp{(FwA+h‡_nb?²mRK@͌Sҟ6Ѹ(b} 1[%V099QYIA#HzX}`&@8>,XȨ^(+ZnBJHlx3Hg ?Ψyr!-LqHI\NsUv2|yEarEU~g\^m(`Pt%[l+zU%ÈHUM!ł͔hJTǰ2@*RFyu ךvAyk mHGu". SfXKZ,}ٳGsǑ֊Xz֊adz9F CMp]rܾ֍[wE9q <ۇ{V%0tީZC&^M98UgHA1OS, ; R|]5JJG$XU+}@c˗.DVB*(yRۙT桒H\*t2a"V$U`Uy9"dBo\qCq}e8x1\hhˍ2#jG{qA#I rC}Kс6O?SP]"E}wml%KWco8zF1Ȭ{uh_`Y<؟ϘeNB@t N*$fH*:A,~%B{VHCo@"׈U3'.?:QKCo37`EbyL(uۂ*Xʓ>;"[˹J3M9b[asaAp_R>Li,WN s_lW8/D^Kqqq 5pI'=+8\5e\yLh ']E{bt. a-Ҭl Ag6[8`sOҫC mONp2F>֐kw27kh+"DMaňÕ9Ueimq3lSZ5 ^bec$G! jmb ǹ94q2,HT4崗.̙=h p>UG AjX't֭\ұ Fx],`܈ 2E3&`H)&VyO~F4Y1HAaO,1-"4Of7,",*̠ 3E6զ~ v7Q265Fܹ8l$pF .Fz\?(B;M. :TR,GcE3K6뇝M!f3E4!8j+z/[60Z(sQA&-o!Uu!Z[[af<~c>QABJ 8"#ya`Q@RKF:UE*PƑ5vRz-݂{ELoR(m'I1%X Z(З.@3/] ] `۞(9rR1"Fi$(zQE!].\sUn%ESb.Gpk+h׵A=Ub7sEqcxFིy)uK6Ya g(NEYVV IVxQHXn^Q!=o͕9PORwMhQE8Haroundme_0_4_0/asset/user/1_DSCF0008780.jpg 777 0 0 20476 10157616334 13153 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?)@pmOKmmImb=m6R6+OK#Fړm.mjMh-mvѶ#Fڗmh-bFhmKM6MM.6[i6i6;hRmCmMm !EHVav3m(hʹm6{ivԛivaivԛiv"=mvѶ#KK"KFmjMhѲmjmlvѶI!&ژh mOC5˅U쮠In8F1G:/sKۊMՒBE7mX1Hх9p\&ڛm& Ch IzP8-(Z-1 )vӂaivԛiBӸv"K K].]\vvC>6SmmO6(Em&ʟm&Wjmej7mғJ1RDlY=qfIs)W©a\kѵ?P0CsL.{⸣,$J=]ș*=ce7mCVI1Z)\,4-8-<-<-E˱P.P\,F N Eb ZpJ9[)Bԡ)( StUA-K XyTd]nstAlm,zUcQ)+oe.ʗe.ʾb,E66qXe*}m Fʟo&W lSE) !Z.;-H-fg?lqqs{Hy=mjP2mZb-ҵ6)6q؇m4M Thq ZP dTHn8V<ƼiE4$8G0I\ ՌCx-}[s ň;S乂FP^n' =Oގt>F\Kd>vq'o"2 y4{D]kb c?\Uf!dΧkKO#`k(a 5)^W;!BǡN\V_5 hb `ִ3#tQ,p'wNWRusTv: Rqk I?,g'-#|}\(v')D/e.K1Xcv3N=𨱑PFb$ML,-`uUyYB\qL X""~v|{1峁y@ǹ?Q_ԗQ9ieQ[/gqF/=_\ePFu7Κݱ0|A^H`sҩ "ňa=K*~IE#* UMkTB 3wؖLyUY;|Gʗ{ek|nفDL"IMʪZ"ZaO(8ӵIoܯ*OQwpD+!nsݏjQ@c eGpЅuٹg"瓒7m-\nk:It5h6cO_M$P33%\ym'ܧTOg ;M ҉Ȓ\2i|J2p5LTؕǘ?T?Ү|痩*sRوzZf̑oOM4^qϹO 쮝!`.(@9+El#]Pv9·Τ!5H:{LҤ3€Bu6c4$9unwg;*Xp@v1EA^kf="tRMr Q]ʐ ;Wk'Qp8G;S,n93I$1 nTfQ˸zTO'ow7m2Lt0!<ϞE]B70G9J2Od#%r}#CNbl!r30k[:*t@4PnqoflũʮNV69Zԩie:Qc(~ȏeݜ"ɐgTֽTUW-rWN0DqJwslHɋM?5j==K0ƕt,ƫݭhEd?ZXymo,00U:[ztkөseG8=}q+ /qq,ך ͈2xϽfZLo @Wwq^"v8++@E-Pg 8'oʷZMV})QWSg8y/W!͑ܒ:SΞ3ܹRG3/8>\ȭ8l|+#\ #K uf#r&8植4sO Pgd(֭yܼd&1+gtܶ.mF;3ӚYom $.0YFZT OfPrO? F p#Fnc5iۼLdh$6y?th%&@M2nN/~$d6rC)*dN>[럻ϷjBpjOcUmt?WyחR(JYۨ?Ъp8~`-4| ${Qp3M򭝦z(~F2,K6wƀ 8#Qp %Yࣜ9)>dyS0RI$q ;ܻ #zqy`r2>e@HAΛMݐÌz@?lc抌+>0p{QHe4K t+)FLeF9ɪ*X4OPb3,ъU_܆5*$}i%R _ƈ#W,;rŐAr! Td(\.޽{~t^Y"I7yc%h l)A\;wPջ1@%0ђyԾI,MHtly9}(vraۮB@da"ӿרk6A@$8cdQ7?g8}2b̄HqJ`dFr'i@{l2?E)Sѓ=p]doyz$"U0a?~Zy!O+=nCajW_bc_~Z#RrBǾHIo7#=OI 0a'{ԖcE1?8t%lS;{O,c9y4,)n\H$~FGce݄;Oqɡ( <R@v|ޢt :^P34$άFJvNO"O#ޥ_7sid [rF zIchZYr}:VA YUʣq-R 1RAȢA@sz2ջSYwey S1֩[Fڅ/J$wK0{RpA>ڐZ 3ќM qe`3.T`g=1v֡@ݷ ~~FxdS*"G|.e<푂H |v pzBd!ewXëH4s[f;w3#i Aa'd%[[x-M#7L2g<7 D"ZFgAu·ÑǥcPT?9)UvZ9fTU9Q[3OxL 2c+^C1 Ɗ)vۦBsn58 TzQ@#ͤ[9Im=Y,szMP4ioI3ĺpN}#/t1Hysv(ފ([RK\JY=FF*r8#((Km8( ,8Zlح>wLivLqK" '(A0(ioi'̂m6}h-Ih%vөj*<`t*@srZ|fwێQRF615!gSCe IU I^h cJ䟱gKvA HQT$ո5)J#QQE Pio%w8MEwo{QEg=:$_*&8ES aroundme_0_4_0/asset/user/1_DSCF0017616.jpg 777 0 0 101663 10157506377 13174 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222u" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?V hWO>b"@O7qsPX; ~.N7!8hlcNk{\Be*FGʹ#HV\LbH6}8#Ӗn/b1f-cp=80噗@=ŻFFҸF=oZlS̞aUsوQ?y"OA,RJ"Vu zpd`r"ˬB-=jBʾrGftۆYQv<2g9<[h/ YIh䌆Fn# 'O03)v\JF; 1?ҷt{{ p#U\|L9ix^uM{8ژ*N7>T)ڝIK)b:)l<Ck!h027~F *I듺 ̶ҵPs'R7nt4KH#3VP\$O0n?wp>ՄM.Xԝy\T,W/0N>3ek;-=3؏c´I_XSi>˸uY+{e40u a> бC QEqCzF1io;h:Zetng$({⯔1#@l:1-*:H!cUEF+01NHSY^-[9(L-Ԑqt[n)yUI XJmhPpN?/zf&1 }qʚҮ)AuVgvĖ8>?:ʹ%P̯M7cjw7*  p1{}sUt_L#?ac>S뚍=WU߳Zu3/T#E |G ׹*-4ܼʫӖɬd*YC >>[{o*0p!O| #VdФ!Hbe}#@҅Z8@#'w2 a%vߜc։28/ZGCj,sg\F7LVHƿtnmJG1b3rjrvAvq:Y,Ѣ*K>wЪ\'jzgm&F rO+WZ\m&RCY:7涌I{Qif/ߎF=+^edfMo5+s6Yr:אNrF+gK v@`OJ[#_iHN؟88q۱+$I{/w~WeJ%:w=jG~tj,-'Gjc`s6c'cklflW ga鵿kfT6d^}]9*Aٔ5f&8ic ףt# j ;XNr4Mf966KUt$i*-(r9 CS+s^ NJcrHo,6`v=]eįH*߷oֹ_a4YݼA {s*E0y'ӠYiw4bfEŰ; 'O#WnFWV9$U8lB6 µ,ʠ2G2O&~!IیGV;Z;(+;. Xsu낱qq?QzܺoXԆcq{10cOMѵm7dYK=x~bY@a#%G;qhXiێYXhEFF{sϭhAWzWM ?2"dh8eֽyƞf܂s茨q泅4ے1.;ksa<4VTG`<sץr6w\Z fʓ^V6W2#ך[̈շcq?ʼxZt= FO!Qý$O^ʿmXi?v4d2;c;V.H,h%rn/Nq[v4ʌ<#u#gz;^>e£ e#F#i>qr?Kr_" $v8\fdwqj:ܡB0rO~,O;a}\OA,:ό3(9О? 둝F(>`p2O3^atcG1F1^8n,D мsEg0􂒗%0e1$qp#IJ^y-nhYH8VkVfOD{ h66p[1ݹ'CZ.ۼHP0qj%aU>W#񩭥w- :zz)#K{YY]CQx^? 2$\>*ѷ% ڎ!.ANU=A -6rђB Q~eJ7xltƭ:4/晭?;xhb @+.8?Zi$@~' ?ZlLF78!N?\+ŻKFDI'˪4aֵث3 [oVcb۳ }G5i 3Ts5)a<@D31+Hߙ~PJWL6>|ln,^ OO= ^-eai1x$1I@3 tqk,Gi149< \J%ջgnkv2"288Fk!H#0H%xsU4;K$ܩ sjƟL:O -&Xɧ p*0qsS<XRԆu[x26x n8l|8a=Ψ︃+n?oҵOk-#_iYY3 ARלbrNr9jOd$~R}cZ2:rqMl9ܵL}?]Vp%}QUH/8>]>ۯ8"1jGFk]jA$_# wl Qh+e-Kf%r~ΐG*M$JquhB|̤GOʰOU) lF#d] [Tr}^T |u;1=Igj/k]ZT2FmYZ- mm(w>g]'4>ǧBYS70qfL)ݺn_lcq2Lgۭy3٭ ֒* +$? hixd[e_23Xdd}?xlq\dORx5]1mk6AeCc]W//嶖Rͩʤ{QuOom8e6s[cZpO7+#8 ?]8i"*Jlk,WwA~$zK|BG#29FI+9ɲ b lRgHҧwl<3n 3p9o]zZ\ith>~z׍aWԑ?ֽq仚`Wb> ~ڲo"Ÿvtr?+:Ѯ|x(O^a E.3Gj^є>h4U{IӇ4WE$䞇ⶣpHXaL2I?+ڼqw70-?^[*=p }Y X[zWWILsglvj(v˯͞x9$~urVi.t])>tNCa$=԰F,ʼb qΞtٮ\ |LS+x+͌&M㪩 ׎՗ւ'P\qXĜ[<*a&sn.vO=q뮸ΡX]^ Zf*PYm$qOj/aFK7nFn½NV8 {G[` Ah(e!p;_z,-a p^pW'\ަ,Z$ gpON:t^ ;*}ұSMQzsE9JS*F*Ư_kZji0N8!O#<M\񭥫\kPܕ[*N[/~9ztvȈvZAs韛>u[Fx !j w8G:Wyb1^܆Qu^lQM^e~kH70qxV^c8qxB Huo5śK co$p~kJʔ5Mk˨%nhp;o }+5\ʰ"8-b;G^>Ԥ$G)+.1EvE%qwrI *4{W]b>!Rӣ4 %+4qrFRHDs$ר=͕&Spa؁G ǎ25,v1~yюݝ1Ilm7t=>rO(|U0[ nr$1.`ΦJRA(o?}%X%huh\?nƶ!%_$-@#uz/޽L&31(ݛ[YФ1VR:\UguFtVґސzwWdǑis K&o/v;Mna0{p%'cX6L( @3Zyd76b4i4B(^힀NG^:Wd(˕s=;'mhzvmF|srJ.h́K g<>zv;+-CFC b`v2㎹鎘г|\.$L/+L~ob%)K6R>_W[iW7sl[_. pǞ6`9K3[a019mdܟ^xR bdɄ[V?i6L%;4? h( l z23]O6~T |F7a\V [KNX14 O x&Gܣ8p~􋖱]]ʻǽGwOʂ#/Ң@796۷Yq=V `3&xcsխӓ:)j(5x B1$yِ½;MӚ;k(d1&C~\LIF+k3+0𠨬)m-0ix$:ϽyU*ʥt;8Yjyo4y-;K [Х"A.,B+ieo$1>)vj\s2>nlx2W;6@df&uQvv0l|\@JԌ1i[. $$ çWE8t^XݦH# N $t?ALZDeԐW?'\NQd_,ݢ}MNi 2{ n }3ϋixUH*ư`23tq? Fǜl9>srO³pN"өrw[*"CA99Z9 M,7+0.}|gEhQûsU; /A| ?jrb҉- # 88כAdQg-~g; (p?k.ȎSB c>|kNhm+ `dO3URdݯKȨw"U\5 J8yP6XƘF2s؟Nћ VW@힟zUXǡ㗾*ׅƛr<bB#)So=6y PI_5|ѓ**wGMiu*,`fEB!'uSV[=RoX#d+O] t劖^{+exۑnڡq HodwȥIuN=zk[[=J_%U`*c޸Wc "[EMPX^u3ѡ4z֐nlJ$l1%GG.h 3kϼ imZ|#20[Ki:|,q:(u Q),;*nj6MqN F۸6Uxj{5'yq$gOnq>qz6jAq*+mZ!ѥES( Dz]e^+Ъr~#8[[AECVG%o<`X.uk_kEmZ~$#b0 .3O'VeOz[E4B$a! ' zW`iսiVvOQGw̸o3^T=&fmR6rB;v" 8Pc=N+3vze1F'K<pIzI glL2Ǻjp$)r: [hwVW}w2 @X6H{5r+Y"ç_DXFfyk#:yKQnPP@!Nџ[<\eђ1C(Q -0$w>ݲeBA @O[6w3V5˱ D:}85oGbm"ܫFcPĀ03k}ӹ1Ԗ9׮*-wI*;{]j Iqu=e|N~cزUaKF~y~^㷵Wӭdԯib18f=@Jko%,V= 1TׯjIM\׌]\ADb5 0N9߸E MܪmEw$6@I>o؆U\r?.1iڊvֺVx⓵v2Lk{bљ4E3GָgfwFJJiZ*AJC!B77BrG'$.v0KZ[oӌTy\D@H zU}<BDŽl8dgx!L|'qҮ2ه茮xʱ: W2m*,>⼇^LRY2Up+.I^$?1؞QMRVx l双QӠ=MM[BCo7>v,c8Z?h:#^=DrTֲ|W]x3^RӁ[9[t =сpQ4xƖރii,s88c~htuJ1(]:86YaǮ+QVƿOy5vګv#z%)tҋg%>$RW76ϥtRwrι$ `N?=@xokg- [5A}Q]ˏPw KՆEiNXt]l^5Kvۿ0f\*:΃'pza JE\dsv~4Kr”decћ8F J Ȭֹt];Bnブ"k&?ep!Gp#IpIO'hߧY@f34w;٩jfCG.v[:tXx^mWM*9bt#;@#YԒogbeħJ@m<:u=׹=#> JyFGPAZtEvW̉Zgr8ϧoj i+˙|ۂG=NG^~J(8sGSiwKe-̌Yls];[@;ZǒC|9;w 8w@ M66;_^׺ lMUƎ\_NspWtifrzR՚TG_Oyqd\%#I%Ѝ6Zep.v vdӵkeɊ+v@ͶC#bu~8&Pi~3+@,`v95OmFBc߃ϵCaow[, 27 :(iBn6 Ot,q8ߞk}9Klv#Q;Bp'ԁmGVF0"`dr)qOY478L8VmNиМ#W 3*N0Ԛ驸{|L;C,(aN9ZЊ-#O*<(A,9?iB9"A$䍾ֺ젲_ʅ䅲JyS,E:Q쑇xjm_@%`@޼6D1V#jV{}F[d,lg>i1i6дVۊ 'XZzq!K> y;&]" ǹ׬O-V[ q8`5kxt* #D^H{/Tw+<El92B:vcr%Jݒ:,!K fO}!{g{q\[-sZ:̫$J$89ĸI)'Ӆ'1 mcA \]C}(zyXITG~yvI6{F3Z J\Ջot]#mIc=9%+cn7sR3'8*혶 {h دUi4-I=K+0yzkibHdW0{Ҳ#˹w1) ,_c7gs Z14ue UfǷc }w5͕Ŭ|$k 8ȩKL)5983ְ<5=\g1 F3Yh9"G;_6dmf)ks uC–>+ բ21vs01ۊ}bcEjʥV-@qǵ:Ll|e_N=s<3*|ڧ^]$2n%Z.nNY &idBn6 IuRn2qqL]>]>98glƼa9lWKu%$zrg%6w!ep'\zy/]@H\w+OJY5y4/,hU#۹cfiDz&G g,SLq͆݅D\)Id8'pdǀ^F9u6سO{2o@G^++AхΧck4pwiͶ6l)6K5X1A8$':-7Z3Lnqv~g{Et4ɮ1`(Pf9<~9벆I3 C54G32\~ 2aȥsɑG~4WcUh9oh2!*<'׵̢PreiH!EW!oAӾ1^r*$TUtb˵ໃc{*`."p8Ooʥ@rnÓ8aNEg_\ǘ^#*/D4E-'qUn9}X3Hwa }sⳓbi-b ;1ׂNk ā H1T sv3Ow"OgRHɵ_g=ٸӭH&FnӟUx֌Zw85f|Q2}<ZvNqU 5/#~vr17-yFsnl_K, 6Qqϧ\uܱ=$$;Wq"<1Εx@1#z :Gڤ?ۂz#g5Z=Cԃ<ţݐ=;Tٷgw<3r(S#wgެ:t|cCp)$x,t8 L=Hӯ ȿWvsL~=}/\ FGf+nh#gu4hH.[`u8_Z%YHf qܓMX$m`PRqOG5c5 O6񠰗QUȥ]]{00}+I|}j|䒙" =@*0n1p;H!O\4&UM Kz$]xSJG(ƲD2>eFǨ#{ S-ݘ%~lqׁ\KQoiۥMQcU`gpR98xEjF%BsӰ>Vޗ^h,i9]q* :+Sү5 I!:QҽTH 589*zܺN魬jx !so3\У~+jXWWSU2K!Ln|*: YRX&I9#Q+ή;.&"^8OVTӕI4TPH\gOֺ5q'Aӏ_J$O60B75rQ7J" p~uR7H儽zwa7P{>icӃ]P^E.HErFʏ#?ʱ~X-RdwQ O8Q<>^S]VgY݃ \hj12$M)7-;Sgu^cYc?Oz`Ӭ@# gPMaVWO $o1\դOFW-EEQB9V7Q뗰۴h$[c`h>˚xd˫ۇl`Lkl:G$RE@^@vg|O/in䷱Sbn 9WókZI?sjdVY%DcWpP@PIEtP -Jާ,VO,\nbpVP2p9:kk0i2 #?)*x>ں`VB6kYZw]I)sb6J}x9:tf\I۬{]wHjsuyñٶN@# tz6Y,BxRp87;XB<`wm<Ïojj_$f}iC0xNs[b٥U:=nlX[yt䱼Ve I<E7'ѿ2Cb䁥i$NGNO[vҝBdyF8胁`g>B?z(R1v:kKZ:{ͤ @HUh`à8=^m'#8`kFoDb34qLy^zYԳzSS_4 ~wpY'#!sgָ3 &4gRPܜ>>.fxM6l쑗p==+X*ŴTT^3rߑy<׎x-Gs-^ZY}: Ęu@}O5~ɠ^ht0ݏ{WC}B"-J--Q6pY[\.ED ԎRVY J0ӊ-t>Z2ޮY܉y-;NAYγnm4HCgj2U?l^bMA%oRЅ >!KtXU"e#y<5+1ŧ$[S|R;m'v?ƻ`-M+nA&8֟P |P ҧkwd8Ǹ+Y@2Nr1T`yׯ8nŎx^5Vrd}NDӴ-|idH $5TbI伆<,pov=y֊|B2x#ky|<RF0s+y`WI +0ېNxЀqWRt|>ڽxmJHQ ڪWH跱I2 C < N¼~1TqojwmbkA$w\]\j3@++gQ iOC6X݋Kwi漄`deWk\x{ĖNK6䃜`ІƺE+9׌ mQ̊Sc, Aԭ%Uzts|W{g= A0*6r8Ὁ+v<U@ZFIVU=myh9f(\ױ郓xi4Y-n}GT ֺ(8];YURW7iw3m l ^vVGTm!KOI@$q|+7E[yt x\{t>*kzjYG$eが$ ӊseHܛGԴ_xK{qa1D ,@by=qiZGZfLE޿6W8=tVC,t413[#!$`)ie-o8YT Hnyӭe󻷱ڊ=I [H̢FUc?SqY@](͐tNe -`I`GQqQo3zI=깖uP2HH>eSM;Fw{Xt-;I-J Ƿp.Iy'eEo`I,1*剈g#u'>pDQ'R7H˴ ;FR5m?B`KIV-8&%YO=O|fe{h:p;`e)f@8ڠ8tֵ}&=b7nNq;rv ŨZD/濛us4{۫*<e6Z{_i9y>FA \bEXSӖQbHd=ER3:c8+GMQsA't^2wJݎVkf3[#]!9Ƥ0GFJܞʑ=Egy 2“Bo5nY@y%N_Eg_cCò1 ( IkWOD]"c۝~>Y8"s偎x=)r;1+JqGi)&6kЖA_JAxtVI&/'pc\;zp09WMiwq"F/ש95+ QBA9'יV*,4ll┘QGě9-sac1_ihmHy{$DGZr6y>dՈ5 JymqK58BKrT.r ::Z][,rHLC,GA۰㊩iCR@FGsJguGi,T*0Qp8rp9Ot-0o&:nwt>S8l1ƤgÑڢ+3n$TYX6s b׏=:I%g)۞p鑒84F1+rx8? hsA Z\.~TeaCp@^WX̶EQtdxmc'g2Hz+Xh6VV^V {8N ࣼ;cQv=躅hΗqLдPM.QpC652ۿ߉78=k5߆Y]B%|āa*g8yE(GI99xκK;o}24 Y)G$qJKMMCh$1So|ue`qϰݎ a$*̿7W޼7~eG rCwb>~SУX\os٥ gU?wt+MǧZ^3M788rMzw.,@8tY "7'n0}Mp>9?ꈢX 6=tFs_hַ0JJNsQ;g[{icV LC{d ;^Io$fgnK!#'p<`[ĒZ53m[88ڝejuv>(09 q\FwiZ}zsRD0Q8|.[j$gp{g8QߩWP4)$@*Q64.{hbsRӓ:x8RdE_+tgc9qvYiGTJ3qmMZY.~&ʓ?wІiF" ZDZe^fSK*;H,70x'(͇c{V{h^BEm)  ;Qw)/Nq>18c'24t"m6O^3[T6Uf 1ێ+O " \\w]F=隻l,uk E{`@j0XRN[5mi' mNrr@?.ͬ <ݹN3jE'9'w85OMy76†]M6f";y<=[ Ve[diƲ0?)q|rzWC6~KF,KK 8\6R[w)? =6Ҷ} [ G9#F}SzS7ۘ!cQv`rzp2HUdJ:qt追FuD$N:,"M6+лX J3$4fuxC; %R`Tqߐ=+^Q͖8E A;GOmG֮3HAd/Sjǿ? o뎠<"? YhCqusibcpA6Ȭ*ah_R ?{PPo 3[j -d!mV?0F Tc(k%yViشDbggi1rCGgl;u Z^JYD1Ldҷ 8Ba*=FKVv`u@lA#Eضq$L?pD Pv:~ [.Tp$61xȯȇ6R[G+iQ+AsJ9ͥ;.exálKdI}OJw}wp+,0$w~o7.)#}V)'6!Hrqu9+8kX#`ܞgzZ]oAG op,uc>⹯AkO-b194bWa2()?/AKdžFmY%Cm?uS'tzM޿ַ>pBb6xpr1Hǟ-HOmDi1 SQ݁sOq#B9M{:E\v$nPwjL!8 Xd~7nF\M\wWhGL=s3aV]r;ʂYbmp?]:=.A ypұzr\7ٷLZT\ Ǵz`::/4DYa2^рzq̒\WqO$tue'{8I@$ 瞸uܵAGD[,4>pr >0znMp"wMX ԋsLmm#9<zz~[5a#hҠyG9e[9Wh'3ִ{/iWz}:W>{ 8xIθJυ.?Z҄-ܞx $Ȍ8+u 3- s?S]Mk:H܉tF^3qx+Es{ Ͱx/Z9ecY9ٝ͞KXĀ?z,VmA+8o'dx0׬gw΅#&GY]Ztv*1kFNE̙[,Ii7y\j&o5C/qws³wWY!b&?1-nqTou6yB19'?j]uN$M+=:q\ (8Sj.(H?0+GĺG3e)E2Xǥfx]lGp 2 Yn) ljlFz~u6tdMEm[˔*t=OEsd|bX~Ҟ&xmȥr2 e oJ32)=qڴ8CGȫ߯zyG9_2G;X֮Y#mH9dVm4r#mHOAׯ#2)6rP!=3Tsv/Hb( =6.V+T1NHvK=K#`tHlк+CrI4]=A5|2%͎51"CVv4&@liBK8lK#$g=ZỒ+g0n>GL%Fh<2@W8I=8QK )$1T@%sI^v֢s6dtD@8s"kv:hG'")J;N O5JΖj\OHihɎTUR1=szٴ2Ml5L{Z.?ک8PJӧNb{} QeRxm*1y,rOZr u}WJkU,40aNw:kԴ>D, ԓ6ݭ"(:׫|7 FEͩ/qA߽xnڅ kGb ПDЛvo'w̟dY" rKylhq^4 [Ii io(0>ɯ8- ۼi'bp3;eu~ֺM9.7c}sսKI#Iԧ5#yi$)$>+%͛K6-G*2$tt+(cvl/lt.AU~_R}Fx-2Lm!} ;SR u* _gء9\]W Nj,RzCܑ;h;ިEH%F {U^Cc)%=9jOwni <=]^&K"q$G?+О:=*]:i^2V \(aVH7h#wif<vM Am`L` ʹSֺ T _~jBj>9HRkkfg11̰h+\iHѤiTg=讞t9?֪;מ*Ă "P9R\޸RAn|$u1)ܤ ǿ%gc(_Ui/g@.&sϧzm"8 _U.KZ9 L[{Ԓ@@oV{22eR5ush>+UhE//,>A-MWNU=JE9u%TaM]ӎꞄP\M0VSd__oư_g(ьn\t8!ъ> \'2]4ѬOk)[#l9ӨjOZ9Zz̬LegsL{qz&b?xy J' R ffG#_ir ¤3\"[%fڹŹW\%BOvc%kM|\[>kBG\~(F[Haq㊎G~tAT;'[Z'b 00inKD)'SP=ֹpB 6wMQ[.R`]DcW#M+ۅH䝤p:+KC;Gx\ȩWzuWn<9CVTQHzZ1y`0fGq[Bݪ4Be&Ӵi"|P*řSr_W-,[PG._Cm,F3媒IrfP7`c+q^,eRɵQG9'+G2osr$u"?2 k1j(Np~mඖ]]pGPGPx_] #k6;4LvaJjK 6r?T#oOԧ"6 Y`= u6j^\E!(~S6ƼwdѰa^c%E]7gךqjV4BSJS ؤcׁq5τu+)r:;緊+h] 1!*>d|iL69 5zܒ\Lc8xγPjRKa{rG FZJX/Rk=dP: ky>Jfk.4X㷘KkDowvx 1 )]h4F]G H>U/ZzMDd4OG;[+]tgDots6zj &@H¨ Ai;VZw)&)xih~YQ.ZuHp?ut)mg 6xF958JIzt+ufIZ@$`x(`cSqg֊.xg֥ /bG)܀}H ȷ3cU^mdFI' lH<;~^Dyjxqň㐰$89#W|&ͭ]zVf#;x#YOuo3\Cx"s?tZVo? vOCeX-0_*yvۧUDeuK;[\ C}+82 A8U&DCy $z{(3Э4ikkt.܅s9E'>ZQaƗlOb;K+hE{m cc+ż5k%ώbHv#ryz(+W7sfa]GK+K/̶njPH`z~yb;aqqd~jjQ[Eojזz\DwC1OP;z$=k_:i~c#"S=&ú}֣1tl'wɍg鶾 5H 'кDƶVٴ*J9$ƴ|}=x*b{Lq*9mғg z(t4漶3?5@Fkei68*FcO Q~m2-5;yx T]^7 H{Ŋ&ѡ"\Qy>nOKE5}N>P~[]MHQ=x0ê{m1 uκI!h"r.~q ^;r}QhL"36Ҩ^D֑XQ+r3~9L71ʽQE[B[զ,S 1ռ$:4UF;|V5"@iVk*~(Syw WUJq4K|| }9O.hWwn|3fC泸oO`?SQ8sF)(M_R{4Sw!k?uMGwPn0@Oƻ7]:xf|Ҹ,Τ%ǡ\cҸkϪykk<(,}}8PVbn.qol;WiNKSkLN VG -lIh rX<u3͵yHELZ; 8Oo¯:OmK!b?_H+7?tνs$ѓg X[̷ ONHD%ձ.E Peb6!5a4hc'5RaD,T`Rc#15xxj-#pF@85xH{(Ylq{lR7To$۾'/?s/T缡{qRbke LXn~>s, T~tCIS\#Tv.yA$k[SA#4r|݅eOvkSE-Fy{!Q?P+Ϗ"& OTc5 2tSQlU7Јս2K-F 8 zUP 8'WQ}"V?ZEhTƮuFz9>֯-X_NXK_-X{Ls2HdjfM*\fYdMlSלm &΁U"L*bKƠ1TUWBbz8p&3.>v+*ӫ8cc1jurbv7, Sй 4$Jr+ SD9!qwڨew2v[Y;9A$ĺC1Si?S{x.ѓs2k*{c$VRchǹ}#qj b1OAsg%5"4s֜r=?*qr2}i7`r}f@:T^lc4e,S V#)m 3͎h#'r̒FK394Ygu;'z|0DK;ucҷ9, VVĵz9|Y>9=.[3Fed <Rv(e~TR9 N~4ɹ:MaM@ɪRBZlvP?ʥ-( \nv~ @ue*LH=Kv].yTʸ{e׹o)er>SɮO0x=zVT֣֬X֢#pR1cT|'m3q9p<{QJXRI&ށ׵/QސhƌR}(1HM@&wNhfғs(HW Tb튊 e#S2kT/p9dE*\х=}Ozk7zfHŲ\TPv1aBSEZ33#V#w$"#sEζ:moIL, Fq%!,tVG,IYexbV'CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222o" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( JZJ-BBF㰪^g#BZ=ZO_æW7|7BHƥuu)`Od8\rMmʥhZڟLGORЯ>?4}/k^C[Zi֦Wܠ<IXjqVxW-JHm- `{s$q!by+5Nn{j}=BC=Sgf=#C=S}Я>?4}/hyOФD??_0/hL_Z>D??G!} 3yGgf@ב!} OC=Sgf=#C=Shz} 3yGgffZ>3ŏB,Ec{}%WLπNk_O=t:lxcS0Jtag8M5\q1wMz'z)~OW|4}/kNB>N!IgZ4[F3q|5 5k;hds`s.Mi#-=LRwSa%He]A ((() -Cq2U$&yōpp?yUiT}c^l܅?ֳ+t2rrEYӬQԭ1&zn_ ԀppO\s[>)[~+g" 5I^AESQEQEQEQEQEQEVׅ/6w6aˌZť $"W@rXj76rVWIͷ(8S&?|1YjxsVFm#l|0Sֲ&vrX݌i|s/5m>Pɬc0,cr[nA~Z|&MN짢JZB(aEPEPEPEPEPEPEP:9ҺD\Yjsn1|5Km?[LN[ 'G5E4S%l/֚]{ ]/OҸJn2C:i4pn2LZ_M$e]z2J* Yz>oV Mvֹ ]Wėv^©h}yiz(&j ۸幕5,I)&DM>6NgU%K/7|,3T7QEhhzquK?A/SR{ zfف9k'5=@j~ N!߲!"𿠬RzQL((((((((\G6 ~GNI9Db2`%ݻ^Om {PEjm 8'dw^!~}:X%dG *A .s?w+n EPbIR%D# G|Eb֧ArYR$gTK Z|M4*!ǜ^iZ 3ۏI=<נˆ?7]߁4nhq4>AuCuG({/iw<4W‡uCuG4{եZA?TƒTVsƒT„T^=cBÌXf1ݑ`=pyktτچa5xY3,oPy~*Ɯ%+[s&N?By~*?By~*ۚ=pu u6,DKO-žv+e^(̛s{f'%sj$ܙbZ*MƟk[XŚKX߻[]Z]Ϟ݀9Vς;aYkqwmǶ*z WP+mPp]"QF81۟JI5ufBI&@?jtIGnf`449Xjh:rk[AS+݃sނ?YvҌȸgq_r+е59om4Lp >HETy}6OjXivdo{IG$EG2-%-dEPEPIKI@Xntav#HUһ3`S]z%.l-+(w J:KwyKIpTxwKS{̻vnL>gI9wUtOBgytZ6Ar9FOPxw6;8n,n⹸$`21CAӵ[+ZImJV:>xWVѴ%tP FH48it+ ](VDvéW2B oU =k#o>evH5~Š(EPEPEP66ҹ}x|I69͡AAp=##wWչK̏KnTOQuPop%Q“7^O5jGR;o-. }`~5-Ko8Ue\'ԃAƼu h~y9۷8Jxݻ.o>asip?1Uh:徽`v D)&t.Ж+fVPȪOT9=:viXivbHI!rYrMpk@HEVC?aroundme_0_4_0/asset/user/1_p395373reg810.jpg 777 0 0 25147 10157616166 13554 0JFIFddDucky2Adobed         #"""#''''''''''     !! !!''''''''''"!1AQa"q2BRbr#3C$Sc4d%&!1AQaq"2BRbr#ᒢ$C3 ?(((((dSP̪ 1 dS$sUc4pt/n'I_Up>{9NDC:bI"MO f]]5`P=7?u3_ge4)Vf\9߹ RSOi>.QF=F~UO^[}:G!RtgV^bIpOg#5HmWUF^"T/%'^ZVRM4^~SUh?q6&{on #J@ӮCy*38gc*^eomZ}TV[m#Go,{zSB&{C#HO~]G(SMR~SoN[zF}sx4!(Su+PAim=AS-)4y"vQ!+Vv~uuKM K51CÍY19q8T.:m,\mFcF!s5[Slz+JNp 1Ok#Fh)Z(ș`n:Gz 2cA$ 5OpQdS-WU&÷D.{q kq+w`rQ:tM"׿};=4){3N6qzi5hGm0O_UHï좃vk{klp(2eI6nd6Y Rt AWCrxVF~ \ KbZ)U2ц!N,"r0;H;f`P7GcQM *$7k/'JϻP>S cK,a3HG@ק[Z0#e[-lo܆8 #.[FD=M!yGx}&FڅkO~푏c)Z5KP"쀎@EqSέCOo:A*=$^^]͋s#Go"89HX\vfq0ҳ5jIqe^&ß* y7uV\bȗ.rg&{i@ObU_bµ VK (~,v=}jNnvt3J4 `+4WVn{+rȐb[MKs4jVugZ.\kj2z4Ha~`{i: ;"UGzFƔSj*˜IRM<+ \ 6[+ ߦ X.BAZik(2cOO*$(,MMs̲qr[+,qq|S,(5(N4r 2p sEX<(5Ւ[꓇4 {.?|pm6 ӽTFxjm԰mq8cUeRޫxj#Ȭ:LODִ0`bc 0ư?J Ga (_Ja(}{9S;Di1.Dj@ĖbIĒs_Ie\AgWŀ\|skh16+ˊ ]iSAAJE8 RX3 YrdSA<U2H_'m;lLK r݉fo{֦ nEcd| Lٻ+0y-Y Nfu`'n։3:@蚿Rje<P]۸S nbX!`w\0| Ċl^$'@aaܰ󱝰٤hC+~"*Ƶ@EHA9GnشvYxGy5f#ԍIA<Ufvj#a ZmN]`C:R.$bq8Cd ч)ԞN>Sտ+[UA-?m#xxnI"~WLP{*6=燬S_ԓI bG\],=l2/a[O]uq]'ş_iuFU\~ú|O?Uu730 ){;ªy/NN&T"O3Lxq<,J#B-ΕU2O * 9v Y 08AWaQS6!w͆n꠳d0P`."޶V(Q;%Mm&xu`cnfk?6'%@X n7U6MU4Ty< 4b9 qNM<޾_EJċqVd+wvDžTuRK p Ƿ&,JK xv(Luoq6 U>]|gWvD}k\F*ґQ3rIkքڱ0kF-,@,=eO,`6nqC;MJҬɃ5o^09%\r5GÌ ]Q2WeEgos&>qqO,G0\Z \ڱ.mvտ8E!{h@1s^Qd7XJۃ&s^@5_tۣ01w-bKz|AɆC-_ADry?ƠGހC xX"V.>^Åر3byǚH*ؠyFOR~VrnZۅ[?MTu2QbA6X#CIbHWJ7$oABH[w^np}[oBiB[c"DC-AǑaY8$Hpd԰:XRtk뵇j=H"dӾlVLm4 f=U[ O0R F HPuS2++; cr7$!S-4ךܿrs>` #o KL[6 aBh4, d,&W]228jL>_+a=NMf^qa/ zV$qE5 /ʠw ifO1`l34԰O1zM\̌|\9ge8##mEMԐ{l`*;!( rG}q/G1srm$[bmov^sjq1! 4!{[Pn3jLZT_L[(]F%'^Lu;LݻEVeGkSd<{\m&H㋎4үaM cxER^I݉!#Qb!#E[IB9cZ iY&Y@nji4Ԫ wU'%W?1~5!<^6_Ѿy[ |h?կP ( K]9 ܱ/x2%EsX+uZoM׽p>FͲT ( pe\}@gKSphVqH@O X)gRnK.RI32VǕm&y8+B|7 tol&۹p#lFqвJgZ/4, ., yd7m6 L&u@AkNbWMs;痏}ۖj/AhxpltXpb@cα 7 % Ea|;>៸`I&%tVXPI7>.v>rcqȘu5;E$;Le/Vs-4)idP `;%G@Sw  -=U|;fI|.Ml]m|fgʸ81B -`dыu쵫7|e\>K,A5уp*{GR╔+-AIG#KmÛvZhI8ƟƲnM4|e >YaMelpcAbou{oضmi.yϊZIc('+p{X[Qz[m@@ E$۴㨷ﺼm>ip XPTXoS,YD=,y ^%^cQw}ʻe?;nύЁ'39S 445ΧuƪIMI %rts*|y>:k`94v%b&g=ZVͨ(>C^R}r"[F=| /ޣq]ub|NJZi}|e ?2ت<쫘~}kxY EvZҤ>1pG}t}V5#''}M$ˍGcM"h$Y e@t|ڨ#Hw2{\'d ?n?ۧwA-aĂy07uKYK[N<ؖ%X~EuF/& `o) pmGtQyW6.Hat_Y|Ica4}QBq񛇘ao %W˟Vj|ڼ/nXW2%T`bFouRMF歅4{⩏q8saHo?yz0}J辋ݵ.zǓ'=Hgv 6<[$')艚e,QT$87M+ɇk۔6u$]"me:,w:fv $% ⼬u<3q5`(#*Q>Ce(!|>0b6=I3l>p];"`XlgEmMDYD 躲۲;g xcxxj}E4͎0wXd@ /EXvn݃/xͥc7ŽݲbvJǺwa&:d1JW-=L, xt`u,8:0ڲM0BDD<5e^1';kH1I|(a(+߶ ۖݹĿvEE'qa/6ߎG<^۔`kCW_Il 6vܗSGXVf>Zo^_uaʰ<sG[#+Dp5"Ӂ/Ni۳Ez[Zqky7qa<rDEX:ߑ[Eo9lYsœ$rbKhW2J#8i߅zGZktPȮ2ƶX޽P@m@)R#c0ydYP$84X#Q<.k[k{wr7r0ǚl v,,, '㶥d-[r"Af1\+jYԺIٴ&#.qkj+WC?6/j7*|R \/=_SqF߾NP¢l~?U~>/ש[VxAԮ* m_IDҷ@\[]CT-싷]~VESM; 5F{ :5a|s4'>1q#cDF? KEuv5d(t(((((aroundme_0_4_0/asset/user/1_para31385.jpg 777 0 0 20055 10157616100 13174 0JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?1K1_Y`%PLRU!1E-@LRKMD|%RQKE>PZ((( )h|QEQEQ` JZ)8QEX9@(.(R|%RbPZ1G( )أn(b3G( '-f?1c%z׬oM~v+UCO?ʹhrgR{w$11rׁ,7,5)jB4тg+B`."# jS(MI\eRW*Mh m.2Sъ9B(⍴rQOF9B(c1Kw1NF( QO.Qm.Ӕb,Qg4i򋘋m悜Q;yRlD\;hSlG(vqJ F9E{WÏ.Y&BOuד r%mG[-" mG$r#\~]iZHRT=}Gph.q_oMфMzsҿ=[wnzsQrh 6aI-/#h|$lSO[kW̖2_/*op8CZx2YLωK[ʠ'zVɳ Qu(ҍZoG̛jԐ<2쭬eWh V6sJ %_XK()BT^)v9EWK;gW*:PRy(h.;)BsK9Qo!=&㳳!nXAqy@>޵f960Q&<.חu֞"P|܂BJ9K1&8zQVF\m98GN+V|(ڋ9_e&ʳ,mѲGҏ(Q`+lȤV zasVb6qZQ7ҌgpOvd Y'2imYi6S) sV6Rl`+E1/KE=rx:_XOm0bU_Ci|T5ly}^SCkH/[УY}U<@EK{WGÊk(j_ <(nK?ޔLVo8®pPN=>R1?K'SO DH]k7EW'՟4'Ҕ@qҾ: #wlBm6`%5i?Qmdjipsf2kv ;=?JsVRϚڟ_|i?ٷs+Bx|l.#o}>*Jނ"#ѯY)}}N=Y? |[8?)dʋkF?^((Z~G+.&bm:dO1n8~~zxPL_sPx)k}S'mi,c)^qO<0B p<{.I5Pkz^bj6\p'QG?Xo| Z뱯ſaZZǍ/kc5ޫi ` `yo©G]^n-,cWO+&OGp?p~|Ek/XäVzeIkt=s98$v}=*E="u vHP mρ٧+wxQ#S4פ=fnDO?ZQm>SH{9l8ѢxSUтwi"y?,jֺNpz^D3!  [KKY*Hנjv Ο ;"HdUR>qRwŴ2֞&UQP-W[^<I4Yвv gYI)Ir x>operUTw ud5&]D$ 6\W;mgv2f+;Ae$[W.Fyv`I qNyO*ld~ @~z%`w]!ʴ9}S[F=ꬡ^UadGp1&FNx}#д0OQUmb(G͟Կs96++#r{v+hu\?XUk5834rځ^\?O{ vY21VǶq vױ,`*a <{ؤO2@_`?Jn+mkR^-nfˮYGP FzWxYxu Xvr@d~DיN9JpIzz=S K^C H`m9'z&OEk}=+0r:z֝ȝmT㿭s'~\lW~YWZ}=M=,v -G+mtn"Wi8;*{}jKC#5V{v[$ ;,vфelw>J-jmJzܢ($N8izQ$r3 m{fے"At8P苻R<$Dlb儩9jV6.HT y̮C ?L?CRޖ7=f .BGqK{\xj0ƞXppWo7ܒnyEo;wV=դ4 rrxelVWOקIFnI+[9g{-Ms\Z /+C\j  E22.wulբNrqow!H'):')9- Vf U]~/>u`OS4[>ߺ'cs`qgfpU 2jռ=R5fhFI=+G@R%# !<Sn6̊vu#ʦcg|F1|ȣ dYryCXGZ hr@(ָzkhrC=kͯP=Sgm*&qSz~^\̧͉ ߓ>ܒ$WGM~m#T9@yP3돥t*p2ӳ̫wtKY^xk)Ez6I|p;5LR=(?k׬`}?\!DcP8^{i Bpppk_h{U*[c+[jH>cg溭 y.a=C~i3yg &)ΣM&.G 9<YU>RcKN!C!+fH|*cns*Ԋ|Ўyu$+Z1f[q%`4 0 *G>'Q~X}iw*0?$HO+v*^󮉾HY_83™\8zot2H/A)=2AMqfھ/']49qj1 '}+k쾢һ}11El^QO![ȭ2Wִkl=A>򭼮gByuyY,ʈ,WZ՝vgcabq3$ġNv[\崛+5#) ^66ھڔ˷-nm1F+\ʥҭUg@ *Ekyvڝ ["2v=ynٟL7ȤybQXbPbe8-Nk+.-#0Hz>:f!'Q4O1vS'7u:~,.l9zvog4 !#ku[ URK>bQ2%'9KGЊVHuB2(;sL|/$,_I }#U*q0#iVK*Q8k 2Qpj0ɨ\ +\'9ÛMgAjŝ W,׬2$]SVԖ8{6!nRks2Zn= :nKpAҺӬbncnA\eV[,r 2ċipU&p d¹xm 9XW_k̳"Vwuk5(r1n;꺄K/I75a%HŽ~6QfD*)ez/mp8<:Ê|E5խ$.r]4sK%ԭvRC>at>a3W_Rf3Hl"w9"Bc't4*ر͜}*gujNmcJp去5{+ ^ߠ_nW xs~g*HӔ-ơ[RRhs}K2T ^Xc mmTn1覷3EMyZdӒ#&.,GD^0&{2p1u\'T~ ҕ2yoҊ؅Īƥ@?_ڍ}ejm \l-Z Ԁy\vY Q8ڻ`g?ӿE4~\82@ɥ|f ?*u5:a#RhKMRC-3[!mmسh ORm+G0sJr[02lд'Qq-3dO\6:*?4m?Mî9W\o pд~%K'̗0ZVa"yi~fNOTxOvjz][*`#^<μag/-6g,P3ך3j5ˀήw|ۧ<H+ƹs=n{KkFl|si1 d1?_@x[zl^7hghCIq>$-B d"V .{5-M$t‰0 &sAO߱e m ),ѥ`+*>9E_*+"mcz)dj)RΘ3zmyNWW\m}x/tgŝK t[VGPC/5_~"zEl|[ ={MO:>,QY _~ wK8!#캿ZL 1u8qV#tWBٜ'ح˿Q~q}X96i>---7^(+zk yI|\|{f7h_PMi-8÷-ye{kKrvwRjK'U~os XapOq3ƼZ`Dξ_@G#-۰ gYľ A\e(&|_w}ǜem۰}kI\ěh<N8^e U(tjT )%G]bgadIf`szU>4Ep@{(ycs^DWiJo m"OP+KDZ'XxR \jnW/g?{-}k BSu@.ͻp3֬-C1dbԧ p2{d4qz㱦/`rx32IH>m48ܣE5c*6<jo$׿UQOf'h5 ޤsS#$OLfKE%-%-QIq@ EPIsKEF-(XcA@n;F}qN@Ǔc*f,{֟E%Fl'vI KE40 u'QI8A@T&S&;&PPAN !Ǫ* DLap E TQGTcaT&h"ll-pi cEjmا5?YnݺCGE<V] |fT˱:*=Ug! |61wV33#EsԺLVb8glavizՉ]&X_K4sutn]nQ_1.caf( (€UA T "H`DŽz:p4U #K.aq?+XJگM146mGq$x_PVMgFݲwm=p琽[\{DAU;^s җRAQouUM)ՅZ'GܶE)sFvJܢHfPxGhj$K5S$x^d-7|;}WBcSNS4OLWN%ۦܪ:}~W=q7rʦE`88(!¢ '0cQ8z(;=⎳a+e1gkN Iﴯ#M&}ٱk[We=ŚEZvQSNA?y2p1TkSv%~1- <Ժzkx[j#:pWR)TӍMltn;W-IK5'0?#w x_=<5햻TG-_`՟U绒ޞς&]-iw`Ȃ(jd7~!Smq_7oƮqm93]='z^iCv<3Q.yWwdm[!iFSYt^jK)i(vLli{eVw[r Tʀn @g:uS zۅ@TUԲRAQC+,~|Qjar; }d^Wפ]MD;z;1vS?ɏY@Gq83lw 㪤|o$MG_u'Qrs5mEt&1ErW:cQj;{%-%ԐHv c4{!bUwb~'jnUQ~{Gl fݸܑϻ+/}nֻ[󎍽Ψ: /rNRZ|⢲_T\s12JbHNjiǓıwm[l~,Xt.pj](eZ(w>OmղܫLoinZb*aB*e_<7=YG_ E=nm|(4c2htV{mTQ@s )v92)Z#%7e{;4k^u۟ϧH#7Wiۍ~(?lFN<ɩu/=ׯz#w9ǧ;}tP m>h WHt?Qj1l0`Xh?FיfE?-[u LAcM8pK>'4uz׶lixvx#jv=|Y%od[ݟ.5j<~t|Z>QajIC[G7S SES;F%Ŭ_~^iE\cdvyy\](crm8O$ȃ*wH/E%\ :*:u㷢?ϳ^nzR)n04=l>9?{:)q.S&%j+^z.Z錓[&}='K   }f]^]˜Ja|HZ[;&øÏegN8_Em-s*()"H08+O~{mO&kج ӟe%y_-O^pgѷWy&| /H /~S `=3Ǫ+\a nk/n#Ǧ{97ײ)8Q48oP>/s{ c0NHq谯4*( ( =PdMT8FF =Y!۾`x{;9Vc,|/h>w+<ܘ//NV惵:Opy^'ަGC< 2UU?sipOQ .^~jhqΪߔ 4PM/JVG,zW5vJ)Ww'[tjޫvDK|vf}8fLiʧW܏?c H~8 29iࢠJ K9Oϒ1er2A&>@}/6rATQAG>mA^և_"*zz:ttˀՔصeɭl=#+Q]#]Sa~i5VӑL9{+)6է#pizΊ4摻>`@}U =2=DUY757O+D =Q@QL( lJ)Cwpp<eqϓ6FF~8Ti14UWHhAI9SNo!|By}כw]cGr=se\s˷WyN Ez>9mܓu *H CA#`ߞTk akE酛aǺe8y@Ȣ(d5upWCFtxpr=r[UtPLy{!{lɅHhhm{sesa v2Sʱܻr}GG' q *2Yr2p.X[Q\R u@TS vrUW-VșR$4;Ob_9_]b|[xTBiXWټ85F]^.<[U8lJlM`}sDO.~_ƛ'Y%=eަXwz?qUNjz-=r*z{?lnpBn_햙jry# +]+c#[(=KY3iqjkor/xuEZPcp2Be.Ӡ`pdQPBx?(kH}tgN#Ɵ|?uΪ[l~΂G>:^YKŪh&}vvsfX3H"26_(-!z+c&\{v>pt[+]i7j[%ٶZ zvo7 .bm̴jj$8U!һس3, Z;6cEdD̜I.H@ascq&a\J: ( \Q 2 jj˘1/qâqXwU..YWqg>JsVVN(C]s\S2$8E]QP':nX[9>,J*n%s$Yq+w7Eq˲#& D? v(y@B@㞅E6wrzS(2( .9?t3qˈꢗ8>/@xϢ DA s+&VL`QS( `P}QEgQP(QQ;^iQGx}P 2^ѻF詖FL pP0(,kzu?$ 9@l9>!PFϙ#<+i_3)VUS**e7@P¨9U Ce袀TQrx{QʂereA2ELEGC+RL6Q; !Cl; Q*(܊PM;` F9û(w*R Ŷ(YU `Q A*n@w 9ELPLʊh7(|\frT#QʨpUdpUd(n'(P@7r@7k\VWJyYX&uparoundme_0_4_0/asset/user/1_robots.txt 777 0 0 30 10155154606 13131 0User-agent: * Disallow: aroundme_0_4_0/asset/user/1_tom-br209.jpg 777 0 0 46555 10166305312 13315 0JFIFddDuckyP&Adobed  38Mk       !01"A#2$@3B!1AQa"q2B# R30brCS$0! Pp@`!1AQaq 0 |qDj`L.]Y*M+r ;(|X-07 HqnPX0.RqE;lM+ NXI;MTϝvC_!T+pcj!:>@zX(c] J'aO-Sͼ-Vz=;sOobDcjXW$ԙ kձ"RᭂG1 @ ykA(3'PIfl+Vŧ^Lӓeu+ bN:dXQd5 n^!|Nܩ1fdwh(o'tYk;꽋"㭎%ܧ{%O= i+us4KqDX)-u}ܞT,RWTřϹw]}VW2X t񶀿f )l^jSE€ hޥiaUI_m m^{8GH^)6ڞރf|[tIXZi+ 95 S65D,2T6g4j^p(.Ve4*"J+p^Yݡ* x#aϗuVkeӛ?9Uhv>mYSl0q?3 1Nm7BuTP@4l~{kFM#<սE059EBV. K>€Φc8J[uD饍;3U-jxq|᛻>7Zϋ" 3'JkTCvq!Zl[Tnf`4D'b K;G!|cHľkI]!Cڄ.FR%38TG4#ӑn;z_U^U!tw#2[Ў|n>g]ogwZ7` U5LU=@>)ZqCNfd4ÁJ4o_0tBZQL8up.I_ le;/mPz-M-DqDKʝo;bzaA@\Yqz0(*"sF183"dN4.$< \p&$zUmm(G;%VM~Pƙp#{ Ʉ=&{2/g&12>_Bbd`/2߭X>|A7ar%h0p-zSÑ!OKCM}XMELj>xkIrDe/gS++j_c܏+ܡVHF#HfܤЬXR!.w[{(g+l0[SEʟ_Ed)Lcq$ypT<ڻ V4,k4f/Cb>g8*uR}wY:Aa#8%lq`_x>?9`.W7!e5CC' 69X[P*|P⢭4&y(rs-yKܕ)8~7.Z|nJ@5AId ŽZOq'e1軱jdOfJ09U Bec v bޯn0[U*x+guجUrR'2o,@6ݦU`6:!9e0*n̻+|nSx?^N{-^k]R(psTUk!\9:\HlS4x5Nsd*Lbu:4M>Ld>OclQ5= S keS OH:n5X0_]'ʗ2!1mKv @"ZْK+_o߹|Bñ |n1c39XdgJLٳ5e7sl_n[/y{V%<yBy¤L(~@:#LOxLiWLJ:6^ЬQa(pb-Xn㗞&|yUWGŀ0sd(8r(<ڞ nƳ];P!k[ @}f O٨'~y_p6 9wCVl]82:,w)\6F_-e򺛚.ȍ֏W^TC?o֋"E,ċSI!d.66B׼]-lUdj{.N|CskW W%~.\ȏ}N#ds^bOڛdwgu%.4Y*'1lܛ;T3PS5^E%[Ǚ#;r6K9ωMgls$ YG jc6#loVwB嬹:Or jV䕓#+j@H5!sj; [ %"s*2("@ Б9`S{R 1+J:,,6|6 uqmי:T22hOK&֐ڬ bk'T}wX/70ʺ$qZo׳ g|Ld$#%3h\-䉎K9fo+@Hctw67dC/|4䏓=;Ry:wU~w:Js{Ӑz0Xwd4tέ +j3rq#L)[÷'8*1ػFVzK;ڤtw`g(4:aaegA4g>[.)(9{:1VzPsSJ 3ZV-ڔJ)0cL}3];J3OA}P[tƮjвYYF-7G譫JܷiCA %N@u؃pNA=۴rm]ڀN=%nC4:@zN(hSج/mAJńt'Y%g@t8:}E w"/[Qܶ j@G@5x:RAl ,n[:gA&:J 8:4'L&S5),j4Ƅtaaa%GOaacA5:+(hBS4=ea viz@>tn)\Bd7@m[RSΎ8[:g+ cBS7(cA;[t|ݝ)1<]Ոٳ~ ^~Q먟}^ծ7ciult+2ƫ_;*9jnj-F %IaܤOLgB |W9"Ychs[D(z\VVSg@܃ IvqE v B^Br^BmBϽimߝ:]$5rI|-O {nNuedOLi+G_|nJt;TF<u"ջ2g-<'w(FGtHp(ᱲ*OlTr[Y0=9U/oJ}JtK a)xER1ވ@\_/hGi̱#JGmV*3c՗]2}2v]9v䎏Ms5/g_į*o㱶K7UU B[|8은 !"51OWvilM~sɕ=t<#+&쀑ԪqWHBEDB#6uM"Wh*%PYrNaD;u-gZ%c0+ `|JshS*W`  W.Dc&X簬N=BGVxFCf<6Xt~j%LPZiu@抧zQU_ejLԅ QL>(zE GɁJn%\K5Y"l mcq )B*#QDLn"3l1{$ٺ('e)Y >v]US)Ť.s@L-q y [;ಢ̥"gӝ#P0b_CI<*bGcj,d?3UzBĮv6UH1߹cVTW(OOKQ%p> `*-pS097s_Pjv/ Qq?bYm-!7nL怌O\v0CNbV$tת`x!dNskvYqM(x'TFWN+~6dOb#bE8>ievRO1ܼQ#R unqQ+h>H2ZT;qO qhǚP_RD9+Q7$L>[QDXGk ,RJ#3Ub4xErDJrX> FK7N- v_wȮ KC~k >‎D(uLeOcuGdɇuLcWbm9VbB%|njl䀆 ~v >)J{q+X,+<̪/Trܸ*~j>8F zH0l\AŜ,'pN,^)zw_/jϊdGwwT*g('HbZz}ҳBR8 %uY!DC)STrTO,Oqg#k,QmAvvxƩ]vf~$s8FdFͪKMvF8)G.FCvj:,fxN*v຤|6>lmF.}! N8'FN}[.CU!JHWX( oR䜢1xoU/6s*3d2!v3n>g8Qe4d:nUeT~|eg=a䃌g%qT%]?GR d^'0L8UqT+vÂo86h2NmCr <7".x Y6/俖N`uUu.5y}5#r\?!tbTP4:&הST31 w¦R0 !d @ni-ҡF LKq<_SXxKKp=b$ns u<ΥAaZ.&YQ3k۩`˭0%7l(q(YNaT #2:[̷`v4,=Kљ[ yXo/$io˶b cΗKLcKVg fd%U>r]Ztn'ŕOKC'˧j"G^)J`"J1S5iT=*>Wb*oaiH3d*8),;5«{rqnD m-:X5恞APsAZRBeˀhɶv$ʧ{_*.sP}9;_al6%Ն庿a$s1i=RoKKE%B1Tsi*Tꠁo<Ԯ%T{ TGfm);;e,k4 VE[NZWke=G,7ýEvjS& !c݆qlE%tX5]kTAo3 R̔֙X8] G1ũ ̋IEdд[Ja }55&2bc3֛4]1?;5mA2b9W1D= ]CAy}α}:$ ڗSE4[cM*2lsǁ?SF:34)Kp^ֺ aQ aJ*Pd2X̶mЅV6Ae+FY7;&-uq-./yXL)Fo@@*v\.^\^Ǜ Sq^fe7xc6 Onsl%K͊ω<ψT??4DjD*py+Bp,XGdzz2Ž܎r7 /E>+sxΐ%zpo1e>ߤ}e/[6\[SkL-:zef&_ex:nGuErY`.UJzZ#T~Ķ7(JJyԝ`wgVW) "V%RoCՀ;|΢̽M:V:k# SЕTcaK̰PFw6j+̶!?3,MLTSNNhb;cղX  üJdb5g{=fSF 0jn0p>8 [b6胯e ~ kX(|'oS:1n*gCgkL{;FQB|*՟]\0{>&(*!tGCzgMTqHRqws ;[Bnih5zny W50ORL }ˌh(;![l0gQx0R*~:?؊BcKV7w=2GM*?PzSmGkR| 2Z:?s9;$<3]ÝDXJ\o7<~¶0e%~(-vU'y_1%WgXښ7.g8c26XOĬLm_{5; 8%]W=s6CyJv":B2%xS oo:L*{?2s Q[ pUBl?:`B8d|\~"pLUp)ff_x-_˛J~<2j s,阐1ơHZr Q |(efĿ,cq.m|,J=bCa 1 q%S )was(u ̥qo_ɣ! wH0? $8O|WxT\a# /.Sr QeYs$n-93p P"K֡w&Yk0 3(cTB{0N:p.f+E :P"hjc38 8 : 5'|˄yu.)/4ዃoB89&m)|2NVnp\xP:nNxWrP" T.J#eti>wy{(:C 7X 6ig@fX!^^-QEȩD45 қ *W=5r~LMc :\v/%9&O ݶ'[nhY쯸EklqL5lTBZ( 4_!`l3+ɹXь²ƒ@ݽ`mqX%z4`#^+J3v7.t%|@q!M7lf"-~;o o5.a1f- mvBFbS->]l/nT ^Cr[$lU6Q)uPcZj V2ŝRde#-XJ-_W01sC9Ưs݃ u`"5DWј(<:M>ad{t,(U`]q'-׮l3,xhw.#oTh׳7~e~R_$i9.jE2PE %~@Z-*d u&+eA1FR;*ULTP1"AFHKTP%͝%'~OF 1/+7N)!1 z:yM RdXbdϜ -Dnk6N"3jU20j6-wxv2: K?-gG$}8h-sSҎAE[KU|Pj  bSD$T0"$fcvD UU'Ķ0Y 4n".q jRفlLnw0`W (5qQ ZjT`Z'67B5(&[$)av3wY\@82w9mU?W9ɹ\m{< ݯ>0LȬ)s~Ǹ1/,KƉЍϧ ET0jja‡PAi\A%*Eb&l"V2%c6j h]J>wzBb[E`>1^hS? q ︨}[GՐcqL=B cy:1cP=fPiԅ_Ym\bx<k't^~G/CzbKM c{i}CB%llB[ThfN튴Ffv\B׶ȨbT N3Klʯ~@'rfk`:Ls>?<ДLWl0JGGG9v-Hŵ{-l)n@i̺PX˥gP1k^Uy bt4}^SBt6&ME1_>6)q63?)X6_fpR*r~O*@C\.Uܲ9*[ap1RJZīh(ju2J;[H4/d.[KtYBd+Ē=hvZ~p*=!ր7d)ƦF2Xf06mXZ:j*t([Խ{Uޣ;qF!}N`1߹Q{JcჇrU/2dqO V[\k e˛ %x~pAtmjwLu,CPUΰ'>&h+'=(ym&ӊB [d(EQ#t\hۤZ;VM]]!3$+K"h0S2k ǂa8#drapXCZo0I|ņYMJdl-vLVG_r]j8ѭBL{kCԽ^bC`*c7)ƼT«oĽثF+4kUQY^:4T/ MԥmrZVŧ}/Th0|=4SFi<ϳ%Yt" TMkwD,G׏~.&QF!M6="r5-лؿ>\ 8wF x:J4K@](y~B2}iM?֗Z2D*WDziB&66`b`vB$ jgcDƲ IɅWA|>1lf8HVqeeƱjպnl flܨdL:( S;jī%@VUT20s卝ӣ&=2"-KuQr20nVyVt5kT+z`$ g\4Ẋj;<,m M0&wl/诨`s2<۔Mо\B+M WP~:{giY.GdmWaM`N* [bo`-Wpr vU7h[PS@19 P`_eGk8nw/ 8\nRL*9n=K}=]LZt:`fE@hh|H1vp0;FRJKV(^+s:Vy:fU pgLUS+vW_t;ޡW_ȭsЁiO*IӫB,?/hO[!Ț<7]F9+Mzp_RXO !Uj[!Aai2 (%g<<;r4_kj!/}GmF?u+12omvKENmdj̽L6RaOdz@-p/G3)߭.EIJqj81}Rd/PF YwR#٧mibU-t]M}%Eh7`;>BG҈ Ws U%jJ,tJqNPv|Xxt3PџEo0Өǘ9fH;z~cOW5-VK[?ȂTl=][/n{D\V͌13$V%#3pf7y X=)XDTm>1`\|IϩlLRFTu|5 :l+dU$ߌ%E[ו/r7!Hmj*%KUr[+,/uvP]q}\؛Aye `Fn2_W-'4̣ơگ/:_ &E'aP^ b0_4pm튻@crz&\̻Q oX+wΪa-X?. ԭ'VvCR̿a0lx!LiچFg7ѡ 4>GB5m+1Y 6Z% v>ھijC3xQ`Sܼ@TsAד۠?JW1k*E}TvwMq(.oJ/c;`7 珵Tޜsǩt73nަߤ̳.s0=> d/4p:Su{}]CUiq0u;PĭֿB,2?3&y}Z X5)hۀ^hA ;]ܸF 7TO%b]ߘ@ԢaER=Puu|Ϛqj.QcQl 3D>a\WU.L,3kd?ق)u"Cpu; DŗK⸪d({:~t JH/n,\~>%gt ~ qS-%\`7yg<5RzYܠMܨx41EhB

fȨw5N6I+GgQ0q!U%6T!% EK hA`)**YrV]uYYZ:(RGq7gԹe@SPԲaz Ԫ`A2b%,*!]0m?b;cT$ $op\' nkɮEPMӋı ;QFHpX%$YC j6+ԦU)HL,*9B*[3q;s !+pJu:dgfEuhAGw1pVG7E|l2Ӂh fH7:WGQ[CRn P. 3ܿ'*&L9Kc$j,j'hPn9kTW-JeT%BKZ8]4ATA{oP;?Ի Ef,Q`hEcc9*hAT.Gqx\B1.Urr=%Q2R\C'8F3 p9fR3J?Du1^KQHemq6bˈ ٧qxb^8(% vĺQMq \ZT'P!y\a8iƒiDȯ=B 1c!%2o+W G?zZKT\JECX LK9:TZ&$[#rJ ,!02T +*a31Cr]02<^Cqt)_YZ98aj-Y10ƣw)bT%G #|l&jB &,jƕy8JTW.UM!ܫ4Fʂ[`R0μ8QU26Rw,e\%%(%0#Tz"Zjq- ]L6!4 MLĢ(RFAZ&giX# _20eJ[ht`Ͳ5"\c8N4wZ;**Xf[;yȝKL CT17%܆;! 0G|K $" q"ew4q| Q\F&[uǙm#1e2\J0ki 8AS$*Bhfh (&{jX+Vz!n2TpaMeCy0ߔ:Jj #LY O ?7a XL}&Kepq,h,K ]FBpeJge-h{`,LlcPJ̑P n bi6mE(!^q/Htu &Ի87\l#<6DžXCü8urLC..% a˦Q8W%HG.+Yi/p:2xˮ 1mq1MD-22u% x*D/pis(V0HۉVړB*u ц[ni0D2#sS"gª L`<#G4 x.qee_o5\*\2P8wPf0~%<]C ˨;vjQÈTJRV5IhrGe?L\aroundme_0_4_0/asset/user/1_ultimate-f376.jpg 777 0 0 34407 10157616200 14163 0JFIFHHPhotoshop 3.08BIM Print InfoxHH(FG(HH(d'`8BIM ResolutionHH8BIM FX Global Lighting Anglex8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlicesUltimateFrisbee28BIMICC Untagged Flag8BIMLayer ID Generator Base8BIM New Windows Thumbnailhp^P{`LJFIFHHAdobed            ^p"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?D2 '{IIO}/7eUeen?{~0g$50<=gm&<[2z>LèR̪\^][?k;<:@3UY7=7A¦Z9Gk:>WY5d{Cz&6K tv 1{cf?OYMnYccoStNFMu9(#{S:OHU]ޛT޳11-c6oOb:ӱz_Z}Ql-4};{}GޡWmVǻs52MoZ 잆5Cfovwe?^3s:*9X7ƁƯnxkyAnIx7+[c,qWc]n'U ;- L)Zd[A.a7uysaR~ڱBLi(k}\뿱ynVC$hG{V;bF;wG;${@Z%$ ^z@Smg[U{ jkZ\]OO\8Gʯ V,ǴĀkjŇϤAx#l4t#ܝB@^% ltt~7ԱZ̵]]Ͻ] mI5~caKIhb\M65qrۏ^5VT.1ODiA]qEx,;]GWsn)muqkls5^9U=Sj X>P6v/^.=j>V.CK.̶C 0mm~IL-gnMN oՓcġSZC[f۱? YEckv5yp%;jG!17zI+G]^؅Ymɂn~ڲUc_K䱣SsV%tuf8{׽2ojWfk:= =W_Ρ.!V7՗<~L涊8;5f}?,2Q49I#gG57~jƾ?uC2?I]/:^.k:NkRQdHڴWΙ7LuR_&YU5ڽw̏ʛcìl ۱q]ap*>5aK W\oUӍsjcۀ;k\w[Om?HZY"f6`YU wmo. eLh%wRӫϽ87g7 ˤ_X}8ך]Uo7?^ҲKϩm~C?f$t`2zZk"y?a[-`\|GZnW?__U3'&+e`ö9gws(u5[kfG6׉0Ev?M,c?[?2 L|Ldҩa岁 . w\ 0ku,:6 @,˟eVX\+cX  !:0Ѐ&`x '9}_XzYEM/ M$~;C;6ECk~ukX ?Ջ^u<H&q'^xR ΛxϬ8Y6x$5U:՟c1[m9Eim9ۭ۷WכӅS]}^[K_窽 E5R^ז<ƽ־FfWw$'V6[ V,<?ѭgU-vV7lUo{]4Wo꽏m̽}`lu|.^X[es0vmo$!DR=Qz-xϫf q='Ve׹Z[{SԚlޭ߷"Ǎ06X\VoewD\Qv8ɭ,us=k6:y{ _mb^_mV7~M(DDPNFzx.(heהgʇo]'At>haߚ~`V1\<,#K=n3vccd= x ܇5FoyWޡmXqq_`m \ִP׭ϏyֽAcIev7/~W/"x?5/p2db:h/}p0{jM²܆7_is\C퇒6=95Q{O:; P.͡Ʒ{-+rB9:JfؽJc5 ?I5kO^gj$IDZn-6ϧ{1zSsf=35>tX}ML|챾N\_PKw$V]c>hc ڙU9pO豶6rpU y~Z]C7"0;>WN f-?&қX֯hd+DKm4y܌\czjf^v6m%б2:}5nmnݯOB1GM˫(W3֐0Ys?:-_Sss695X5%cx/-_gֹ0FJ]uVZd5ӖZN^>_]°5c[*#Szahdw *(싾~+q鍯UCKmn`kZ6쾜Δ3Cf;3n NuѰ;A-?Koʫ GX!1 ~U^:LMoHz}b M^cmn lk[c{]}3߻+Pm' |vLDэܚzLkc@olan~ev[˃iit!ޕLcZz-[S[nYݹOk7f*;Eht亮mwk6Mhf&F0)V\f6;:OP46W鹿~W*.ew#c>μQ#x yZ j`.^Cȑ2@w{mr}Odu<3C]M 9$:3mf~CCNLdv ;^omgk6{}}?;}̱M<KLDNΧOg[8u*#qDK7o{?:2r-ϥ߱c^R='Sc?kBgF-~2L?DI =6ޟUleun7ͳ "oWgA(4x")&\Ev\klvѿ%pjDonۖn&n~uU#yϹiݷ9c#'-~UU{]`.zkmMRlLv Hȃ~Zk[8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG QualityAdobed        "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?Y+1{"{,\TQvyϱU)T!Iqaԕ %K]|_5턓݈yoty%RJZW0K c4ѕ5oܡvO*nXA1)R"t9Ot!*vMr $(jsV ͬGΥ$Xt~LNfV1>nOɲMo ,Wh{ֹ۸4GZ=&U9Nsd >y\Ӻ;ZWn{P&áe>BK]P[GIS)kHՓ\u 0A*=vCa_fAeIFָ:<S4Rݧ*_U/XD$9>FQHU5QHG+VExUd5"a'ji=z9?YUjkO"g|X`5c_^bARGExO>œAZG)-r(%TnZ:}HӴlDjϫ.=9ErMh|u|+ WK;ȕ@u':Or$'C:4t[VcwB>hhDŽ|WG.%/[];#cv#l#Gѧ,﫹-}ck4TJ'mD:|y>ԺMx[Pnp;:Um6Ƽx8]3ͤp$?Kݎ@"boew4=yy:4i&> s1Yn3 I 6zuRKG>ލkkҜzq,vkƥh,\?l4sW*Hǂz ? ϋJl ~={v C!^AuN鲳ˆkK2,sK D6 `e^Xnki,C !XkAqpli*KEAV `h$unf|Oa*Qz{ o*{nf ㋒ OHdחZPj8O @t$t{[[m--< P3N{OͶFGy$w%o:}U+/^=A8?w=S]n&'Z25d0YY >#^KvL^AH8BJt)_Ɂ ]| ̬}m(Th͇ Y-qG![n{`Ucy)+G'E N*l`)zaCw:5KMN&+*61 ָ_@Qhηkm%B<yHw骺E9uK}3G!Y ?Oe\~2o@q&  tN+>!XV*_\ŃOnЮ÷%.m6]S25Ȱ '徤m6dn?6[.UxkVLb %tT3ӥS.{T*PyD.hDKu>ӳ(ݡ.-Qf%c}YoT=t9Od-:=#Javz r,(wѹ,n۝f; koa-9lvS ,pD8m[6k %khYj #SNJF2rd[CU0E p-~,Bs4mi2;jژ';g7ԪxGh|?X:̆SH{~YuN-SLP#{w}:|,p&;[w?Tzp> ּLz7}Mu58ݑQy0}Zx?vL ]Ńsa)8Ѣڋ/ISz$83,&kmsXyNᆳ·#l5۾;8HV&&>.Ew c-sL:%bA Ŝ32iY9tV} wlψu]w7nƈGd{#HǬhhqxKG.]]㊪ZI>j5LUo/u {^p{aa8<nVn!{?m\[ʫ5[c6أˣ].=Ol׍zv|UjZtAY_R 0?VM%7ԯmD\6G޻Z\Iw*3B9O0L*`IJ68|pI0N,  Jҷ11#S>CI'e#ƻ*E:]$[(cﬖ>;khck$~{3+e pOE<JJM]Lhs[D@NH&wJUGcmv1~vҲ)6dTʅ%$0h}U lEtzF 0*}ux?6nY?]kFƻH[u'eG;Gbf*M'?_5xƫs1~q6LRǂ.smp5cki5 g} q,aus]qZۃ|}mo`eEy`$]'..Dⳙ"z p:k yB=5֚YY},nuO}6u q?DoזܐiȇnXiuV;X$ioXбoAѹ&lf+lũ2t}:q}:5/ F7;豊*h lʽLʇ/hx-?>t d[G `&Rp<ӘN5m\k6gW_2Bҫ5%v?WqGQud˱u~dN]Lvr7 uzoմ>$(~ɧfeB$@0_{+Ʋ|CFDodd[[~|W;_ )/ʂRI%;IHkZH W͗9 ٓ[ֳ"f_PVogt}x#{rLBZ@?L$g/Wf:lqռ,^Go/Ej[<1jR1DtyC- ΚI]?M#*7ng?Z uu=$?r阘q+Z#W{ګotC7kYk??AWV֎Ӱә#p6}=ʷv #OɄVdet_KϋϭZ杮B m/QV5in{Pg[~{-f('rBrJ21f_lUu671f?N削}.9[?69n$cں$b]N.fH:=ͲtkuXcN;7hҩAq]oD}ԟ5u7:Z<շuS]^cuI[,c&ܻ5-:9%^򹓜)W?l3ew?Ļ?֬E$,,MXt])̠΋/e9;(q:|$hE0u#YP5 ;;D%٭kJȉtQn6diGq1+kɱtJi$M^&KA=Zʖ<7<4VEM$ ' q ի+zŮ$cKsާ_Z=fv\}bYCǤiP=N괚X8egncطCG6Wau wtD[8y=NCP6 vк~mwMD,?KE "l-T7 #Uc6kTk@t9*.ƹGfן.%T!,EuuV 7uݩ$|IsR.6(ֹ?} |6[E2=pB=C]['C~ a햸U5|Uw vNG6_swA~\EUj|'U_v[zDŽ*g{:NdbI:d|W}HV^tQdW7 oqliR *+b7k9W12=W{KAN@q`sSV)nG>PqhSK=hc1Nr ZwđVlξLs7%ِA;ux73s;7Says-[xMC{̺tD{q9\!![@$Dz҉> zW{m2zu}# KͣcX_/VXSk ,i-p>E".^g3&EUԼm_sVynF孝`B.C룩 ʕex}.bӅ+piwWAhvCp>>#ڙTy"1Ůyl>pNkx7~O*'! :$MhPԱpmӰDՙYwpcKI̻]sx G>Lŕ&?rbT+n, l?Ih}a5f8UQULooTz7S{t &A kᡔ8o.Z\?nwktޡU}'SmE[LmTwR0Ù)в"Q.XècAfzNVis216]\?ys}C up.L7GeR%Սˉ][vNn1\g+ѿf%ah7f &N\}̟t-nΟoFZ!PHj8,=Sſ#2ʜ~ksYAN#ܤbdՔ ;"vp:dbS έ-k!#!LIo(wꋺ97u*DH%Vܴˆ~T3rMn:{/-- 0Oe~}/*5}9J0'r-hvt>+Sj -9N SczcSNCے]Ǥ7f#4 &gU9X}iG)دSxەXk2@?jJTzji~hScx? ^Ă;0oV7]vγ$9}s Tۙ[\Kku /F̬M\p=SL&"I[z_SmݵT-` sfX66|H_%cl*x׃"wr0vO鮲 A:nL̍oxkk9l{5k}`pWGe7ݏmfF~»xȬ DUbI'3 "9GՓ&)s}X֩ +,Z321G\pev?i#"|ze"ѷV8D,?1h.GVXZ/Vh +, )p1>-9НqDSN vL(+`6l0_j$CA6(LܿT<!uN 'El8|T䤦A ʙج"H t~ /"0cVsubwEMEn)tRvfK[}Z??K-ɒGkJZ Ox`H2#; eΪ.%Z9qU _6?"ZHM9ddֆY^.a᭱Դo"_{bl^Ըhг<1sbQy7p5JߥZ1mXqt52j˰su8խ ;ĭG6f4}~(r҆Hes~ zǴ[^U7v~}Wn+i :vSE9 /n9UY>%]?k%aroundme_0_4_0/asset/user/2_kermit860.jpg 777 0 0 21167 10166525100 13403 0JFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"<!1AQaq"2#BR3CbrS2!1A"Qq2a#B$b ?'@@$<,t($!P7} x ւ9BB, m 6xܠ7x @xA4:<8饠 #k^[Z@q `,^`x@HHX CPXX@ s5Ӝ9@ͬ! HHAF 6 ŠBq0`` AaHX!! x7h@ <+4Ҁ T>OrQYc'Vm~͘8Ia;؟`1Z9jHV!"@3KObMdTK82k[OuEb(8Eo ^tҫ(>{HrRv|;TLz*Q02`oR]3){ vpQ\jҷ#*Lx4&fU;pBb>o|JMbpw2pg@66{EHA(;$NdTtwYQ=R<=\k Lɨ*%8ԱYg4C;Ml]PB匠 $aGdh{aEO.|y+nwN;[sP~sĥL*yA(QIRmlZROJ/D4]A/(J)MyN&<=ʒ=9JY_<h׳<>5gHH􀘶S 5 ش&׀Q`!(@!@Wh&US@c|DmUPsDc4YJ* wK\j Z ˛SSNM:ԮzΜFnRPl "I ;'uqzƩI>AJDS-'c rD*`iS|81kRԹg% tf#,s'BP9n\/njb^UoB!vJPT)J~nSS1R(!YnziABfL*<DŽR vbMC-N׬V̾'/aɘJ'0Z]>`(ZyS)yǯ Z2S:UBCŔ>d7OZs220QX H!9!_L@ д{sA^&&rPS~V%K?Pat⦵ )45]ʒJ,fq9~rۍԖGLO\XK$ pt3Ji,)KqGtwHmC}mѬծn];R􅁓8 3f,7vP Hxu.OHD-aJ`nvÂU)DJ@ x_{3qe@)h}2RAF G“e, 7}_Z J-Zٶ؈1ȼHq7 =x,RX0.$Z{2Hw$P{bNGuf#hnH llOjw vԾeHQG( pG?b%k3/-tK?x*A j0 RK7x)r~/(U\Wo$S`$qw!3k  1nV.Y0MnZ jyPoX]B$)9{qB_fY$Ļ¦˛*Rq4LBPBHhɨhČ /,u!/}}&'"H2UbTRj,j9s[fg].3? ؾ()i )-D$g}"aԜ֔5!.X~oQ04HS1R[N7:*%?E >_>*A\RV|@X"#qB\/2.)XYwҵHJsiEe)BU1u[$$fÌQb.#]53/K*1nO.rM {]^͞N,Ee03F?SD!̄^$]pӃa3*R$&aJ5 3lxYd8 gNaq8D5#.8w?frHIRFWb>'<=7PA*̀vuAdv]bOFTa ̰%$AZr-.爋rS _VZyDs.[V5r8J #h8UW_u=>pp;St b1N$)Q\qJ3ݡ-݅ Nr`=/mJ\4u2YDLK;'f)*ZJ@MȻkFh*psvTg( sK$#Cյt!'4jYS՜lj%W"|\!Y-moĚzT;J]K=a>RN#K寮I g+>FtGy-зC*1y3%sI(fϿev<=ߔ:dәB1|ʻ"JQ\1 U<"J9tc35fb1jQQ.TÖMX*Z*Pm]!.^_kׁ5J 'hG!#Npx!EW2f-]'as.l:u- oBʹ eIsTV3koDIPpS]4D]$ĺAAQ)SKT 2LJ|G;b{[ 4 e1FZX0xK_Ld(&˳XİmOtgBłcb kDGAepLj\btiUb)@6bΚwUC 3zlvm /Շ.(M(Y;y?WYQ[9&aBtcNS'GЈþ6RwCX R,J06df(+.dW Fy^`xhxFܔwdٜ;Hwz߅;W:)`8o~Alhab-j3DW>뫅- ڒKIZޑ8!3]J S= ז?wsB†$I%ɹ#^=8!a441P 8{!*ZB$T0!@0,fQM2cBVzuf+uQ6Jr˟1)@uI}WSI{Aktܟ]. @B=E"Qc)5Dݜ4Œ*x9P'G?oXqa}"4-4٢NR SV&,PR @}QY*!̶&-ILʕ-d&\\l7-=l-fq>(JaBEwE%}?sU- e](Y!J$1o#%-*^$IKx24M.ϤI#',RE}] T聧.T #3$ܾF)F]7P3 ԉDf.N,tfh+g&@$0CF3f72YsۣIS?*qteSDxP.[m-h;eJM 5*4S\bm5~5ߣ=}P Y^KÁf"DΜʖKZ$q1M2/ !SPA,tԝZ#VWv ˣI:'mMM.T E$܍t* *T"KJrHG>,{:?7$KS %J%-pHwgZNd~s[ޑFp({*z)̘ Y>xLjH-mA4( rO#)%M)iEV)-ULw&MY3$`MEI|Ɉ2t QJR3el")' 4V+.%X>9 "!'`b. ʗ-ٙ4HAN7/0{Yv-_}bݥIE)8ҩ ʃ9gĂXS5R{ĔsFv L*UдkR5`S[.(Ri[)Ln +Է"-dSh82x$j82hA\s7n 6TI濶\?ɽ!s6`ƫ t QLX^h©MMX$:&4sD5nx{9n[j}٣eK+RBXOmr[K)8eЋ?3ܺZ $l:?Mv݊_qSY0,xy^'#EmiS3drLUSk%)%luw IHw-C*I $ =bnVB݂v $$ق.MY/eĄROQS*ذv>~OQ5@eJ TO6{٠U--B!{ʻScNM )-45 9>N"!-GPpV%^2%("IHo7EDp KS;()Z2e܎ZIvp\7KŬsBTRZ^Ae!dF$5ݞE:П˩˜x @~):z(_a{2=]OWJqRmQ)R4FkYN*+ }DSK*o`uWG36xpKrMvNS(,h~o]cu K>qV2lƯU&7-`MEL6_ #q)nwK[0QIuRQ,f)̩齋zIj)PKdIHlؐxmPX'r<1Sr)Y V`?-br ċ!͘]v02IX}M(Rg RFW8AYJSٸ{"S R )^2r fb-D2|^dʬ) CJ6fU:ЖJk{kɶS`ĝKHAȔ {i#STR}m;Tݜ,p{Hy`6/>^|L"8Ք!>?|!38)ɭO= 'uQphf'$/аjP $`<R5$=#wLT kC^") A 9aID eŔ>bbj֤%CvwˇNt˗*@XBKupD-)fZ+7!!RCFe{I*%Dߡ<B`kO~Q;H-`FV :ˎx(BM33c,Xshʧ* Q Ȓ -wOoeJ-{q ԋCĜ"P=xHz:$0p۾+0v"Jˆ6-om i%2~bu<8vP^jeL $YnvZBC7:}wo߱D:iJNo1PrDKReqwk.-÷4> endobj xref 46 31 0000000016 00000 n 0000000967 00000 n 0000001402 00000 n 0000001624 00000 n 0000001786 00000 n 0000002103 00000 n 0000002725 00000 n 0000002746 00000 n 0000003634 00000 n 0000004234 00000 n 0000005070 00000 n 0000005091 00000 n 0000005897 00000 n 0000005918 00000 n 0000006787 00000 n 0000006808 00000 n 0000007682 00000 n 0000007703 00000 n 0000008481 00000 n 0000008502 00000 n 0000009301 00000 n 0000009322 00000 n 0000010136 00000 n 0000010157 00000 n 0000010558 00000 n 0000012235 00000 n 0000016835 00000 n 0000016974 00000 n 0000024560 00000 n 0000001072 00000 n 0000001381 00000 n trailer << /Size 77 /Info 44 0 R /Root 47 0 R /Prev 59006 /ID[<4b28e8e976f4878e0cbe48cf7956ca2b>] >> startxref 0 %%EOF 47 0 obj << /Type /Catalog /Pages 33 0 R /Metadata 45 0 R /JT 43 0 R /PageLabels 32 0 R >> endobj 75 0 obj << /S 101 /T 185 /L 232 /Filter /FlateDecode /Length 76 0 R >> stream Hb```f``1``e``g@~(  w S@߻߱gkd`h``PhB e`8!X,"Ǭq)`a}C  %|xmL/B2B(pfq1p)& í*טN[{@xw22 endstream endobj 76 0 obj 210 endobj 48 0 obj << /Type /Page /Parent 33 0 R /Resources 49 0 R /Contents [ 53 0 R 57 0 R 59 0 R 61 0 R 63 0 R 65 0 R 67 0 R 69 0 R ] /Thumb 18 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 49 0 obj << /ProcSet [ /PDF /Text /ImageC ] /Font << /F1 51 0 R /F2 55 0 R >> /XObject << /Im1 73 0 R /Im2 74 0 R >> /ExtGState << /GS1 72 0 R >> >> endobj 50 0 obj << /Type /FontDescriptor /Ascent 715 /CapHeight 678 /Descent -210 /Flags 32 /FontBBox [ -54 -250 1142 835 ] /FontName /GPFHOJ+MyriadMM_400_600_ /ItalicAngle 0 /StemV 87.50999 /XHeight 487 /StemH 66.63 /CharSet (/S/O/C/I/A/L/space/N/E/T/W/R/K/G/D/endash/P/J/colon/F) /FontFile3 70 0 R >> endobj 51 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 150 /Widths [ 212 230 337 497 513 792 605 188 284 284 415 596 207 307 207 343 513 513 513 513 513 513 513 513 513 513 207 207 596 596 596 406 737 612 542 580 666 492 487 646 652 239 370 542 472 804 658 689 532 689 538 493 497 647 558 846 571 541 553 284 346 284 596 500 300 482 569 448 564 501 292 559 555 234 243 469 234 834 555 549 569 563 327 396 331 551 481 736 463 471 428 284 239 284 596 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 ] /Encoding /WinAnsiEncoding /BaseFont /GPFHOJ+MyriadMM_400_600_ /FontDescriptor 50 0 R >> endobj 52 0 obj 810 endobj 53 0 obj << /Filter /FlateDecode /Length 52 0 R >> stream HlTN0+ L@,3I5$( #ޞk;BssOwq;/TA2?{J KY U|=d2bO;d!TBɾ'ɚwǽwqTyqG??,oERiUG8 _ gƠx oaHP1BVܘ)g(A꒲Bg3 #(9[ 﨨r鴽'B%RhX6;a $*ƁJ+ eB ƐWȈ$z[⩼{ʲW,',bNZ"g_A!@:g/] ?IDXf0skbsM .x|fHjyȔ ?y3ԯϺ_VJ/$L\Rf 6b`|d&S5v`ow5Ĺ>ѯ[(Htm^±<؋zTHR5A4U7 ?ad _]dQfB=MYE!dI笛 'i&r5C * ̹gΈ33u֚_m}kZvh%{X!}$~.m)|n5W(W2Ia~/KzRSbވ̼qh:'$,7޻ .IXU{u=iČHt׵mztwC3ѫzm`Yi*AߵCݩuIu$Ѳ-Be Z`9ynjw#Sc%mvtmk_m_w#pvGWao endstream endobj 54 0 obj << /Type /FontDescriptor /Ascent 756 /CapHeight 708 /Descent -288 /Flags 32 /FontBBox [ -167 -288 1000 920 ] /FontName /GPFIDI+Avenir-Book /ItalicAngle 0 /StemV 72 /XHeight 468 /StemH 72 /CharSet (/asterisk/p/l/e/a/s/space/n/o/t/comma/h/i/f/r/d/c/u/m/y/v/w/period/N/g/b\ /S/I/A/x/one/two/quotedblleft/quotedblright/three/k/T/parenleft/parenrig\ ht/hyphen/W/z/Y/U/colon/slash/j/B/q/C/R/X/O/question/quotesingle/G/E/P/f\ ive/K/D/endash/H/zero/nine/bracketleft/bracketright/V/four/percent/M/ari\ ng/ring/eight/L/at/plus/six/seven/F/odieresis/dieresis) /FontFile3 71 0 R >> endobj 55 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 246 /Widths [ 278 278 519 556 556 833 704 260 260 260 444 666 278 333 278 370 556 556 556 556 556 556 556 556 556 556 278 278 666 666 666 482 800 686 630 704 741 593 556 778 722 264 482 630 500 890 778 834 574 834 593 556 574 686 611 944 630 574 556 260 370 260 666 500 240 519 611 482 611 556 296 611 556 240 240 482 240 852 556 593 611 611 332 426 332 556 482 722 482 482 426 260 222 260 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 519 519 0 500 0 0 0 0 0 0 0 0 0 278 0 556 556 0 0 0 0 240 800 0 0 0 333 0 0 0 666 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 519 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 593 ] /Encoding /WinAnsiEncoding /BaseFont /GPFIDI+Avenir-Book /FontDescriptor 54 0 R >> endobj 56 0 obj 728 endobj 57 0 obj << /Filter /FlateDecode /Length 56 0 R >> stream H\0 E $]Hm.H5ka-g2ߑ|pHJ$[ٖD˥^TJ. ꌵ7ޙy#\V\Ӊ%DƍC$Z72eGnI%3>0QrxxIJ~˔ZZ2ۗKZȴȘb>*z\A{5)ͯnc&Ě{gE͉ᴒ g7|r ߞ[;)fF,>n^4WN-hfJ RLMBղ;J@!ONҼJhTUo Pmj#wL_`o\$wwc ؠI N>^]QӐe*p$$~J@x*r[ioG4t} f{!g=G?죆[:/Xc& džq\i&*D͞Qr;df#saMKo0c(GW endstream endobj 58 0 obj 791 endobj 59 0 obj << /Filter /FlateDecode /Length 58 0 R >> stream HtT 91B%L\Ϥ]D8䃳"H%۷w|ިFlRb~ \6?8 e˯W((vrYtq1Q<8Ȇ z)T] %r׮CGgm(T%ɜ:ĉB+n he |b Dj+nE)H]HB?d`=}!S";pTB4&9GwvR4icOk"w2nQϴ &IFB@wnt7^/> stream HlT +8B8R/ks@b:^kap6zI0 {ouWButmWUU~8)Qe#5Zrϙh(lE]Jtrk'py -4(Y/ g8p6f25 :ϣ"$|--|*g_`U{a#EQ ~[2})۳2v#R @räůeWbNiגv]y|CQϙߥ yHv(JIDV 1c{_N΅%7?Hciw3nū rϷrf ZŁQ,yaI!LBL!bM|}d\uJIf͜c/Lp]|OtP}nF}Y!Ц!O5cɋMbuz;_ hZP|kP$M<`"1F"?_>IQ]%B".f6QI#0D'SC4şa`%E6uޕ endstream endobj 62 0 obj 701 endobj 63 0 obj << /Filter /FlateDecode /Length 62 0 R >> stream HTTM0WhWKZUU@7%62fQ}gil2w}P Q1̠YyD8A;PщaAHjJuTGsjDnq[UVzW`L = ?9J@Ң*&p{Nu S@| ! lf;lfvb_?Pw{M7}~. .%Og;OzswߖX6UA*0er&=zm^q304 NV|$ "wd RuoaӋ#9qL> Ex%A~ ^-T47Q@ꆸ`P endstream endobj 64 0 obj 721 endobj 65 0 obj << /Filter /FlateDecode /Length 64 0 R >> stream HTn0+x$!)z CzzJ{ebbKEHIQ >3r}5iO3+˥⊒0gfxEOjXL405Lqta%4xUг\Cpjgy!y# Mrɕ( i7D$ -i o2NhMzoHQ%iݒy@11 @duF~>:טI^S0+idty`tz̽GނR4p>NKZvyQ.}m.hOa_y:?&w~q ӁxȻY^3t=,~ rI+7ֲ`}Ytnd pat:mv$u`DUPLΪ$J@C0Պx C5CqQ"EKiwh .e_@cM<3Sp nڰI'#mQB;/.eR[yY涉;&!v 3tt-S=E)BT1;vnSU" VNWn!%<`J̲>( ھ1^XDiT1ym8)"1/>M>8 k_C'߹^kK]%x~7WJyYYXl?M|!5<(i0SB endstream endobj 66 0 obj 736 endobj 67 0 obj << /Filter /FlateDecode /Length 66 0 R >> stream H|Tn0+x$ )z (شMԖI~}gI2PS̮Lemf22t$Et< + neř0|96Wn`/L.! |.0H)PUOpR_P)؈߈IJN ^ H-56o}E{v^׏C SieU(R%uJTBϢ `8LG+|E;vg"]-'X%@URnS9t Ħӱkh{+ҖU1 gAIPQ TD< ۃ ];D{n|P.Y +-\eHh9AcBZQkmPi ; _D(XaΛ0 VP޹#0)9ŃUnßE SܿNKĵgY!P^kL!QQ|# dLn50%Z,@$NpA"i}^$dAe 3ߍrf:Uh&%8AВNl.K*- ,&RcdMN* {j8(c)>$s_HotQF<ѧ5R|heemq&‚ԒU\gjZU 2+<,KiGC p8YL endstream endobj 68 0 obj 323 endobj 69 0 obj << /Filter /FlateDecode /Length 68 0 R >> stream HLQAn =B%ml_*qz\"vkF}%fwfgRk4 VenǤB4%Йq7 k,8˗YK~V w~BPn]!+4@W|BJdkOBDiJð~Ѥ~!-vyAVtg)F[G Ywg!d6GOׁdOGZ!kR&>;͌"+5% n -#{|5fJJ#hV k, j&L`y} endstream endobj 70 0 obj << /Filter /FlateDecode /Length 1585 /Subtype /Type1C >> stream H|T}PTU?w?.t {hee(2E-b` ,]vŊ-#M6DJR\2֏r1 Eew _{}@zDz|Kss~9@ ""jKRL:}jsh6B3!+4NIF8g)mJ8<`Tr$''_0H|8=IzS_aX E\dY XO*,'vYt`I{F fP3My/_ِoln,s fN Fޘk5-+u%dMM RA B1T'h =-C 2!DKC2$GPsUD%nʦ2eEQާxDP  v@T@qB [tp=5N̥yBGI7S/n"_-G<,> łrĕ2{0rE25YpC#eMΈ:#>uC.vЕJG  ۠>uj~ݣtZ3vgϐJ>.AHzu>oϱ^2CFTnU`roD7 DzY4•S0fv 2ݸ̀vxWGgeƵ[X*`~(FҸC4dvfh!9WN{`Nv/V$uaLmBz].؜ jrtͼ CݟaE[\ʛ&2؆Y^]ŸN`}JfF.n>QxДqp@C @R(z*iZH,.}wUR·7c x$, *o2I5/$)FB5TbDneb/œ_sÇğ$J-6])U­,Pá U!({u~k"sGFA hRS=Rڕ(\7iH dp/ܐè<6&C`:8 gCfa1WDDc.5Inzg _F74w5fn⣟[*Ud;<֢v.fpD|b s#+_$3K֡gvCrIV{[,E hKV]?K[RN +@Mm~7o{U|"qxo{ƱT«ۯ_{nF!yKʻNg(GS@Fb_O@\&؂($Kc 4iY\P3q'_9q,Z$=;ANb+Bؼozrƾ^mA6ee %8 endstream endobj 71 0 obj << /Filter /FlateDecode /Length 4508 /Subtype /Type1C >> stream HT}PnntoQp"Y(Q@r-U4~TI+QGDA ֲ$m#F1!g}ԙvwݾ>~>nM\ GWYK ˂cl"׶Q^2盟1P>zʍߏm)+,XW!NC-fKbtmUL)/Krmele9<(FK]YRkba#VY|1VQ`%ibNI^$k s OdQ,ESP4TEERT/lUMQ[iRT465LϢz}nuӹպ ƩJTWUߪԟG_*6= Ѥk6j4w{*c91#ףO_8\zkpl؊imKb{3wx_1#׷8?.qђ7?eE(~YidO``dԩ=?TH5$LNN,IW/wt\](pSW.Gl`؄aAJ*xQaW0|g3kFK«,%M `g@Ls>.L@ZV:IL7WCCR;kG&ED Ui&Ƕ<i( UP\h4\JX $ء*Xɒt'{~.m r%UA 47NoJ[MEE6'6%ZW\M7SЎt~6Z獌VRHIdw񘕏V Гh,: V|b1Q p Q M[` AQXxZd$ ,b1/,g;q5]/-pIV);$B92]vd6/P-|s]_\=/iUfv|Q%]CI ޓ Zt!㏳愥só>]n`=_,rGƝ VxK_#t1t71DDHd&.!Fxڹ !' Mea2g]J)2ԑ+QvS||_wOxŧm ˩a<f o[;jwC!^V!As5"R'YL[̺ah&/ߡ0gz쭛*z&W:;;CCMG0HtbV)%ӜOYJOg KJ٥x4-=sm 43iJ1 S,td2qF3>`;vV;Kv)p7ybb6 ]|"1ixħ~:c,`DQ2c[ ), 5&eD# ^T(F[ңʣ1 israWwW>j],,," 0KF-䑫[^ԲoHXB0N8y2b#N`D?!yx"خ$L%Cr^6T}@rFfDU]g$lUO#y Tj0!΄cm2LN)VE]lIPԢXpD۪hc[DQ"uzXrэAH ݊hew{'uO ofޝ{V~3UiY_4ei3[ݢsMÛnOJ:e8HtvRH<u. ҷLUÏeσ0o[k]X8EK1zKk!f3B*V6!16Ɍ&8I+/%DD0@Cb6{ 6jîi* p8 #\ˋ @R7G=H6 <:G( 0#Q<25>~@y|sMB&z0 <-rVϒ9J]~X0w7ه`;GPxgbxjLGǤ{5i_uʽZ] W@4F|S~Q<8o1+\a3)aQ]w\L&XOK'O`c y汞BZuWi(vR7qz^X仜ײb:my]uF Sίe>6hZxT~+/@E1E ϑ<[XL{fa .4ů¨ i}Sv?i8ϱpb<|J=?ŗL3ӥ\ۿ44~v@cF9-iWr8a%pB0u.^8L8|5m!a86wB<1T%~ۯ5.Ƅ8&ɻebZM p#?1Nέ}&`y/|Ӏ*a]#lRv: V鱊fƟK[hP PZq̸1. VbE2~bBCGǠ%-oF`gĿj xd;OMK{Ҙr(ykߏaQ#^m|iXErB!8a)jbqmֵ[b'~ҢH51bQh &'gxs%4Nw A}`Fhc\NW:ŀ@2:^gD}sbh[4AiLUnEԔp(!7I a Nj I4gH6xd&j rĸ0b5˙D[<} (,??߲p.ˮ]ʔQ]YXXZjfW143$'\QTRㄡS|NUWСG??rE38EL|:[Aܭ9/pM[oW%n84v/0IҷYÔ 9 6^HzƑY4/S}NP%\#feF#TyarZ.i]%?[}/t3_JqΪ$+D;TUn<(jsU,W<ԻJ0JPEL}j.^e۟RF Iv]s QJJ`窚o+Y7J/pXj9}[K6'hYzmT'ݐFP=g'~`xio.|2DRSP43C\ӏ%l1rKџ*34?+X3 9΂b %嬟> @`N*@Ͳ҅Y6'L"s"0!Lv>Ag><·]Uͬ[txeTP×w=96NjB~>PS(UhK.-[[VT~"һwY=秜-Iۓ߾\XVAaVV5kpa_w7w=rψM؜_?!_4$*6t\R|NS endstream endobj 72 0 obj << /Type /ExtGState /SA false /SM 0.02 /OP false /op false /OPM 1 /BG2 /Default /UCR2 /Default /TR2 /Default >> endobj 73 0 obj << /Type /XObject /Subtype /Image /Width 279 /Height 58 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 7416 /Filter /DCTDecode >> stream Adobed      :  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?v*UثWb]v*UثWb]v*Uت ` }N튯]v*UثWb]xO禹ZeMqj~Ia'&ג1˃+*ZB =b-.>zvm}0%3j]4Hḿ8,_bjߕmߙ5ݫ{:C̎Aȳx^9Q_%ڧnPK`j4cW|~JԴ^I:,"/M>C{Ko%ثWbX<*ٝCz՞i&H+{('x5䖝]ͦ~W/\ȾKh^+њWGu[3m&鞼זb٦ŜfV c*!m G o,EG!UUEI$K?h?~J`'PւJւﴈh@fe!EoYZD>Y~,p$n#Hwv4HP_EKWj%r ;8N*C]+,9[Yu)M,Q-o7ߘ?6E઼qrcRiܜ T^#yW^ʐ}w^hu]D9;!V)$H1cB$w "ڤRĐ ^>`JUثWbk{H$;[hDEY#̿%Z-מu\o~uNMQV "-?/̏*_Xǩ~WC/muyf{b -KǖlcnVzeeVUhHC*)J[\cK:G\Wv P]3wj[gռSTߑ7G_.Ky;pA4l>*z"k{cL1U x+M68^m}}s72Zijc«%#5RW&_/˹-9. c4'&RI`SdMKobo7e*IV8;jKn#'"֞-guOo2D:],Io' ѕ҇%@zgbmoqR"~CCB # ?foE(_;+OR]k}`Ֆ5cɡN[h(%>VNH5[h{m/E\KѡĚ ?tO.Xyk@X}b\@' O?3mc叜P[[V+0 "}ֽrC:?rK^̭kiߪx#hG~3*I)c?Z`׿1Q浆VOf=bJk<ѵ nvM^Hv  /Uп*Fݕ\֝i% 6Rk$W4gd6Q@l"RXC]ϒk_\:W~)S-b~@S7g?^_<Ǥy31O%&vTtQBOϞaggE:ykH4WH$^Csr!32G/%'f}7GRjp\jZͣ-P@+BB+ JJ?oO ּ O?N/.lAh`ƴiJ֛ {ͯom/qB,Iנ&fi~^5{XK-/L/.*InM|So/ȝj#R^_iҴRC<4eEi˓mjR~i5VW[MT\}H\Rif% CSbk֍i:Ewn Y]jbwȲ|3~f\g˯'jkjGXQBI*\}%qgY勍^HcQB"_[QI Fcط벌>J?n~oW$X3^m=~צEYgu->b_X?0\Zt=cXPvY]VPh bD>7OCj*Gg„XD^4رl_]J˚<]-oh9$711Te T P>ڼr~{˙r ۣsWrOӑ)5ֿ= .OZzg-w,T?CѕOUso><2c=PAo0)"#2q \Fؐ<["yQQZ-ٔmz$7䗙|?/#iIa橭켼`*Ȓr[Ksoxt5OƖk~^~]hSldԵHkdoIxvbI'bϥ#by$̔K0_!JSS⃯tGWڹ6VW/sɯ*PՋAdO+ F2FajQ74)y~|:Ǒ#o%[k_8kq.~0X- v4|5H}'y{Ⱥ-=,lmOY &W_[ν:?v}e|ucFrGϙyJ4GG.[ՎN|ܳ wK$by5?!ayK6 _Y*v /gͧ/m_j:2YzeU pEG*J)}꽸ˋ5 Fw*hXJ´$9U>&IE>?ޚMǙu/8^KNff; Ԟ$?-(<{˿٫%2*9#W>4'̚ zQIZ ;k_ɟ,y50~OM# IT5$VX oʸ C v*U%rJm:KxS_UA;ݍ7;1 %̾,|+I'}k͚G>$en?fcG,'禣y>K\G-m~0h V"jٖµ _K;t -vml,՞Z|sLNr~@u['y ȂMgΚ $9c)}B F`+1ۙvPzW##O/AG-~keK.){~R~ujwU~gZI~`㿗~р6H>?vr+i&]IJ>Du}K׿(<zO-1(jO'H rsYv$k  7 p*0yՓ?62Z $ZqW`f MUHN&;-?2>f 05"PQe1NY!VۭF$(/f5kmE5E ;hWK_)_ik׿_I4G;kd}DCQFsWa(˗bȊ[K@Gu9/vj|;/M$y?=o9i2iZeqFSb*91ܐ8#yoζGO,?%h! +#|TSBEptX@Nv*'ȞGכ9LT",M*O'(2؃{0yqw[e7^f%g沉Y$w$dl,҄乣++MFP$HՆ0 J3v*rk~Y֬c<L-kȬ,a*lWu?2i-c$,<7'߈>'B@|X6wqZjZ],SDVX7>%#_:l|w7-F^%v?p^6>G d)b[%$S Z筠Oj4oa-RJ6oSToU(ߑ>fb7֞\\q 6uTi "aA^/u+Y_eӥJv742 "Dz0y%]m.Yºw*"z22ӲĨM?(%k,g+m&#q7 (UՇ(6ߵP'ߒ?~eypŨm<Ѧ:o-TN@!d*j)W埜_m=֗֠;}R#:Iנbߞ69Ei }ʫPTͪHd"vjHrbyrq^rT3"o6oz$/3^΢j2r^aP=cI,:-ѭ _CN}#JAR3ߝlI:J{<ϭGCl.w-=7HZrcDhiܒoB7| ?CCzN4Ub5K nH݀(SH?#ySiW[GqXK-+ 5+]A9#Wy9GOi/hmK*?>Ua^#}:R*yMJӘ}Nӷ{yq~|\󆁤^QҤLm1DeĨSָB 9cƇHG;_nλ10DI4嗓g X݆EI ʮ1?Y6궚m՛i4+3JaH)bj6R%_ҿ+U45F>nVJ"=MFҟW:Tj D8c5 U:*WbPv6WGugyuk*HRb8D4O-ئi66-K |vn($8uP0-#+P28Vx/$7bv}a{mjVojGsk- UT"3ο/$cʑ:yU{[4=8m_F|i:ޝoiw\~aw`h#U,,t+m;LOZY[H@lU@ *Q /E!~c (BCd`m n4d<\'bP-:\HČTUr (nb/~rqQCGH\qbVG7>Uw|&mGZ`)Y#S,v*U'Դ YuU((\zoQ[TmI^:Vg-88GQتi_*nZ%amjKY[V(ҁȃW}1VEv~n֬#~KTҮҎ0z^bESK̏-OSK3>RXKNxKSn\NUثWb]v*Uث8? DOM?WR!/_c1Wb]y?_e%{~+.> stream Adobed        s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?v*UثV;O1To-FeʊY*/irj1r<;OOٚiudO :G_ |[+' 2܉^j⋽6Ovai;xL=^1ݨ^.u[z֖WiesSa@K6꽊BdI +{3 |fbeBYd%vxe ꮖHKi:n-j\bߓiܛFDk!YU Mٳ r~o95RB|8e.)2;}R"&f:w?.[ߦ;G(%ybII7mQ{Cy!鑢@ Jr7h}C$DL)Ki"Dd65ϥ~T~q~_T/tkʱ%1zqXqo`K(sS]jsHz=,';~< 8b"'G=;d9݊v*UثWbXu*yg^ F*uvܜi<1r ~;gٺ,کcH<+ۍvhm4-eث%r(d`MmS=|0L9~!/{mJ?"8{͒Lz)7|y':ŶeA=obUbG~3ƊV w̍wiGI I9%+b;4 <8!@dJ69>mC52kyrKr :7Gmv=Y'{Es w=_ц <>\$_ y]wڦ_ywhA{0Kkۚ"H6+[q9`cLjjrg-:пmF}(\rwĐ~ ylԼ'Li5#P=xH$d`\L{CE n a)}n,zbAw巜u~43=wΝB"H^ʲP9W#s㝭ǂ\xI |[u;RΟ=Fë#(X"F[;׻v*UثWb_s<Ӯmf{ߨj76B- хx8ҽORI=˲4}61 {oĞhv(2ᜀ#HǐϙI/6ͳʲA曽RSƟ2[c8$5bً?9be2B눎ׯGkkg ~!%088%:j={2S%ǛۭG=ݻY]B\ q"Yìhnngd]&Cr"kpkp9oA,]O+M=ó4VwcVff=I5$Lb!FR7"lyԒ@i:dȧX~ijg@m^-~pMB۪7:d(*3G3G_?k 3Mg#nMO_ +6Dty4EIf~q)Cyooc=h#AGvm#yNQe˕Dgf]v*UbɪUk5&ݘeZem6]D1D]8z^sjrGY{r \Χ.kNV ՜)uov8P|ymnrǦ*&2)VNٝcnY2zTtrH=/ҩg!+H~ JPhk9C<<1.{k[œ,%q.H޽Rٙ%ORNeNMS]Gm#h1@EzLA9m!$kbcVH};4ykQĖvNeYG`1ȂB2 ҢG`H jB`($xfd"!NR5CnqN~q(;c |NFdͧ6Syl.XUkhƺl7~ڥZK[hf4fsVbIf5'm$4F;FO3.ͮ:B6!ց'yTI2>̷RUWz}WU-m>RL j{n/d"H vߧ}S{>xЎHK <~m 1T'ѼwzpFkfnN1sAv;_!ۿ]߬&;g z{H ΃=~r#UEq{/tfd^p ""j/~tZVJy^!72ꚐON?QwbUsz6IO4xc>>PK,8hkCEb*#x_ljNU.)/ثWb]#oK=MƷ72PȮXm!S}5"S8e`w|Hzfa$|HpdG"F ̟5b6O5}qguPH"ĪPQ]IO+OAUb^7OoS 5*@+ks`Yy埞?=CȖ\d/| %qe&5kHZK jG<ʻ[ac)Y6l"?L~WݻI .cap xq Jjp Ep>5]3ZSotۮFHORAqp &&ˆbp)D;y7rz^-޵x$>̗PUE~"6'`kzG#~w׶KoNKqۀyDG‡-yToO%!)B$Xh $giS 2!!絎㺾ϡZK #.$ۥ$%+ fKjȃ#=@X >S\eB˄!ra~yڝv*UثWbSx, OWRve% xr^Y&M@uܝwtsYsjF5}#Dzozp_D4/?-LGbm+G"wZQh~&ƌeʈ>vx/13+j߇p&M3V.onFbrbh35XG?3խefiXm"IXԳM6vٱ4p2{yOG&B}0̈́~|2kgf.qӠ'Jb5}M7b,[w l9"ϐ|KWb\h 5":mRHl3,`DDITDPK3N=4 Cvqx~$7$m[wpEȧ`8r^=DBh(j7=ƿEfvWpNP%/B-Ɗ WJgFB?n i8K-z"@n+~GDkwZe#G{; S%=YDPI90+$b|Cd|pٮ˂sx`#9=R=+5Tz3/o&i>}ƙkWmOYf8BC3*XF nkhtˊhQc峅Z0T#4;CC6ĉ#~>8>PDD)8x~hg?*;v*HG raG`^eo, =u>\W{SV?y!x؟?Ґ{okm!K$u'2G%B5(,u|'"8w⽾5k:s̘d/'UثWbBn{m˗m+>qXvI=faQ$fSښmg#621dwCS[[^A&W@4،XJ?=\@,U棓jv*U|F!*U ȊhJpۛ($8u}Ͽ/yCP@nԬWOZ\+V/? 0DϳͪԜ  mf."kH B:W*Dpd2<1x&[o&{{kp cx ;^O Hb$Oح|‹OAg_;EjK8XUw'}쳠qĘpu%?ic۽,#HrW_|w7 t]\=y=Psc$Nbo⿸֐nF<&;LYtJP Gmy&PDEzK|99gzvZA,R) X![#.vJتQI< (^Y,q.噍3$g8@B1N</1iy^p['!rF P3AN=vprlV!oCGbh=fF9 I7a# l;[Wom42Mu8ϧd*:xkPק̾?Ss*ɗ F##/O/ rKm+;'=Æ9^lӄjOܝ\YrepLMd@oJTun]zw\yXMC_9`ӽ|*ŝ鲎DT.?nd$N^u';zbhv)kr x3# [܍l7"wGn :o.\y7^l EIRkE%,ŋ+Rq;vF,9A(6wϗQ~S,iW*DaEY&ĪO)yro6i?NKqyC/־]A* 힃tH"fxyЮO-d~8Ꮙ/u@v|ɝs]v*ҳ#++u BAċH$ 77R47\܄P 1'el1ۗ4ˊdM!Ӽ*Gjn=ΛM]YG#G5BdVzAga)Ծj]Eu]8i']ofPeG`( Kyƥ}yH%'E @$mb8G=2.Cr2&ܛ; ~dXv*U7'-6[GJI/LJ !HOF9%CqwgO=N9gā qP/ι%=>cZGYõ*$@DO}+-c.G\oog(v.y48_ W{['KKi$f5,$s: %fR$l{dڝ hGCW7k8 Ħ9$cO brc;]߫]^mG%?lO̒sYHZIɁxA,ږbUتeickog,zKZ@5r 1FdA0>q WbBԺ@jZTxWeݓy.=OTӥ co,J*Y$7 M~CO@ -8v%d~~kZ4iK. #`b6` (j(>Ъ^цU҇1}GK߱}/nnM&,G2gׄ;1q>$\7+3.dk{)Hb8'oڞ`J1Kؕ_fGdgN## B}Bğ>Ovk^HW[QE=Aza@T'z=ћ=r'66x̤=#{#מ;4qu;4Y_T/&L:@%#؀vη_tE"_.8τ%}63;";"BƥOaNb4c, 4N7'}ݕ1unJ2FbA[6 %Ò&2 (lK8ѿ-?0|]hLm&Pޥ euTmkbusz .YD<'@XdKo,OA4 ,NYMYM s>7d,r1 D#QUgeURP*I="i yciO>ǢڲګJLBԱ+WzX7b{'X0A1sh*2]kUFOIȒ6p/n~AfIƛ="uj=QmmEsԦj$`,Ixde3B #nyu?dǦe-f8RÀHN^$ ognW%+~v*n}Kz}/Krxk0NJ \ɧ7Į 'z8(m<QNȇ\}6J^oEf[˫YQ+ѐϳr#p)N1޸c O?<_k|Ó!!x#bO$i<N}[L pB5@vOlxylb5d؏ Ɩ j#Qgs2cXj~[ІiΜMA.e=y05o;_jN^g\u^wB&Fzt=/M8}^v9v??*_]F}JONj?\ڜys횎^1χT~O'/ڪqʃ/C;cTC?z?cjp,o4.x$[L/\#xzp endstream endobj 1 0 obj << /Type /Page /Parent 33 0 R /Resources 2 0 R /Contents 3 0 R /Thumb 20 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 2 0 obj << /ProcSet [ /PDF /Text ] /Font << /F2 55 0 R /TT1 13 0 R >> /ExtGState << /GS1 72 0 R >> >> endobj 3 0 obj << /Length 4290 /Filter /FlateDecode >> stream HWَ}ﯨ! HA b`nѦHH>8w+JF-X]=O7MV: =ETY(+u>޽yAGw8so1ScO.Л weTpQmak:5vFk`4vh;T0h?68% xEIF:bs 1p fbww|X*ƪqRiMvy0q#5ց{IdKY/4*9Eԩ?ƧQlwԄv$9wT 7sG (6d@t( f!ṪAxe#(89a^k"SwO73\0s);e$w'9k5]\!#Ϊ y!FpG !(̘|]W?Ӓ(![kT|Om;8;t5a ʜ,uRksq7"a<:ί`jzQGEV7KA)=K;ؑ?oQIx3K偘J-Hvy)CG7Bm)BP= A},p‡,w2m283\Qr.bFhgCUzNCw-P2MIqWXpfgfNGjkwS hHJ׷Ў_uF=4gZkـ[5B{8b,?iQR7mF'[&R>} *GЁk@7B;.HE%H8iMy[Pq 򯚾C3\#!@1!:hn(렝 ,)!8TRx)*!ClPf0:fpo^ Zjb(8}SuC;cf7o8+NM!c".m֓Zp`H"*>J* MW\ؑy޹ͰA&YgDήEMc3cOXFACmk[6x-:z&P_ kibNb!PDwȠE*hzŒgv^!ŷg 237x48ypsatW^-ax܉(jX9Gt{߭DƗЗx喎7N7{Z%3q\oh\鎶FJnz^f:ܨupB!" 殏wĂ7ģщz/M4Op,?lxƠCidy숺7al%i+:}3]DZR=.pn@bfHIDYsQ Z7 Lb! H!TۆQܲjΦ)ŹKB$fP>Ŧ_AOWڧprbSč{<k0@C Pe`\a]:PAwcH1%[́ <@cNa (l\@!`H<b3GRDt! x5Y4HWs$w?Z#A7XbL3 A0FES~^%;nA>_ېg,R")A9%u/-%ѦHeC򽩪WMF;/3WoqSP/dtzzʆC\a|܀qyHZO= `^"-03B }ې Q]LƏaJstysX@^6!pЈ3d Q`VT[! ̄i08 Z7|>3{i;"|j\:I^bL m[g/0퉛j;L6+ʐ]&AH623Xi >F>b}pc tV/w;c=^e.9(̾t9k0/c]9O^8ì^:9ƙcrC5,Ƃ ޑ8Z6wLmJkYv8J[oFc&%L4CfRٴ նsig:b&r!uOfvG5gTMS76ʨ2nM^hA`%f7x*xj{0' W02w'Ӿ:'vAלwH=jWBtkL|5)s ƙA:t#J y=ǦER| [I?ɨvUQbʩ8fQ`k O,i ÷W8'ɪ" gy (:RH#<[.#a5qvM<˦v/D*9Wv`Zʵ|稽q|5. ZFVgՠat7śѺR9 rYD:sXW),F{${W\lιU^oSo->9ZA%Vl*Vc(exf=]宗a%pl]I0KSUNow$E endstream endobj 4 0 obj << /Type /Page /Parent 33 0 R /Resources 5 0 R /Contents 6 0 R /Thumb 22 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 5 0 obj << /ProcSet [ /PDF /Text ] /Font << /F2 55 0 R /TT1 13 0 R >> /ExtGState << /GS1 72 0 R >> >> endobj 6 0 obj << /Length 4245 /Filter /FlateDecode >> stream HWێ}%; ‹n@ Ւ8HSǗ Fdn.ܽ-6؄G?Y)4s9f3܅AR~?-бBOChv_>^&2>qFRkW$[x1kV/|LDbN\7.N0 jLw[:Ϻ>P қ3>׌40CcG.I󒜚&![:s!ӟqY3YqM08Y[]%\AR5S#%abu@}%锑%J#eG#'ҟ H,^5#D(B+'<̼yOMM~ϮR-E+Mg0 ցʾsYy7>FK.# ɝanBRHqd͛K`BZ]>ؿr6t")1T =9hT$Gs8U.Y<69R")00.Ι4c5R0+s蹎v3zx@x7{3^~8T[M0 15@#T`5DxcDܧ$ lCVdvFhQxb+{-=%yYI=fǾ=IcEL⢜-ZL[M¹TLFG ^,B4GE{k\evD﫹f2j[q=8[)ˀm[U7X9v杕(\t(^MC*2qáq/蚱Iٰ)hԘ;/./k&~ ыYn!.M+d3jLN,yߓtf,Z0 BԻ/.I\w Ad_'V[/!;`LØL7aAz+eŌq.?a1¥WX]1QT3/95,,VkBAɕ` lМso1Y8)#myh'{_ݟ$]XhҹRRŜb^--KVPI8 tYLܱ?X nc?]VDap K?|D,[ֻQoB\U`E/i#Z6=_AU$'Uŕ.رU_ rE!$L;NO,@J/LO?Ykeұǚ!GNb4MĆU ;?~_Obap!X&+z[Vu] /CRhྌJ$Z*ĭn0WWWL$[T:K*kV#6O.7>\Pgd<7_U~E8MѦ3Ii}@휆DB,  3EqR7x"]ucEӹ w|&QCZn$N6hb'ex_ s-cҭ4ë7HhI1R`DQaV;ŒoNA?CX]gXy])&9tBpb`?ׇ$,|.ЛwÆITKv ]S A-k$Vō)nPDjj: <*vsLf̠5( xR>/ίATn{)lA΅ I P r?S}E(4)-v(.c!Br&~[mZb#fC'+sT9zjzBU!/d ;L0r-~ss{GQR--Ro.GZZI ņ"]*UJt@(.K ">z0s|%"s6 5h`-k2@C_%)y4T{$8pXvZEOD,T-%꣑b~P׀yo,N"ڗKbfF%cjɅbܴVDRQ.'TUv]׻> endobj 8 0 obj << /ProcSet [ /PDF /Text ] /Font << /F2 55 0 R >> /ExtGState << /GS1 72 0 R >> >> endobj 9 0 obj << /Length 3301 /Filter /FlateDecode >> stream HWɎ+bٰXn7<>tρE$vS$K yII PqɌFxnHjwؔ~|~Y< On:N@jlHoR?c|g~8B,A{EGѝ- %G_=Rz7\_x*ҙxwv?ak$چOK1rbx[`f#?*g<=k"[MGSs McwmԴu68vyjgv%io)Il1-(Ѓ1{GR,~ /됦ԳZSvY-C߱+'qm':~Yjq!{|ء_,{Qpk8M6%QS*v%Ԉ9~]Z%lAy~} OTNDQHYWrrY"!#%X'.ljۖ-Ns57}%: ~TeޅB)4)_j BϚƱ_ZFM <4[2 HbL@;é-f[-T*E'YˮY{MjJYY^ӋZ4u~- efFu\ŞQ\UHA{ʯ)NdTp@N 41mhGb$/Ŵ] uWMGҌ&軌jlg'lvQa~V_ Ԟŋ,g: :٨e43G!FE L!IRQi@ q<^gFjrn3#s"AȅT&bQMfF.L \όD VtT:, D~wu~l:0~Rh16o\ |5ugC`ގ"s稉ύLgd^ݡUKa.ʋQ}a$L~uiMTw6e'|­_:D ֐rEw!Omfbl8]7s x *f GN ^N 38u۳Z! xyU% ܾwO}mXglHg_D'chڄxשGgFCNyA.E6 H/6&_xvjj$bRs1="fضH3ZfHΰw̯Hᗓ 8lbK, _t!e^tY+sӹ=ԕv qtMʜqgseZ(jTiݚVwL$JVGc>)1|8yVj߉S2;\ⶦɁżWDdCe~E-*}AWgss oHSXU6~:?j333Eu:g_PKjTQ 6rKVPn&)Q\GҐ'Uwvb;aRz̬.-2|nXowVU=kS'Y+OfϘȤבrwY>35(KIK#+-Ri}3#*>e[G )H  뜩Ӈ:V]31iT2(Jq>4yephjs#&3>+[Xȫ4]) 0`2._1ΈB([XyC\ɽ"0R,b-{Tomr'cZEI1`+{VoV$ZQxf@V!M=T9zbJjH .߁-ίWR2;A;NHր !gwEEUݴᮈ0ksu~er'3J)YTVĔ6u1B| 2&0,T!8VohJN%3|en PaHiT3?X>;t J|t9wz䓉Q!J,t"Ҫ'\G"E %ͦF'Ql[a'>WU(TNqQQpHa{g!V[ k >Oz$a@Ge&W!q.QIH8ȑC;YY+*8==ovvg=5Z!e0uN -e|Q_zi=@Y-'q,ᢀFCD+ I oj( KA"0;̱ܲmpSfMy1 lzP4#|aӈ\=Oތp=[ֿk׿'Q,M8ʔwa>B;)<;nv' 1v".:6*wdulξ|Ba>kPmy%; E a{bZt_֥ ,VG4(FCWִb J\hP̵*K:Kw^)GҼǙ$9 yYspZcG:-<6W};a u ĴCK]-?/jZѬ)6b7NޕqS|BJln{pkw/&-}iEӒpYO.~X(Z:?:Sp͞%50yҹNSi(K!6L_JbUņ6vL_{Zӓ:?P~v׾?C8$65Rs7 endstream endobj 10 0 obj << /Type /Page /Parent 33 0 R /Resources 11 0 R /Contents 12 0 R /Thumb 26 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 11 0 obj << /ProcSet [ /PDF /Text ] /Font << /F2 55 0 R >> /ExtGState << /GS1 72 0 R >> >> endobj 12 0 obj << /Length 1973 /Filter /FlateDecode >> stream HWr+f9-"US7Nr]!]YDY@H"z %KNJU"0>ݧ_rMZo_*?$* Bo\ S;i^ IP+/Smf-EWk} =5 `~[ޠntlL\xޟZ? \_  }'G}?(7FMӫ%kAjaA+'L~ @=<[~݇[f>>c]V7tdda˶Ϟzd4ʣlmY$ ߐicouEwgխ#7whfb߹buٓ^]t-s?k s]_a)h$.mqGDXS|(CpRlbF9Xس+?ժ}_{.}pVm&PV04tK<;clxyΡL(g*6w3xƈp-@< T'qzahyƖR"&٥RJB< MST\VSج(^ $3Tל Z@)Bo ǡo\$Os&őq$G-ekR8Rw+ǽQiIr6rC=}8FY,ܷ-pNV;sۡ.LUfV_nkƕ4XX{l42bpD93N3k 2?8`7/arǏ$@x.ۏ0';)_"\_cNoF;j9|l'cCHbqҶl` VW??al0s1|Q4tnK+QJbҵL[~^ Bʐ<# zY\?=LON. +8EţVyXI_"7UGx:Z;]~aO<"Y3 h,a9V < b<yW>.5}rZ)XhP `!4?ШK(M5:; \4 zmoB ?4 Aa9ƩU|&OxLWh :ĉtt!1BsG2Lz2"edG> endobj 14 0 obj << /Type /FontDescriptor /Ascent 917 /CapHeight 0 /Descent -83 /Flags 4 /FontBBox [ -179 -313 1083 917 ] /FontName /GPFIKG+OpenSymbol /ItalicAngle 0 /StemV 0 /FontFile2 15 0 R >> endobj 15 0 obj << /Filter /FlateDecode /Length 1304 /Length1 2804 >> stream HV[lEv槅^Z۞K/@k{,^RxD44@  DHm4< iXM 4evggfgggg@"xŶ-~6 >e\u d{#rwojlHoѮC_hg$:歷KwVj1F V.H1tm$ׂ<[!!@y/Rmb5 1٨'r3́79 CH"] /W? Cwqʇr.:To)\46[l'Ja.g"@&@sկ5kGppcQEu LG bKz! KضA9<ʥ׈}^!OgDF~E!2Q,|TkF=X)ߣt9i|*ea|"չҽ2#l1b$N˜nܟXJ,3їgQ)vSK\DB]gl;oƅڋ&/Y1Z{FG Vw v؛4v=_ףr3҄AfVSKT.N&"a{*;v Fq9lks2<qDg't^r4uG,4")!?^tRC L2权Ո}Kaqsپ2g*XZEm픒׋|r'xmSn*|#@l9:J8;8厷9QK_W '{W,x&|hJ%܏c:47dwQ~Γb6y?EN7C̑v6`t!GJ4c^@ͼsW^+3 <x:~,1MKf4J!;&C/@1 iTI7y.HӴ_\? #O9U-Fyk}3x1 E> /DW 1000 /W [ 67 [ 356 ] ] >> endobj 17 0 obj << /Filter /FlateDecode /Length 216 >> stream HTP1n0 2HV3^C۠v+%>`@> stream 8;Z]!bn5O]&;=c(#>V'3RtqME+fTu]EfsmPdoP9!_]Wd4"u^H=H'n[Ak4-.0b37W` >p\!D/M_+uB:Ih$;3e.B^DKuj%84+6rX,NE+r+51b-c\l"WL6HhTk9b*_DUuZKCF8 _!Xd(guli6,W;;VWOh=YS,TWW*Rm_6>l0#^hp=*GGHYLU\5d4,aX:6fV9_.n"h5`e 0*JQmq',%`QZ:*)YHCOp8jn.4Rr(bE2']$MABYoIr9>I\1M4iHOh`j=cQLWHN&gY& ViNJTcH6[d6l$Lj,<8LZ,^(KP6KZBrEtp6i0pOFGQ<8-]kP(.k@uH0T-r&pREC7)3 a^rbR0uXdMYMP#0nmaO@*eo<]QRc6I1QonAmG*i0'hFkbGG6Z3[3.8gMG='Z&a6tK ,/G/k*d1T0N:Hd$?E:kbm?4Wm!'s%&?N~> endstream endobj 19 0 obj 430 endobj 20 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 30 0 R /BitsPerComponent 8 /Length 21 0 R >> stream 8;Z\t5n:dd#R#XFYPUCA77q%)J2(h4bc-R5lp0:UMW-%e2rAO!ke(RQ[h61'n`;G0 IGUui1CcbL?@`?&kMlJ(OEk\VCtK):GSW'?(CmR 'fediPSoUc3f3&Im1,7OMBep\98B'^EEj=@&0_pqU)//9_c_cVTNB((W=L;>iWSEa ]4`+N/?`(+=-TK($mZpbH3D3mM\hM&M="mO)9krFU%D!%,tItK=aSh(l6kYMlilp" k!I!:M?:[Y!$+a<*<~> endstream endobj 21 0 obj 283 endobj 22 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 30 0 R /BitsPerComponent 8 /Length 23 0 R >> stream 8;Z]"bn>XO%#!NDYKk,$9.uhc&E3obB8>s8N8h.46sE=;Ce.ki=g]/Zri.:2cF:m% 9S5;*oP5#p[K+QILmuHXA"r7T`1Rlk,p_n6iY"6tY'.,+kYD1K3fOn/@-_!sk4+Cb l8],&Yp8h3DCquD),#)p/U!&aRq%i^$O1@b-I[]bI^D%>\s\@4o]>]KcRbhK;K<2a pl]/*CS>l+#U8fXHp`^t;KQpP]h8/KQAsCb1K"PI;aOZj8KNUiEAVHJTI#A endstream endobj 23 0 obj 314 endobj 24 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 30 0 R /BitsPerComponent 8 /Length 25 0 R >> stream 8;Z\t;%A44$q$k2a'QGDE0gm)D4R-DPdkTrIJeY8D'onTjAB_4:hpLF3(XZ)i1,K@ J?#0ra2a5_=+9m:R%oSfI/7%0*&504H$gl-YC"fC.H!u"?FN^:hQ=Y` endstream endobj 25 0 obj 299 endobj 26 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 76 /Height 99 /ColorSpace 30 0 R /BitsPerComponent 8 /Length 27 0 R >> stream 8;Z]!;%A+!$pt]@,?O%5mc'#A?pl,?JH:2uRaH9t_)Xij`VuT-=%7",\/%kW;:WAd Ub7Z+YS9QR&b"t<*j#c@\VZ^rqW`+%AWHuIR#C#!5W#EhZ~> endstream endobj 27 0 obj 227 endobj 28 0 obj 481 endobj 29 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 28 0 R >> stream J,g]g+e/h_!_gCtO=0f)$P%cIi8Zdfc5&3j_8$7g.@L`YKUJNGBP\poR=_;Dl'P(T (7Boo^^S:71(MN]ZQX/+Cbu.lK"p74pe1T%s.DY%&\1TdJhr54.M9au6>79n6`Q:4 PbLSZTLEE(8E@'*1mg_*eTnN*;*'V3+gm-EEetX%;Bo$ur2ss*N`.-!.kG_q6GDD' dKoL!8Ka#EV,@V!\j8ZFbp6EE<9cn=N6j0nf;(&;QU6bUD')c@\ 9-d\DA=cZ0Q>gIM$$;cd2O@&a;X,Nn_aP(]I1aRc(K1^ue> gF/(+GaKo$qneLWDrQ#;5\S(\$q'4Q,85`-8;S(=Z"WSBOV*FM)4,?B],R endstream endobj 30 0 obj [ /Indexed /DeviceRGB 255 29 0 R ] endobj 31 0 obj << /S /D >> endobj 32 0 obj << /Nums [ 0 31 0 R ] >> endobj 33 0 obj << /Type /Pages /Kids [ 48 0 R 1 0 R 4 0 R 7 0 R 10 0 R ] /Count 5 >> endobj 34 0 obj << /Dt (D:20041203095804) /JTM (Distiller) >> endobj 35 0 obj /This endobj 36 0 obj << /CP (Distiller) /Fi 35 0 R >> endobj 37 0 obj << /R [ 1200 1200 ] >> endobj 38 0 obj << /JTF 0 /MB [ 0 0 612 792 ] /R 37 0 R /W [ 0 4 ] >> endobj 39 0 obj << /Fi [ 36 0 R ] /P [ 38 0 R ] >> endobj 40 0 obj << /Dm [ 612 792 612 792 ] >> endobj 41 0 obj << /Me 40 0 R >> endobj 42 0 obj << /D [ 39 0 R ] /MS 41 0 R /Type /JobTicketContents >> endobj 43 0 obj << /A [ 34 0 R ] /Cn [ 42 0 R ] /V 1.10001 >> endobj 44 0 obj << /CreationDate (D:20041203095804+01'00') /ModDate (D:20041203095804+01'00') /Producer (Acrobat Distiller 5.0 \(Windows\)) /Author (tom) /Creator (PScript5.dll Version 5.2.2) /Title (br_urix_su_project_proposal.sxw) >> endobj 45 0 obj << /Type /Metadata /Subtype /XML /Length 1067 >> stream br_urix_su_project_proposal.sxw endstream endobj xref 0 46 0000000000 65535 f 0000036344 00000 n 0000036510 00000 n 0000036624 00000 n 0000040988 00000 n 0000041154 00000 n 0000041268 00000 n 0000045587 00000 n 0000045753 00000 n 0000045855 00000 n 0000049230 00000 n 0000049399 00000 n 0000049502 00000 n 0000051550 00000 n 0000051705 00000 n 0000051912 00000 n 0000053305 00000 n 0000053522 00000 n 0000053812 00000 n 0000054400 00000 n 0000054421 00000 n 0000054862 00000 n 0000054883 00000 n 0000055355 00000 n 0000055376 00000 n 0000055833 00000 n 0000055854 00000 n 0000056239 00000 n 0000056260 00000 n 0000056281 00000 n 0000056857 00000 n 0000056910 00000 n 0000056941 00000 n 0000056985 00000 n 0000057076 00000 n 0000057140 00000 n 0000057163 00000 n 0000057215 00000 n 0000057257 00000 n 0000057333 00000 n 0000057388 00000 n 0000057437 00000 n 0000057473 00000 n 0000057550 00000 n 0000057617 00000 n 0000057855 00000 n trailer << /Size 46 /ID[<4b28e8e976f4878e0cbe48cf7956ca2b>] >> startxref 173 %%EOF aroundme_0_4_0/asset/user/file.swf 777 0 0 14525 10155061340 12366 0CWSxxeP\A5[p '܃;]B24@ ..wRǫ_Zڻvw׆hS@ @¢ ICY;gC.| Rt^:FJYgM>%~ 5]od= 4}hg;Ll _%*}Hl?cإkXߝF:EI3n!P(IDH=\MQ#?J9vP A@1!JAyԧd0RA@Р$0h a $wЂ}> +f~y[nCadh"UsuMP¢ԓLgyػohQ]yqZ³; mԮDS/qI`O DܮGFn1bD=+ͅsdWd=^=e"N|B0(cI//{)gMuiO>BTȬkXCu/kK9h#FF?|rX\~7#yORݍc |"z;":}&97ZYp'E(O^Ҏmҕʝ"ݏQh|~]'5nPLr|!+>fHNB̈́_DAZ&S+Ty!Vvvϋ1(i>~y! 2eVwy~ӣM=Gqq "O f͎U3 ׬1E9aאg=+Z~N/Ċ>FѸY臆9 uʅqr"Bba/%y&4îו\_mqcYXUD Q_*޴)=+affFUfi)؋;o :]Im:^!^9l Ҥs(KeXٛ5k~qr|^#Ѹq ]9$]y9i0{'|-I3#s*#D\4 7Y.28>pJK%&c)a{8 F(F7|;4MlRyLTdYJWSf&/Ϝwpc㣖= \Ml7Œs%KQ"ja|6%[MT=e/"S]j ]ͩsۻVOEHHl==m7+Cq/vɊWq1CKPc;HBc`w[n[umz) $i@P5@LS 5`2#‡|MV5(T(1cPs 81I""6B.W.buA_ L@D@$i(F 1#lPS^l}WkN9>X710%QwIiV}cUec[Kp"xkkU â}Ep Q1gntz3.C@FRkhk#Gt!Ax q#ʊi'A!qR!XcgLxpQ/͞_\_Íg dF'|p\W!U#Uq]w+§TC%E'L1Mw2F ʍqnEO j+**n u5+]'GLb( I|խL8}5p۰cJ/Ksg^/cћSk-}lM~ǒUazK;N]pL{{[[eUUq?VaBgz[n϶2ve'DuWWYٷxh?9[NpVu'mót5޴&1\$q5k)Cw0ߴ%Ȓa*hGrǑcZ+[,An%֥>3Z;t*]|_Xx["iR̓;a:=DW5ї-z&aY%zfc gAH%|# a=qQ_?OunMfZB;Nhkпa+Kh!~ 9~J{Im|ĚHndiMk@h0crPy&jolE}Hq"}hM]J?&Ou a#sa$S2F;J ,+pb IKD|H ^ Ԓ(;%,5{NB-[]Us`Gb:Muxc粧1ꊰoA'G3ύLC4G z--/P~~ܘ!H|RX&k{J?euB>p-nzm>{Q%_(\R>>\oםMc{m EVn{)&n="N"gq n8rоk} # UQw FKj %\).!e:w@˴uҧ)&nn0LXs^?-5bݍ9Y[Il\&\l3XZj025@0fW Dnhlt'0(B-h*>(f5nyy0_e :xv hOŽ4()3 Y3?sht<3qs'}+Cߎ!KAfȮo wī埜Ӏ1SڷCLX!aH% 'lyVAx̕MF/%bzpe=<9+Qeulepy+{1o5?}%NJ$I@;3@8}b]2sJC[H˥Y|ӕⅧK!(A͢"K_M8NJ*k8!Rfw `8mrfhټ-]f3ApyØO dtKWOobm9=5v3Zؗ ڌښcCGHs;]߆o66i$Ym^:PrHSOSX1ym`9EpAy?~Izf˅#s3"-JLLպogchvO.mLGDF!$Q,Q9MaMai?,NzG圜+_7jay\{b/3TcrDw5Lk@Pc{ ZOYuxz6S[@{`vOp;֝Ԏj.x˲{lDrӘj^Ѥ;':?J--:=$EQ6~RQ'2?ԗ"X۶2$N0W\= ' }RNMVNJH&&{jyw}!x}vJHjԦ0t4u(/(髐ز=hnleS'=Guy(e|@aP1G:( Fbˁq IBθAPҴF"5Lo!,:m՜})aJBBc;`$XQ`S%W!M8ϟKxGP)1k,D^{]Pvn()j5 .%4ePi>K>`hC{'*ptXMtG8TFʼUX?,Zs(X,.O^`'_㿖S3lɯgd۾􅳺qx }5s'yZ=aϢR$TO2=DUkX0if!y/$,$>0--uw_WxI /z٢5^vKh Ԕ2kk|k7&lb|<(#wg#P0'YzeثN$ 7__9'BfbW3nz~Vb ͟36NlvUDpI R &hY$jUVf4/-a罄H-^iQX6I'jP|Naxxt`"n`xY-1W,L#b,׊߷Y{A(%17/~2tx(f\Bc"ZuP/ⳤ c3 eұu֐mJQSe?Γ;,"bJXQprD# Iޕ*؆U黗fmՓdzl1}SXj;@s+죆/d=PѝR J IN> Et:?0!=l:J[-qmUA=>]͛M*]"VNH[║ ][1 7/¦ZFh 'Sg6tL pNlSXd}Q8Pu!j׵)zބ3Wgr+;,Sb")j#J펧;2rpsPe ZYg,TEcR#*/^4MAZSc):=HSF\ҕJqD]olX G;JuصD~㕎q)Z-f k_:W~z|UQ n (֡JZTжw0Zp8{FuuH.+:* N%ẌNT1Qc5+t#t~ ܯ7?ڴ-3t>D8B,ܽ?vxn2\uwmrd=ƪ{?q\]3hT-EqQ \;n/=@MO$i3P<|1߼"C+0A/ u?i @"ڗ%RHL vȓrPJXJАzgPPh1fi39fFŁ!m.39xH(e.H$MkOP~◉#Hi茶޳~r% +\HAOYLљ $&g" ? }]kgv_nz$ /_Oaroundme_0_4_0/asset/user/file.txt 777 0 0 4715 10153655244 12400 0Project role out network across sweden Phase 1 proposal To develop a single node Objectives (year 1) Partners Timeline Funding Funding The long term goal of this project is to create a state corporate partnership in which the state funds 50% of the project and the private sector matches that. Goals of project To create more active youth and for them to less time on inactive (tv, lunarstorm) activities, theus improving their health and education. To create a place where youth can access information on issues that affect youth (AIDS, eating disorders, leadership, teamwork). To encourage youth to share knowledge and work to gether towards common goals A platform for debate Requirments to ensure that the democratic process is maintained throughout the communiity to ensure that no youth is excluded or continuously harrassed The platform is gender and moniority balanced TIMELINE Intrim launch - end of january launch march 2005 with full summer activity programme March 2006 rollout across Sweden TRAINING DAY(2) BUDGET Barnraiser - technology and project support and training me - develop software, develop network, ensure uptime, overview project and be available to administrators for support and training. barnraiser (project) funding/economy. Stockholm University computer club hardware upgrade Stockholm UNiversity second LDAP server (to create networked Sweden) Stockholm University administration Urix - project administration, editorial and youth coordination. 1.5 administrators - role = liase with Swedish youth organisations. Create content that addresses issues within youth sector. Ensure group electorial complience. Process abuse claims. Process inquires. project funding/economy. Design - daniel Stockholm University Computer Club I'm not sure how much that's resonable to try to get from LSU, but i'm somewhat sure that they don't have a clue on what stuff is and we would be happy to get as much as possible :). so a outline (or maybe a maximum :) proposal is this: a new motherboard + processor + ram + fan for the webserver: 993,75 + 2.062,50 + 1.056,25 + 187,50 and some new harddrives so that you can provide lots of space to the people: 2 * 1.095,00 If you have the guts you could always try to get a gigabit switch included :) (for 4.243). tot: 6488 / 10731 To that we could add a yearly administrating fee for like maybe 100:- a month totalling 1200:-aroundme_0_4_0/asset/user/thumbs/ 777 0 0 0 10166525100 12117 5aroundme_0_4_0/asset/user/thumbs/1_012356_t1.jpg 777 0 0 6053 10157616055 14306 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222n" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?#aVg bQyXT⩫ԪƘp7<7T i҇W4yg=\U!!9 ) u.jzvfiCq4j@-cxmZo|:Ea܂-an`KrbFMgޣ78r=PQp*gra_¦P&#8y^9R*OU֞-&?렭*eϡ\JaawH?•s3E9-Yֺ_޲g?#BAt r gGvlxa'i1rcS ݏNsh7jAd:gOWJmr8-2{8kEbP; aݢ(/w ̒K'7tmf9F29-RkPc=zgm9%%䖤Zo 4Xcr qntLnc$(> ^Z\_eFÂĹ<Woc/-t !<:3UbABP`Zڥ2p9ZIsExVcuhqsux שX9vBy+3_$ڔVWfd{,xCY ,=GjV*A&w7a}j{|s,cl1U caR3YeǮk1"|,@pqb"}Ҙ@GTS7duMSGr\!9P8d+'n2]np<i$7OA41s#>5C#eI ;d[Ó܅.4g6W?e FiX*8c#Oiv?zKzUYmr8qKȡwE21fw\sqV4{+!VhB~ߧz @luj'F[+W(܍5)%F>t|s8dli*2\(E[ 9 :Md4JYI`)Ųrx{yn8> `<A jdփ؎#8 yP9i% [n ֐ƻ7gY&>ɴ\ɧ'=4B;Hlܫr&PHJD;~"1׎("׃K"y4r@'T%#7{ 2=iIFVR2?ԞK|cґr@,d:"k?Ċ5f6S@{k/hYbnЀ|~X#l$UdQ"W#{-)TdT5DRs [~}IK*Ew2ހ)4 r SE`k1Mfo~X N zfM \ɂ{]5γl:(W<́xѣi0v*sN,dpF>Yd}7|sry %ʞAk>UF2|5@Xf 8(]P%Ѽ)7nV̻2<`8- ?=8^Zι%Э1ҹCm]!I7۲:dJKQk"#Z0O\Qr9o I.V)8?: S7Չ=p/qC`Aɬ=JKh`+W3mTm$'i,`.m7 Qj:< ҦDnJ`S1Ibԙ#o:98/X*_ k`Mtnz"~\lsX>#Ʊ&nOorQc @/VEi(ȇruiQ=ESAq䴿E#|@yM9\>!x8c&vwZo"(Aqb۴Mdk9ށj{H_"A*@;E.aroundme_0_4_0/asset/user/thumbs/1_012356_t3.jpg 777 0 0 1564 10157616055 14312 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?g`tCcj#\p Ҭ$SGPNPݐl+䎘 {Շj@qWcgg-$%HSNր-50?tQEaroundme_0_4_0/asset/user/thumbs/1_01sumeos14289_t1.jpg 777 0 0 12144 10157616133 15645 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222t" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Xy,z}*ؤ9czWy~LJ$Tpx.C{BR0Unryqwr=Ļ0%}s w]Pg+uoxP/ v9ۂsJ$RN ñ^~*2kWgA2>F!}Tc }r!o dw99b:5mU\#|QsꍧbeQ.;>+M%\n:0Z& qX~sʸ?53!+0;KQGӮ&`tu5$`ܗ}J+L7kn)Q]uZ-g+I#5J*"V¶W,!tqvy*'{k,.LL9὏2Z/.G͌z|?n>/Q8]K#d|=YORkFqvkRx"{nG)R&hWeSqkV+0.]i:Pp=AXejZzrֈDG}݁8ҭyIm$z&&XvU<8ܕuǖKz9gϥzgK;C yD.A#$>l[h^xvY 9}=omMT3g9a9fr~k_HY 37Uv6Tel7U R)I Uynov_S)~ԄiͫtSPgW5,s,X Edj#&^O(3$APx{S8 IH55EFF@+'`߭]E42;*OWAԢ|Qؓ;W"<ۻi}><ckpz;jG~En$, lgz2;[J̥FzԪJ8 ~^:VRwpW=3]}9']:AJ HYX}c/t. )secڈʦ9?(㎜zRiM}q,aea 2 \`V8$Իd jmXȣ711ϭ^֜=8P3}aU~@WJɑV*\j(`| #+/.4뷷q=}kXuH6[s LzWo,et3srY𳁤2W5 ܎zV[,ז$6dxF#8 S=TJwFг|rvic#Kctrkm,cFn ڴj.U2'X֮,g6vө/BOS:uŭ6m?8Pc=kHsK;yRX+xG9#< Hj6\Nnn0W;M6Y$I'nQs ~RZ7řX`ߘ{Cc8xV6kK.9@2}:&[j~q_%qWCCּ\TXmq³Dяjg69`Ղ,}6V~xoS8$k?*tIo\\pp}E4[GEOx)@~3#ޅu?|+/V.ᱏNgv" /svz`}&7洺x'qF*?)IaJ#b3ZB NIe߄maRg!#GJG$V5 oiC{XH`v {6FCG_vSs{F3oZi`ZC>I-}*m#PүaiO˴xyׂ/!}B;U yWokW:Ic& d/I88tWII^iye6;pH<\?dRJ(g1Iڴm_Wk|͒xi_IeP>+yf50J`p3M|H|DqFqk9L,u%M$s;#=Xz %, ܳg\0- Q9 sOdֺn` >t1 VcxFO>;lw/|HkQ<"QGl=UvImn/$QU jP7|R؏Cbk/?Zs vgkOI{k4+4ќfL7sqb@1r=fU N=vR^Yg$L 攷3S38(FyRœ—ȍJo!?*#4jaF2#&_4<1O@j;Ryʃ4c$`BM W30)^i}I- 6v:EGCɂG}jv2.)=4ne>Ii ^i؏HGVkU@dvo`၏P}kx`̧JPϮ1ǧZB)4m e*uEN3y@UG lc&k#]?tQ]fF >&k qka|?ErǰϵF]',k*(`|Mփk?.m9WaiXgG,o}?TQIF=5oR{UQʻG] MSOl{ oQE5?. 'Y>e9W`'Xt𲵌cq(v~ֶUu[9dRh6(ը?aroundme_0_4_0/asset/user/thumbs/1_01sumeos14289_t2.jpg 777 0 0 4145 10157616133 15630 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222:P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F!Mߴ9#[Lkj1ۧJF%Y cGj-vI֦* N3+I%~"+{cS襀=NHv \gxdtWGɴ{Aq `2ryzxSl-f,8{3KORV؛AΪ,j;ӌi\d-BXѢUR0"5Cql>lnzf.G>AXA0t_ 9ҵ58Y2ۊV=p)AN) C Ń%C1P83r:#گyy?Zƥ)S N(ю.Yc?:ҵ META05I$[vxj敎0w S-OyfKr`q9}V&‘Ԉ#Ik3_?G5V~)jZѶ:mg*&cPmm%?kj_-ݘ~zO^yrd3cܥ ߊ.[_jY(hwdAPe@XX1?vŜ-p߁z11s* gy?r?5%ru4.,P'}''4QPS*`P$ji RO~hKcI$PRA7Ɣ38b:wa ~"^K'e",`݀ኀ}yw`w;;Wi⫙. N{~oTͤ`֠Uڿ('*\Ŝ 3aroundme_0_4_0/asset/user/thumbs/1_01sumeos14289_t3.jpg 777 0 0 1715 10157616133 15631 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{^jwN>98zuYi6lb)خ0u9G{~iDR?,b*_'uFXN~QǧM=M*\;d׫o1jlw|Tx9(4bl1؃1jQjY!|Š0e 3( tl5l㙭[>1Ԓ\_fߚ̇##'(5yOnfRs_Xێv!QE;#aroundme_0_4_0/asset/user/thumbs/1_buggy-blad273_t1.jpg 777 0 0 12667 10157616067 16052 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?NϘ~:¶3FUf8U$QhZm@K)(_yޕ (i~Фڻ07OQA]3ƎYCCcꖫkeͩՒ՘J[?ږl 4@ycP+պ24)k-0JL+&ѓE4z1\'ub<ȁ.Dkza̶:lUKԋtp|p2"[qHSZjoand?pk7>Ťs]HwL_W (.Po_h}+_OR {rTvx'շB\l)'LDyb sxY+ҭZ|7wqm62WUe$Cw3^Crw{~c7Lqڙ=Q$^sX~'.Ue#k4ѧ64譮RDm<U4%hU]x(2*s#f!zs\Or,53OҢ-doV"Ik^A#`yx4;}j_RWRU!=U4zLb$,h(Y8+}(Nl| ZpǩghCJ#ퟗkcQ1#$XRjVڲe,сPTuf]T8'*OrXZ03˙d'hvW1* {TȈ`s }M/qCX0y5EZ7JfK4TGzzqsw2b#p0sǵzG-,ot_K먾 D$Op{CW;WXIt&kV)c Qsy/xJ1̍5fޤn=?A]1+HtYKб0? 7:Nm<.<*47< f)&?nv9/q 饍J$.Ip\QLco:6A5|5סHЮ=4r XqOsGҳcZ 5%io'VGǑs[+38fA>`zsyce08>qc`SΝYuc}tZԮDp,ƠF#ݴes4#+-LL}(iu]ODeX H;-cIz6Q|#p=CqZ„sΠǯ0ְ,my4h ONHLddcZŸ2Y:zy[xt8A=Ƽ⇁4FmgDH!\+n+g>m㞃]i K</Vvk~!^g8YB)V9;v5k$r\36>ʒPnol®im.eXmg}x<+kKX"ӴB%yiʳ16z]7;[mR%3OO>rjk4M9r_S.-Z`X2ZK4q5ڛ")Ήo8\)z5iiy5{+XA: q$xƥ9Oނͯ'Kئ]eǍF Ԏnn@1Üus_jP-KX5MA gGo1=GkSamڡ D@|j׷`N7ì럨[ս-ݚAaF*}N,\+%cxPB@Q͞[][ǰ5 y '?jOE0)篦OS:v?*OzMa$~5s)BKsPn0eGi ĺ*ƒoiSvg1z=+uK}7BX[Lf{K+$dt`x]h;}~Q{Էԥc"Xnd#8=cQ5'='Mv(""6O?sy)x6pq޼Rqqt:ܱ.Frme?3,{j =C>SYt#|7sE};llTMkp`6U;Y[Wxbk"Y$|<'5{-Tin'PiR2KKm$cP+XSS͖xlYt } G 2]_[7Lzs XIre-\}a0H#=IW)c3̗]Wd0Ქ㚨ׄ_MVp'[Q 1E6 $;Ơi>II#g*'NiD4'Ʀ^"ǓGwO`jlf?m~0]^]JIbI+r;;tulvHÅqAb p=OI:3BguZni [<=xzS %H$;x\1I`]{4 d0I3~G 4+y&DGbɆ%= R7b48S9>)'ݹ@=0;V٠gR <Ӿƅ יS F 7S:3 RjkqifI_`b>՝?Q1洔.$gUnv+$,ۑf^R"?i.dQ z{QEi<59]Ωן2BIw0_y1,i=lp ޳n<}Gyou@dݜ?NQWO M^y5- :𽄦L|VKʤr7s25;9?xnRȹWM:12G-вwjXl {s袴dUQ 2`q}mjRH lIƜڶב=hccԴ[2\׎M[u8#eU Q$ק4QIFܚmcNiȷQ Ck<6.j dp2OZ( iNZ?'8ShhFm߆me}VgĞG\k7=MRIM\ssE5?aroundme_0_4_0/asset/user/thumbs/1_buggy-blad273_t2.jpg 777 0 0 4554 10157616067 16027 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Wmil&V7^9#ָ϶EfH ]U>UB(0Ezw5fyJQ߯iB=vay4lֲ-=*'#1 :PA.mhboPSʓcf5gߥծT@y1^!a!aϭsSHyD8ff>dOOa׵\甹lwL6n82p;s\/)S\Ǿ}njښZvSXԝۿ=&Y]n%ZjVڅPvI*oq(^wM"ŠDZ\ʷsG4#B3 WJwy>4rF}d~_ $S9w;Qq]A79NQws`zfy5͵rywP9 Hmr#s`&֦q]Hq|l[cYl[/?_WAclj¡T |ֹ dHGӜSp>⽮mn頼D<3[J2~S==}kӯukk sTDYIq8'fe)fq37o}#3[E|;kW#M_ 'VۀIrNSgD7v vC+BP1k9>]>-HѰfRnlp@=Gk)ody\"mŤ99l~B3)-JQhvwwQ5#ɿ,3J0Fy ^sT9W7 #s@0AY{ LsMf6ѥEi8‰V@T` F{iΜe9GCVquiE>dk!h*ry|8:UyQ^?jJfe. >Yۿ#;m5sȏmolz2Je!st /a$uie$2r ;U>)kaEdK4mI FI+}[p03sՇc9s]JUJ4|tK:xLQ"3;%σ.oi٥b[ɮVƚ2LH'ds=@)S&oCvJDR[0w.vϭXO8,q8j'o* myVGٞ)#x ҮIt߭^m" (8~W 5uqA*޹5^.iBy{V7ێ?v`zki ׀~5[A9Zx~Kg8~93s#.myk$ibyĀ 1Jaroundme_0_4_0/asset/user/thumbs/1_buggy-blad273_t3.jpg 777 0 0 2026 10157616067 16020 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?֗omX@ 1ӹ> ͑`#M:+6="T;@#OAA:s;4yhCY%y#p?끛e-%m>m䘃,9CU5HfE*@g5O r}L'mjEq?ZS]9|dg|gI`#iUgSInRuua&!~U*h=j-fF?*=ЀIƴ"ҢQWJcܺ^RI$8iӆsP4ﵷGG11!+}Ε cj̮0ɭi&s:5c>1Ff H\=H=k30&M]TfѲA~j66# ;A<F\Np\M_P"ăg8Mv2M{B0 Jsx]~|]uf:ܟ` {?mB+97nyZҢKyZ)Q:?}8] 9v:-dR!IչN?S^&2N.>^"1O^Wu@inDիrjhT fU\O2j剔-=mS5[+g,df'r*OO';QP,0E-$j2+TJ䚇ZM\Df-4mWȈ|n2%es,7ReF:p{I(0tڤ}V.7?09jT+*2Fa/?r=_`rF#lz ~uZOӼa'7C|<^Zğ4QɸuGo,-2lu%#FYHl1#[zJ g"uG@8$dzuUCSQyFBǒ;WVgU*=qZB5J~,tQ隬4"GQ-qp:4dWB[GB+Uk|%0r@)G~T߽Xbk[_`s׶=פ>y7Fe&%`>ѻ|UI7Mp5Ю>6BB3㎾W@ A\_9 BoHq,j0OB33qq}XՁS}*=?JSk\<;!}NٝFܿ G :nTEv2 _;r@Nz{>xћS$b vZ[,IJ6ߔUS?nJ2ӌƈZE:8¶hmhIN?ax}moZwl'- zu]2j1=/!8?滰KkAѴ°ɝď?ֹJ]jbJJA' *I6y{ư1J'q `BA霎)z:M,24큿16zJݽKznihI<q @~O5sCZg,~H $zcV\k19Kw;WH{;x<Ye G)2`}㓞Gk:獊] kioA~?=V|6,yo+'$ F{wp sYJi:ԨXU)V^ 5[Ar𭼆p$yR5,pPkv&RѶ6AZ҅l ǖߛuuM8EjviM/,`vH+t!(\}=:VܱF-_xr6u`Xm[` y e{k鶒J$kx5] Ub+z[إ{2XLRU.ò-pqx+q^^PpEq1_1ǵuQPsw.V(J)sONݱҵm03 qOkK-A,V0BJ>tj\[o!0A-=QM;2V34`?CXd2w c3Y:̻Ϋq 2{>fkӋQw*dMVD7% $ %iYI* \.4NeJ`oaǠb3叭>#f9ݎkawYuַQZ0A%nMN%DE1]em4*ZN3#+! TK>RYKvQCKSpGսnMi1|u9]|L[oJyj}ҹ©eBq41tt4651JP~JCÁ'ίoҶ =ֹoy?J꤭J> m:5-N>ONVq$q>s 5g짢9+|gzf^ ).6*±^Myo=jZ唓,@~o03{VF $C~uRoZɭ1szzfź%ʚ5̎5_V{Qɮ6>~݋Ǡ|F8٤ɮgM-NyYيW[WQHfuU^Icb%O/}? :ӵ(oLkU1 HI@$]ނsi-ͼLN1 1m#5\hJj1RF#D 8'ZK!\)+5k ڡI#u9= kk{|!qяYTr$UUf]cr@ x)Ѥ/޵F@+WI}N͋n&Ib<,NU){”Vгyӥ"LI'Et>"?6/k28[7,Z-e tV$`XBJsdTpo?Oz$OcC8ڟs+U(U@;mv3rzrύ6Fghe!`HFc߇֪jP#E(NĮ"`61w/NŠ-R7 ߐ6J]_\I8NyVCq#߷vRP馴w5-`PŧFEi:3  96kf[*Ivg z}?VXIXա_,™##S:cƦWU&,1R :)R3KTUHh<ccaށdG5$WrdHbOCEɇBƓͬi׷#9LFzNq&$eD瓓heXaroundme_0_4_0/asset/user/thumbs/1_ddd_t1.png 777 0 0 67275 10155156632 14340 0PNG  IHDRe IDATx}w|UUڷA:JDP CTBX Ŏ`T:@qTzK~{8Ϲ!:y)k^kraM{ZՉ{bc+}QC Bw7/x< [ @iY1a+|mo+%'NFy^0[dYnbf-%.&u^才l7Z"XÖp1' C0@8FDAQ¼DQSwY1c`bDf8*( P4d s+4DqToOZE.J⢒щ}zLJ/GychY̶ZmAN̾%ڇ15XĶ_Rz<:Uy̥ !`, !*)I؃y.>x=0kP-5ko+{&Ƕkٛ1.:5whݿqkm8u-(\դ+cD,21\y<; '*䀕Ǯ$6pI,TRj [$%TkPTj)[T_Bpqa(`1뱵a^z,X6v?֪[IդzjNqj}/***Ջg|h^fj׭26&Qv0X#kwë$խ]]iMAZWխ'V^FؤJk4M{Je9gժԫSUfZ՛$&T?~p:>/lѬx=p8TPJ]>c`DŰ#bo 8OaA Ys1Q>~^8Ut!hqTuxc^ms}sja c[~Z[>ߨQ\zbLLԿ(`II,kåV(@=e?;$^[$돉1`1Z0ߣ+W/:^Eٷx1(`G;jժ"Ǿ .W@vWwTJLhve}supaFu4ȗ>lg} / 8uaWvɻGj-w8 1r u㢼܎. KBp8ܠvs ,[! \Rs`YY/k^R y==UVh/xX1`b"fdEQ# HJy%" _LIaMtP{a9d.9* *ء5 {6_$A*‚Py{`ȫ>²px=^ Vx< /mw:x]pl' ]R5 , oe5:uy?P'[8VJƀRL\`ɆKK涥cCXD{VKR,IC`LmR;0A˾*C҈ gZE3H5;fsUi˕DEV°՘ԋEuزF̹!*Cq"hY_%2W+\8Mv-DJ9ִ EZ(FlM۠Yޜ pTSzJ Ep`/*]}H N?SnM}l)~lcA/1--b# TXE+scXn^.' E^|BpQWtx!%o-\pJ$aXԛ%_o1ގhQA/4C00 ~8!d Cؘp ͠SvkTh#1 /`Pfxwٝo0}_ݖggg:u=\ {BPw?D\GT.:G CXPܢ|j^NgF&;ds]":;_f6s" e+>"/P{?؄̌>t|r<{BBb.7\s5۶m[|7fXtX:UǦ\ &^͉3vhycSQHe1%Hqf6(1A$M ط(sLx$w(zfnݺuڴ˖:jwׯРA[~C 'r<E_!^* +%$ Gx˜Oп8c<>! 2%j/#qFDf'q#ǥ#~O^}hٖe<{ !##ΝHIEEad"m@ $@/FQyj$}ILe$K?spzSyMIl2;>bJBj雂M EĤDD$+ԨQC oРKlvדQ5F⚤LДX- N4direA:b]/Y Qv< PǤ! ԰ h!ۉͦpĴ`|耄A0?BĈ.I?*+Oa࠱jkt> [%',3U!׶)"kظNsk֬%=.F<|^dA UQ `V,#^DR&|VaO<V+R/ 󃯼3#[1>rlAk3j;-'9 ؘ8c _[1!sEs1ұb?\l_"ƹ3W.ߟZպusc^Z}}^/,) CY( LHY!ɓ']vi_DP}… (̊]"`<{#arHbTwWj:Ձ=` $z IǦ?]VVb{cˎşv_,(ƏYkYPVfK(GhtR.`„ REEElܸQ /W(PE B݉G+fjnBWyxB?yr B.9 P^R°e>PnDnݺ]paٲeӧO_n]~fΜ 7tSi8,tm߾}ƍ{[n{不ޙ;.Fc9| ڴFp6D`5EjBXφ ͎;}üp1PbQl6nܸxb˲eY=}ԩS6ƍ_}&L_~ep4mEW"53xR/9nJryB9M̰`Ozهj_4/Vm*5٠yB/?ֶΕv?yW) Xrl>7'BҪUoРA 6?~~c{NKKkҤɺu~? 0'NlҤIoFQ8uWuBZA(κ@lBQJ2L6ErŹC;zPqj_'UW4" Ѵ bϞ={a 0dȐ!Cr>~ꩧ]wv}A|OSts!gۉGnHhK#h e4#`xl}{Pϲ::2TyZ#@jVNUZAT'tr e) ԉ:!mxac dd~.W8,]i.9ֿ5lM;an_6UGiզ?*F*`+Cn ]sm(&>syizq^@rŻxfeSL%Nʏ60:3PFfW8+E (E׭%Kρehf R8{q^͒[@jFl v: W1 D $\2 `X7Rٻ%BrM-5,DTDɪW L>?i4@P?DJDXAo+1'T 9lTGd]crʃ`P#jbTיD8C9YLmR 1MO 1?V?s#t90[p9Vq% Uk7S-ʒtE倱 VlW unDBG`]v1EE9[#[s-\x CtOiGr*h"uDZ&=.]:ٳeOJqq<#2i9 //۳g={|7nǏ9.q:wGc.9vcA48]F|v)ԋ#:1ľ=X%͋0a)XB !̢/:АxxM?tҬC0ALjTȢ=.HC9&2Adl~PI A{Ei(:$qrrP\lH%g~Ce? 2I@ZbJ悝5O3v4E2JL,\2:bJDRH%E]&-{=@..7 |Ք. Ÿ/3) 1֫鰿|Gl|"0f s}S ۝u ^T#8DJ j{Co!@GY\e=[*45iW`qux\&zB9a*Dُ\(a| D7ݩ1\X4cS- ^pt0T@б[wWkQЪeQisfvQHLHLHHzS:--0ul7tEO7 eoF=3=,Ӳdƍ=~8pѣ׭];z?,?/6r˲v1w˗S'O=~sn=kܭxj޾}CEH2^{qk2֜Ē%K<8z`0oѣ?7x0 Ȭv-cT=F åo[+W, pzԑ@rн{>`=wٳg|Ox/}^|Ŭ~N__n?`򻆜;-XwxhOuUDS죬sgz7u)''g„ F/>Z5k=䓯m#QK:n  IDAT`iw_{bɓnOzus{?l^qLJgϿai!8`0ضmk^>zj׾݌g\p>v //Z蝙D]x1qK(Q}Nj{v?{Y  ~~… wq߯_^֭_#s=+tʝ`"2\q - `>ӏ֮]{3>{s?ZppmÕ*ŕ ZeGnYR-B׭;wXpẵk`H!Cwyw)WZekYE1B?;,xǹ']w͵lId 0`;aHMMMMM3k׺0AWt$`YhǏ? }+WN>ٹᰅ"dt⥸׮5 faQQI\\) ~W&R #/oMSM]1elIN3z_xGGۈY&=M\0A^-݃gX*g8{ɾ߫ `Sx]wnuUs׫獏?6H-+66 Ѳ -{Vb.8=h={$efjri'aHCRDz<Șg;`j=mD@7! BndsMbT\!7$Nwd(p*rJ8-Ҷ03UJFjjM Ak6HJx{!F%X7HE}yLACP]i5Gk/⛧;=dYJQtbB0Mg Q|J0&m]oʇ2` C2lLʶ(6oH{ ecS?DVBe99!$!fJ{H0ٖZS"RJ=x'3Qw0e*32xs~T}G&!ҕ$J)j LH]B-ɏ6&0f\07JK"RJ0(C0aF8J\ bI028pqpQ<(}jdzr}28oA i47nŊYf8~¾u!`cǎӧOo۶MHLNKKK]\/>5+ hǟx8`DB7F)* iEu$BH~ݻ{%?xS^7n\rs1 o^|ܹ-[ )AvNQÆ?oiofMz^>y7ޜ6pu,X„8捛6tx}iS\t)Weˀ#>:}^‹ɽm4l W]~y˭:t'oڴW^,/{%'3{꫹s~ {\t1up_|vKJJ^9#Grs{%z%K~韃NZrrr^^Wrҥ,+R v~$ږHĞ")9LF&Gdff[.33cڴi5kܵkWݺ233Ν;?^z>lr ER.$5j^_Nz333{*Ud@qqIBBŋ5ov=>CvۨQ^}u%wqUVUTMnܸiM>p&333l52`@ [rW/Y/) V~7כ6m^y믿Fjjd˗/;ߞcV+|ek3rrsl]VVŗ^>|=zhVv=}t\۸̌ロzgn_<\7EuG8&3ڵc&L[ZZZ)>>;;7kּ}v999`YV0 ,X]w$/T < L @NNN~~~Ϟ=srr-Ή!W:_~a":u_G۶iZV l ;'''''OYQQQ\_nys`Hj}8ȍhx<əʤ%>ܦMѣBeY9919QyD"T#bj~bk3ګF_:C 5 ,z D"EͤFyH-[.Z]g_y /7f#6ԫ<"GS|>޹c1cw[d y)҂ >b߲믿ϝWƌtgyV_}uꚌ5~`駟}ŗK"KQL]U"Cԉ,:Bt8p`Zڨ5kr1(+ Au.FMml3gLKթS֭@ pńQiiB8nѢ@>/m6lܘ6 fx[2VTPT\\\XP[lA@AA{/ U@/oUAUaMngВw[6P\a;v>˶m/]ڴm~ذK΋-W\{| EjǏH6dh9ߚ>Y[9mڴ9z{9|`~^^N:] ?u6k2FqGmڌ$7XڵϜ=fͺ?>}://oIII={pme< @B|Y(Aj+{x!LrD,9SYx۴m1cճ}v}Ǭ,#_P&/Nu ;O9 |2VZ6lm3fvEH6ŽuܷoWtsgm߾{_q6l(+-ݱsg:"wmsc⒒|(.)\J>){~饗5=,XuȾ 9;?H%r@mXByK" P~bkg{p=Z<*) TnEz'}w 9&q$nִ+c>6M ܭUnlJOj3z' ʫS&KC=kڸ]^jttU>?bg'RnS (! Z "51-l[<}^Y%~͒EZr$cBRJut,"_$B\43n #g`ZT|،B}ٙ>4xP C mpED$rvb-4de>M'يG`J  @bDĺ9>TWI2ZM@t@II0dB&? yÏj# #j&&:Qa8L;SJ2`q# l~2,Ҡ!KQTe˖wW!0sx|\m?:xȉ' 3"JQ.Ǐj~PƩycBp9-})JK޴i3 lڴ9o~+޼isIqMwm={.\g^Dشi?l8u'v) U-]Ma~[,[?t<H ԪYܹ-[y0}oN.zb.$Y P9)q}}nظg1k/믫Ww)//.],Xwkڷ۳goƚ @:tɓ32)q3O?CT9s:eJ~~k1bp`pݻ2eJzk:thEkAA׬I'bbb=&[% ){*U*ϙɓO>9g'}9tиqO}.]M{NHQiuYPMm빞֕`LHwуlZ^ 7M 5`?`#F oִ'~y˖ɓ_YwW]ٲRo}w=쳵jРAFWT^ŋajժvֵyٗ.;{F6~K_Fժ;w~k22&Mx+n]AՏ;^)>իLyԮUk…_ݤq͚6O>ZxIǎb-˺kР~O:վ}Ą:6Att ]: /.--dAd|_ XLw<j'o*4+sH7B@79skܹd|.>۽ub.o9^iB&rUUe1~).r,Og?Rr1|s \P5l `N~@o9$ U1{z* ~I @Wy.\ 2Хwr_W^A.QK讂H#f(@,AACN¶Qܧ 9\Ti`Av^b6/ʎBMx2eHy`q8$9] S",sǀ"ԝ`yd]'~t04a,i,]y]HΗ> fOw3ē 6mˢ _],+ 2&?J+S-7vr`0<@TƈqDdzd3lR FQiJIBD*L.^6MU1 VyxAu`cL?Xؓ"Pz8,*$D!?ͨsĸi}4@!dri˒acA_!rKP=[9Fh]F LXNL%CGnhmօHl *D??PwA49A9 e|ҘEt2"u4oێՖ!o1 ,#:ؗWEt{ `ܱQM9XBfTSF#[07GSdew؅*0gaTSaT%E`,+\\$߆DUí|amTe p(.))u ,EK%`K9ࢸ83tJx <ͱԄQ\A31|6I7ގleÆx[G}\LQyRGyaGK/8ްa#mut ={^?~޲u}owh(--裏mpÆ GÇ6|Du69~4+,)/!ZQ RIG30Qw87"7oApukg}A0}UVl٢q8fc3OsYH*"_d-[wݷw_*Mf:vС͚5ytc;_߬iӲҲ7}+]Ѥq̵}UvI&>fA֢E?W]ْ3ڵF<ЃC رsU>p?,?XDBdQT;hjC1հ8 i~Kuڽ{A֭kiiYZ>on];tpnݺ"[C%7e S\aM7֭M7u֭cǺuZzJ.^Tխ[#G0`ݻwoѢ{}7R| HLH, |^o~AARR"PY 苕0B@$@WDW *Vv 0HKg=Gf78j]=u!;"PLv)OlȇԓMdEJ[ {'ZB:CHE(.+$ui r-o21]ɱ9Seq|ĤxuzGחy!5 ×!0SW#bv)(j+̶>;;`@/Bg#ɯ_+=$>PP6e 9K[b%`j.Wk-(1&7;Bu5me%8CvUk(sCDSvd}L[E5&DupYbk1Tȧ{ tn|MI[e> 7|լu6ҡd_c[(}%UL){S?6ura*:v ZgcO7  7j2iW~Aa&;aM$ӀfcM鐰x/4o} )S"KW<7~©ӧ_Ͽ T =S}n a/L}‚sf/*$O  S(BJG(__BH\cV=XT>|ѱg{'?xS?߶[ͷ 8^^;QZVpJ'E%G;'O==UaO_> ķy777Zj2w1>n`I4nܭۍbNNMkw~`ϿӲe}f͚[h|iOdzf==?̵ٌqqquվVU/i虼%1:T䈤2u{!֤q.[vQqq*UBeʕZ desWlYre?xuAۧӿr?h-o;vzTR\R֮]z}>XUn˶_۶i3c4?fMACkׯ۰,C$s>m}E>ϟ|e"X̼,WuˇW[:K/>|s))};tvܸ'RR&$TY&ԪYOӹK:tx߬XΒ 4򮿥񚔔3ߙ1))}G}[ݷd礤}{mԸqZ5U , vݞ>\'=礤=VzŗG>cƴ=2#OΜ= {d 7%/ݷoi3O~ %K")rO4rd y ' a랳;w d 0[Xd`3E'z>TLrO^?]Fzm=_W-eQ F̔_cV֯1B+ bPj;b>$f´hb JH3bɯm'*C 3<^y!3̨P}P$D~%[tu M t1`=Ճ(6B( &P2ބL9!t܋EFNbn`J pF9iwt^Nb⦝U{wMQ,$Tʈ N0E18E z΀󂋭3h} 7+ jFd=BFқIBϢOېLs\MCpBtƋ{а Q' CCBp9+ 2z8rrEnqk*Ə:21 ˑn@ofL7u1rs,L˯͞lʲ/>sƾiIY?Ds>;u=,\lٳi:|dWC컕['s9bCrT0tnwfjv:M8zCoMԩS^} />У))/^/ Οa#^gү$%_JJ?8tȰ )2{[Uj_9ogdMIcW/+))/}i@n %Y3g7@fZ,,,lۦM 7ҧ۵yGׯ kΟ0tHOVNJշޚ)oӻ7ݷ332"çs\[PR~3]7a$Y oٺmӦo5zj'x;WJȐ99y-[\W41c搡ΟOO_zJh֬+8Be-l9U[T\4d];wUR%=}iӇ |K6m4rRz_zy:\{;}_juj@C.;vo.+럒|͚5~۾~իWU1_^u+[=zt˖'3k`ZdVΙ[I{mskv=! |쯾l_PQaQqIInn >>~ȐT;dH-ۆ aæC>}&77`oF;@„NYLݗ&l 2ƒUIH9qfp@`\%_:aAJ1H=Q= H}{nQD2IYbph 3&1.d=}L k+Sw- @XRM-Y3w1`mn|tEWXlV;L[lHJ}#фFu.'glɔuu׈"_`/Bzĺ<]݌s 3EubojK $}\'i9DuiT>Τ،KqB"[~ -.*L^|7 H r 8XgˆH+Nns5cU LlH 0/ޓEԈZmjϡT7abB1B;i>i.5/n /Հ E]O0GKP=vbD6<"v+! Y[x9Zi/ru٤V>(+ȶ-\oO_S:v(یu?Y0,:i-EE uʗ*? hMI}ȐAŃ}K;[ӫDHp||;(2|W~! `M+$7pS݈@#%c 'ژA'bh`N J6 X $!Lk[D<V4J-jD9UTNٔUe0H\Ё]Oʶ5sѨڛI|JoN[Ld@ [RFdKZڟ=,<O:7UNM$U($=@h'T%MJ|B_)꭮Wˎ?=hP'ԨQ5?pƭ]\kkj٢ҥJ^9*߫Go}C6۶JNҵkC>vjݨ& Pr/)7"~:mqW^v OT}XEE8iҔvϞ{[٦1LQjVĭƿZbU yr DmMw2ힴO?vztӦ<;~玝x|^4h޽^瞛K=>}fw@N*xظ? e0[?deTTT_fsg"Z~%?ry{[*W^ d.BbG 1`; p_|mWsݻo'~?_~yq }E62eYVZeÇ߃V׽G?r 7 8"PW'|`H!I>|(S^ywΟW>vܸ'vرaæ-?ocuH&Zd^z}^297g[șgf:t? B ؛ӦLHxI<У<Ȇ|s-L[P(GjcY97{>`cvMlfaF׶=gn 7*mcX`1fuT1cA Ldʇz*-m,X6BRbD'ҕWwvC!ߟ 6x;bbbz|3 65k:7n2QtV@Xe[xٯZ0ֻ>|W߲{lSNNΝw/-h |p;$2љd7,ww7no3gΎ;J7[7ntgݰhѴiӮbݻ;̙37>b_n7tBDK/зoH Xؐlڋ>g4uiF;.HKRUMG]#lص{kW޽Y3GG6o~n[qn?e+ykB2/%bj[T{HҥكoKDw?sd}ꇱJܶQ]єF"VM5QЭN#s][>,^|Xd":_-U-GD -w.+" =ӈ3}T2ra;MQwR%Sa ێ5+_ ﭹjyiW 3bO{53 )TQ C08^E#D%9衕⚵ Xi6[=ӶQXl?kgO!YHГ#9W BgAN>f2}\y?Mǡ9bmu2mR7Wõ`  ]p;gp&G4ttSKC#:U JK4äc"C.},D^('^>Α"U,0'7!dhdb-R(ɆKi|⌓}(寇D ,Mm'0ƈ>!y龊ᨤ2;y[6"x`QSAe8 $l(jyǩљF ܐhB*!R_E:s.SzR* +; 6AD4orJpȔSSxωc}-Hn؃7"l  M$YbbBCQV\7"e9,O` YEafWD0aipm':mL]3Ԙ-!%~}j$c9\JP aU}سO^-8-k3rz1jopвn>V2j84'¹hP攅ap=f\aNdE;N|MS/zV+v& G]Qg"Â+"uNHp ^U.~tjDcUuf Hx؀=+J[hNȒEs,[Hpt R- _H*nCF\JSXjG -tt)Icf 5U t', ed},Ed #ip@a=6NصP@e؀RyF/㲖04Q&X)^jkfC!x:CP,}HSk$N(i{O؜ͰZq(峙2'jfWE}7kx&5a0b=T̥ەzcj2Q)"S8바;:C|rѣ%l-oBY#+`IDATcZ@V0$'#)A*V:gR&ΰ;1 <6g#7$5Cm%h]݀`P +ՌqfG@&D`P@IxHW/a2s!+>Opn.HQkHbT(Pt],j<3U< Ab'^,YrŤTO y.n@4eeV^?C٢)<7JGeT7sk=ƹIL 1jr0SA6g$QLR2ձ:/O' % sqҐ MZ,UjuV>zJԂ>lZDHG:I+d6Hx^~%)YEdŪ~'j`N*暠nl߳7q GNV!ոIzo C?)WOKpyɜW pO'/²v.jWBjH 5IT$C3џ״Z9gs_GmS3 ,v:,4G@CQAj\Ggwb&9Ymf-v 9t䠎M \S7p˓8Sn! ꂂ: K`"U:QZ24h+ق]^u}bC5H)@ X%\$=Ϭβ ÙU:N$%Ҥ-8`72Y;cKӤ&'?ǀPog"K] j/?hN g(аa);"d6|ҥ`mV-v'-(^_^̴cKw}T{Beo{>ۿqaVH`&n"R:)֕MhKB?mD 5 +r(;*aZ@.d&,y )w3eb'4ٍۄL}ɠ0;M&MJYp>p,;w=4qmRⱬq_-$ҒmQ)!^?j"E`EH)k.{cBcqFS-n*a=y[* \vN߯VsІJU_@}u{G'cG:ʫ,g@ lOÏҰʤG\5 7(ުث7=m@K_b羧o=\z1}|3UQˑX6EeN|/#'/X ܫ ͠3޸>c:Y" ; ZɨѥS} reg" {ivךVz*yB֐w\>E=Kғ QY[ >^X n5,_o??/YeKU+݄iE: r}{9orҥ?uǿ|oOO5Pi?Lwb綬Xr]/xکkxr͛;=iI[ܲ'&ҼS0_@l}2"_.K:YuO!G`4X|9wy-n v\Hv[muo{?ƛf z_/s2khO$1*X]!={̙=ghО=f[ל_zye'=ӳ>RQ`"q؇LWe>Y44umI2B<ı?m Ѯ=~<]{͓?yK[:IdI&u"tx/^-Y!/{lk[уt6HxTu>?i;^r@Ƽ/Xx}x 䶽h[ש /*[Gp 0uEï\}G I8 Mo`xx/>{駟򱏬=3::z%K!t)hVYp3Kϟ7_W\ӃCbmh-,:\ 颺!r LH} Ck^E;9N7BQ/:4: #w[贾L=nG^:ʇ9sf®p6u^jnEZTPM7vl:g"ؗ1ڴH_tΗAfŵ.=w_?2Gɟ=쑴9E leJ K[Kb+wޫI(7Aλ8ҡ1g0:ϼ Yx/̑ګFFNNY9G{צ(&[\0@4sm+-# $6t:9b: ;*pD qivx3 hlb`-̭pJ^CoWO Cx#'6a"u! 0(  ሥs?{Gl.`yW/уORD_ߞ;g~2%-)n*/񃹣p0{/+pHԷch{?aQ_{DJ*IENDB`aroundme_0_4_0/asset/user/thumbs/1_ddd_t2.png 777 0 0 16634 10155156632 14332 0PNG  IHDRPn?'cIDATx=ixUunn 9* $cX8Ȁ 0*. . . :>dQ4P)*k%$!$7{Ƚ8[M}cK:uj;Uunus6xk :$@@+hs2ZhYu6 hq``1uېh =M7,\ڬiT^XZ\1r8x#/i~cW7El&͚%ͣd^7eBfm7oubؖ'9}.aaV EFD)Z'un|J@v>mFqTda0Ll-"<U%%^sM{ck翐{|Ày:Ji -HHfq'Ϝ^+1XQ~6T!uP|P(2(VEx4"ү>.^`Bil⫝̸{ Hġ,BLijG oL"̘$غ]p-Q{8c 1- 'Wz2s>~}X>Wܹ㫯С+" L+ Ż@D3J$=^HFگ_S9 UE{ RD jRPP [j.%c3ݸPՇU6njJ*=e\?%sE)"&$w4JkǤDDz[nup܅:w(m[pyP9|G dC|'q:rZl%mqEbp n5Jp=&]B+AЊO$V9)l~*N.cLF*A,c Y?jj:TA` CbU0:EdS"P(zG^ p itUI]tn0Z?I:(S\ W1DdEĘ6P) I*UwAUE(C&1` {]/Xzgk^8Z%LvƨJ QTB~J ?-1myd\F#|˖Yuȷ"d*D+9VvbV Mm 8u&CQRc3U?>eqV'\F;޴iȑ#˖-k4^ҝ)[¨jB| 45aWxDSޱuִiiC6})n޼Pފ}eeeEҥ?>/b[SSuo-..}r-rիWϟln^UW֭jrovmN7-m-[҆]{_kɫVZxyn9COjJA,ċm۶3ン]~U~J>O6ujFffxxSO=ЧO?yf3fXp BEEEvӺUO?x;[À~݄'_>N<Z.02Ic]UjG2.|h>ؽ=p$G%X\IoEt6K2yНڴ*铦lI$e$xqZ `%J]]P4K~mڴ¾1/7?? ++#yf xxm۶+VpHrz׶}r̴)[5t谧z2%erpzAVQ ._hժSO?]^^az@yԨoYf=z,.>nѢAKkv=GFD4o|ꪈPѦ4@m Ԧ(uZ\!rkbm^f|Yv1!Lࢅ/Sw U^z1OBr;DŽ,. HHM:zq*\^zaI]==!U҈CKr&p1˽nd[ل(3T5!DEpXG $flsaMByf&riZ:NKBB3-"휜D(k<>:fϞsiDu1ʢnǜm[]zi7! 3g}ĉ0s欯Zܻ*]+sr1)GC& v_N 7n~eg=vVΜ9G4/VZ쳹;Mm۶2dبQ#ͩVX׬}uqq/+-t jF&\?H欴)wZWCM9!p +Rē;1(*踰=v<}ۡijȁc HzES?9OB).14cȀa ShEqZAPRʓ`Am\:]WXC8:C=ٻʥuSDO4OluPĞt 9%<{6M#F9Iq9bM lݺc6îS7Ӧ?xӈ/.x ,Y +=*zG%K_7͉pIr!J. 륪xͬ?Zx ŝ:v\K?7߲bSYY䮻&wcz-?3kލ, # V}IQхCoOB!ā@زu ^=eo-ܹ_Ԝ#yy<4@XR@ncGbFVn00!TLV ~ܹk[&'͟F p oUU՘qBuukWs8p۴wΜ9~`ٹ-Zpb<qc˴&SQ'+1iai=1t/ L5 +JqiCÁ_WUkZ^ ᠇ކ ;B GO]6<!T! }m2ׯG>óf @>~JJJrRs`pڵ_x~EMgWW7#{ƒ۴i7'LsC3$A!rdc(@]Jշ?1GlkK!9A貕OHUI7nT ^H)"VWC-jARldwL8)"GÚ0*'w@.ٰC%E""/1йn[+ FhҤӧSXXhYQZZ׼y34"3lXƍwc11MD7oas5 zAhEDBRLumeǁ{XztĈȈj2;HNΉ)S8~ 0X;yC Ν;oW;:t]\t~׎];_I@p"sK,C v׋͇Fts'a!0oXV[:wܫW :ч$^%rƍ[ܵ}Ն0O|rv>?{ʰT @v # dրxL\ĦmoHT]Q iiWaԤ}Ͷ* 7K-ҼTf(,T:"T(4CILt_J wI9LhϔKЌ QKKQQ+3 &mF9E)FCc#'Ln>Jrfs@R)qtc JT6>!%9xA5t:Lc1P&=rUQ3 f p-DJ]X>EeH"Q"t…R)#[6/'9ᎈ$SOsKl 3 _:H>/[<ΔD%feEz7dXTA_X֍a Ht(<_t&OT̘ZX*]lL5` 1dr KH2$H5SjGEl@)bJܮjAh ID e4{/>LiB?luJK7\n6~CVR,zex5&w~. nҦ"L{LmEc#Wqc&HXrQ"C;wLY'F,NNXR?Sak;쬨cy2[C2U-$6 ɷ"H_ tF ]4'nHt$T}s.ZĴmZu=sdX$T_44&MCš"W}<1D:>CVnecqn) s+g9} KNndz&|~ 1=:.]0A_b^7]NAoT~7 ~[mշo)wa'̘wĄĤd9e虤CV$BG2YҠYA0,+(20Е@`a{W\~I(t!(Dܲ}ӣ{˻GIhs:-wfCCr].&FE77}Ĥ %l~ d|fK1!+;Ikaߗ7x~ڋ,<" kZru)^i|ș91d&G\k+6A? ӱrTj`9ͣ5yNv%tj\WִiUIENDB`aroundme_0_4_0/asset/user/thumbs/1_ddd_t3.png 777 0 0 3125 10155156632 14302 0PNG  IHDR ,-IDATxWklTE %-Q-P *I " 1E |P(T%ڄCJݲZU1&R ,vWp{1;w%>&{Ιs9K'w$ȶp׶-M|eۖG>eg-)RXHj-ݡ??W]'N!5ai/ MbVo^F29*?D2S.Rkşt&£D]I"b}@eeeeEԉQTUUU*`gILUX`>hi[R/ֱ%g55e5r{a1{D턜>R;._JP݌Gh8G[c4CpjN KyIR BQLd$hoixPhĆ06lcCc,йiF%bҥ9%ŵ=f gV>y @tUNP<cv"ֹ R!Od‹`E~?ֿ˞fY!eڗوETf/:0<%"|DL@ի=}QZY[UiLvl'gQL*k 1laS8|cDEs`\wM CM2@{,8P(ή.UdEK0XȎʒpgt).Qp [X`.bo dU $@8D]]&u 3#|79 /Yl3‘3' yp]C?ZU+W'".^d9U}{z:x&&"٨&!\UX)l "o]u_@ݣ~B-sdJʰd}U݊DepzT57-0P[=^ 82!ЅP鈮 -SLB"&VS7=\G+醻j^6,ޅ>++gtV+׮\Ivj2 ׼5b=c~ ڨD^*uڬ[[,lH q&4HGNUǷXnn*r:P#'uq5gb=|jvSXAK(B"hOE(jЌ@8mcxKrT5`E^k⩡njY!&orIqy\t2 |6ʘoPkм8S٬|I#M0h'Ot(ޘbvӮ66<*p%S=70R#Y r90sY># j< K[L%$H0T{Q'8'=r*:x5bI"G ypP-]*]@ 30GӎG?ZB vYzװ' ̲,DөI0_.ICy qq%RjQKipTUf@Vp>lwXϺ {/- C{:cɯ8tnmoF,3 5$ FiQHm/8~%&(H!mt <%?e,1GL^ ᷸w[2Zg9Aj+ݭ{ lqPӉsUN&@YaQs$me0=Ӝ~ۉmI.C=:{^!wl[rB>H+M/OHfUq,H'GQZW6Hen7ĚsS-i("zya1:cqwDy=0k^HrUhϘȐC4SNI@<zt==j0QRFz6kd$;A+sҡ/2dU{Fm!N{svk&7ub3߯Jn ۳޵,#9\ `x򗮅m-te*.$'c;akǒ_lv3nPWv4O"H,\<#jt <8riksl`yG Tvv#?jAcn>8i."Kp̓''ج+/ElJ9RG Ǹh|\ ̅NX̿ƶbm=V'o \nF~V㘒KUŷ'ۙrqK!]7Ejޠ<'۶խ/[x]2x'Z)ƣ %P%m7%? %̷SIq:ll;u@ wRi=7#Xm3RD[ޥvr]--Ū3(#l# m?{yF02:w]-{;St@ Gr38'AGQn4x9CsВ=O֝%wwlOy%ı'G 9?J˾k_ ^CpOΘ鍼.0y'۽IϾ;Cpr0zӹxD_E6#:#=@9דjqk|דz?ںifʋ;2yOk,]4SȎDDX՘u# H%Icu$cjt;gʚ%5-|$3m)=ZxCDCP_iy|Fj_K4\>}6cw,4 "[1WAk&dDb5E 0PGq]rO'>GC[(s_, H}:N TW~Lk]0ly#;״i6[ʆ d Mx/úԗR,&Ѩb>Zc`cE#/?o5 m4j3p0>9{SãEgi%eS&YI$H@Rj۰ִ?| HŝWl:M4r(c/`t ϵs_Z9EV(zu=kGǾ5m EG'Cm]z4:mji;#77 2U¬yhٌOڼ]iKtѲH#ۿ= '9aԬʛK)q޺=;N[R{/-Df^N8<={.ǥQs#؎8fMNcޒk4O s{j+-QO~9¾{k3$ eU8@q9;H6(@EM-U\e̷EttAi',@}>[- t>Y4w%  VOS]`?n-wsĿ!(<\~C֡"\nVתOqVo̱)D\ݭCTPp8=3i>1}VFS+t4OBo^ qCS~&rAr>Wq;k% GI.z_4+6Ky#mzЦ,&SJ@w=kJ7//f@cOjf2FsPx%Ȗ9&n0,$:VZ :SKbm`jb^?3ӡ<9缂Fx~?+m=3d9-W89l}){e8֭,YRuP̀3V rZ'xT5I こ)q%SK cЪ܄(Fv8`wrmye"*In񒫌kkrlNxw% s="sV>uHap@UNN/@⯱[IDMbz*TKqGW y,L0)A3^M5]wp[k,R"n(T> +B/{NRZzm%WМfmV>bW1V\s<زBo] &q=(*;|;)mv,H+fOGɍǻg;rG*}5Ȼcp%Y( y2Iy֟_ݥ´DGCڶ/|:[F5Q'Nr?QMlS}Ρ=a}qHmٳ~ffii&^"2i˓O\FtIc&x%YT~xzw+BZ펫-]JGCxV<=MmhzNo'Ass D#RψP&A=A=xC fm^o CZ͝=Zӵ+;h"VW=S($|@5f5?s^9|Av#?]JQG;RgX J lS䪸ڸR998&9~E;=7KT8qVBgL<F09{J[_3dO/x{V\%:\'/La ,FWR1%Ƅ+60u_0@682`x:]4U )`ZF9B2s3{hQ,yF9jkױ\M{pw4Sݻ+J(N7qcaroundme_0_4_0/asset/user/thumbs/1_DSCF0002425_t1.jpg 777 0 0 11160 10157616251 15033 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?AL@( YbѨCX KW-.: #;=L W!U. +ǥ4%) Oʤ1w |jiگ9d2>8Rpzv%pH#Ar1oN)EsHpIx`?v:f0Y`)ۇؕI.i]ʷﴕ`!fr*^]GUcnX:ZZ=b $st'/$!x0b UJ+WǤnxT]C)2O ֌_8t7)}.D6u#8?)7LnGCCy,Hma_z_dY=NZ_Cu540DRyy\m''ڳR$uVcpy> _\}N>m$QEbYw6F ]1:$B`r9$`r?Ukqj4Y_$2\cvq\oDyO:LN,FY^2e ݌_9\%0_Iqߕ# @<``{/? ?isHab?OKOOvt:爭|{mNa"P-<ك#>Z]Оhd3a-N,ssٕ^v26NujhT>1'v7*@vͼ(PT !wwU-"f*1Ylm_1e~_,GnGnZ1HX=p;M;Xh rN==UH׊Ԁv#)t8Md7F˄' W!y3 <@k9g8X{q#GlBul*9' 2Iі5 Mk![q Я'?V-ĂBpm$Eb-Z܋H.@}1X?kx?iHS]mc3L(8L %֧e5%XQa\+FA]Hn<++kYbϸ|֛)iÌ2Hqǧ. 5X=DwEa8?4#wPK4 E짾OkоJyQtp ? #Ӣ]`2R T#^\qb8_ @QKNXg@ rda=뺆b>裡%qR#͜S9'$Uʑ<ر%e/T Ui?picgs&<#wn]V }KN#SgxJ:~߲09\\7?C]m.?k'q (:zUY5݅F-(.2UaAO[{'ӯ6C;Uۀ'1Ȩub]i-ۻ%H ,DvBy@;;}q[bHǖ$RJSzO&xq%|9bX4;dy8*,AD(+׿\Ԭ>lLIт_DQ'*SxlTÃϩ&4 1cB>η4=VdUCN#שilzo5\g=qPijX,F6KD\`['ΒD9/o*M.FqIK4º5x3%7;V%ebXa amʕkǔ*HC:PU_J ۂ15ǂ R RwnRH=p]*FиUp֢l#J,e939ұ.A=)̊ f.ws jǎͶFɬB9Y\ҸNӤʛsʢVƔ'ϒS5~1^@̐pGA^Og{-1dN<ϊMBIeI]@fvs}Y+G[Z-VѧWު*]bl[|!?Zox<{U{ij]]>?wM1nr"ee%2Q{9QVB ֹ[Ri/V ujۣm(وTm@^_msd* QO pqk.s87=>/is;#BJ-پ`Sd6;{b-:}*T`IQB7?QH/[??1E\'fgGڎ?tQO*~?EعP}?IxQʀܩߦ9Y\FF Qc(3t?OR(F?1zSb2/违6WHNCaroundme_0_4_0/asset/user/thumbs/1_DSCF0002425_t2.jpg 777 0 0 3733 10157616251 15023 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{ nTG* N#(=T[JSkJwa}ZHFAŒ+7N̍jmV7Oz4j-4Ҩj^t]B5="IżR0GiNZ1;ͣeA8'8h^=^d czJe#!:tGUi0D݅rO^q+KtXDes#m#wy|"X mbc_ƤPx'\$:tmqS$@^dڞ^96|Ƿe#*5yO@d 6r+ 1mq?#uUn"8<z&٬b7l|?ky_4r i8{sJذO2W7ѫme NCrd+uۋ}BYYf]9鎜t|QuhܓЩ-^捯k֬5O)qP@ :~WB>nK+*r Xv#25'*/tϡض. t-Td 8#Њ 7wT;H4oPgRc~<pmZ1ⓠu"sI5ztNT8}q.1? Mr0r3|ɴ񾰓~2p?b;6o v[ [,If8#yi^٢\HB7P8t]{R\n jZ&w I!u9Q5խbq+3!Vn}893NП9kHUIZ”gL5:fa7\=BI?e؏duO^S~E'j'S?Gۤ~F]Q.jwJ|9=MPiC)R}Ok YGEbȝGg`犁#1QLdR5Ӳ*p)?aroundme_0_4_0/asset/user/thumbs/1_DSCF0002425_t3.jpg 777 0 0 1720 10157616251 15016 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{,ZGܢqPI]f˩(e+Iے7c2>zW5KH94+_i5ۄy^-Hld+py'AԱU"c᩽nX4K*θ?yG&紉7u]IV:*-+[GeN (91\F:ai&;;XF @=xfg=0tZkKH[U@<+0O̘?jEJv[ 6cPo3\iӭ4kzqII=(m($aroundme_0_4_0/asset/user/thumbs/1_DSCF0003753_t1.jpg 777 0 0 21655 10157616263 15055 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?R6SOj](ZP^zRvRѶKj]t6"@\Tivm\3!-Pr.aO[F*"-XJFXDϯ=c9 6=A^Ӹ^s ,Hp:?=kO;(aL4+N =q Uẍ́BIl487 }*&=r/,?9,JwFB{s$-sbi`wt8Y%%R *[= RI/Sɑ4. bAkF<-} 2.Xoayy-e=j]2ԡjm(_jvjg.e.ʘ';ˠ6{PT=I;xUIhY.S$'1ֹ!Ek؂ݣHKl'| ~]~=+8rDkzgJm5ЏkftYEpt/-؏ 4S>V*^(VcyVm`"ad0;VvTْ@_p3^\?"e3EX.Ы9<|=2i^=Wj^B\r2GNG96]]u/oF곳G$:TPS5Ah$ rL"'wœ#waz[\k cw*']p;uM/h]}ciQ$VRG>ln䞃U-U1أda4|dԜN*Fy|sI :{ YA9'$rjKD?ni7RD"_L9n2}['&t0^FyAe16.W!: GV:qmMk;fryؼC:n3?h؟ҭǫi 8SU8[ЌRb&PH(Db`64`*pq׵Kӎa)=̹v7g21L*'sQr5lC%m}Fˊ \@'#3Z7Qm<,pb/2Nse9  `s-BUHi e6,-#36WY8۴M;HB . N85%ƟKo , 9rpz r3UMJԆ|vIgܞסvy7':qS{| Ɂ}=Zu]iDa/;G^jM5[GIfQA?U[j^4B{r niMbxV}S D<8zΖDէ-qr*mS$.)jj&նK%ϱsNz#AU-;q*o&kQGȭrS>i_7g1ԑjr=2 ZJDq;"KgqKt~?+CH_}Xݤ)*H8X}w>Yq7\´8I4~d-6}:4f4ư5Km.m#D]nɒ=A+Ǽ/e- ț *F1+Dsk(tf 3xg=Gk\IMw~aBcU#fYOoZ/461ǵfn۝ nOAnT8-D(uEUku-"zbכ-7陪7 ҮkGŅV¦()ILU? 蚂PنҜqVе-d\GlrT6Zf 1TSΝWe; \J>EFH 4^ %AF|֌FT{ZW:mS 7_hQXA@kQ|r{zS}ʻ-U.ys@=;~ XEo%Q4aUgp݌A+t6ZpɄE;.*{++}C!SnUYco {ҔT!͎8n1LۛO=&tx W̛-IJۙ$ GLnAZTlLnLQ\Hp}6f+^W0.7d @*kmaX`†b۔xz ̸VH! )SO_qVR>dE-=#W5l'O=Fd\rnX{{w5ֈ1ڠU!_ǯ@{I0i*4%^3ggbr0 'UKh\Ex&V}pA, R"P°aڷ uA`ހ$CvusMԅ}p>߉$>z%H7ͼ;c4>+>λANENA$uhꑘwSzS*ʣ^Jؒ02yFkg!!(ٷ!Cio4wQѐsf-m% tp真YwdR7$Y.idj/Nb9TWV:'ԓKK/yKΙH@9 r:r{UK3YN2rsDx{H$Iq7O #mmP/?OMDF0e95.k% |݀<18SKS <5.Ώa̘Qޥ-nfk?ڧLyl[K8Ogď[d玃hR* 5ݢ)e\cS_/tH?6Yzzt<@&B-[" ]ߨ * fWxq ʨkyTyQ?N6&%c T7ݓ%HsKTmKg4`U&K=R`H̬IT_ 6 [PG$T`ҡ+o]hdXd|d9MKԞ O'|dD eI\n'G]7u_%*@k؈Tg+Ѵk"'2,a ?:9!,ws"ޘz\\DT sDhIƛz2c('e{n[AF=FOS`!eU:ǞހrA%qK qr};'t\kOzy[s`c_^[CzrD<=/<|nKض壖HYHxݣu#8`pAF)VyRD $r3\V)d34Jf39$q~,F&5oZ8i"<r1Tx  Fp-Ј!3xFe$0h#߯4E[QKUbZ ӭťXڪ&gW=2?xsj_#JK\7܈7M\үMm\+ ͏(:-q*F$ QL\씒2nĪ!֟.yyl"9>:& #xQeE*^4-c @+Ű1cԊOCCC+%O2W1?O-bf9a7v!_>W@^IxE*ͻ*QmJ-y(+[((}kR|ua3#%}o2c0}+SIQwTH(v`g}v7*d$â;8=*kD6($ 1tʁy Ʈm6 .v8^~\g"K۝:Mrzx"YD̪w|1lGjMw&0&t_h1v9?NK-I |t9f2LOt4mm{(XFs߹֛wV1-kɼg7, '  Z"б9;1^tn-.Iw=C  J`N?UMd+PT{4I'JLZeA,եXh$_pMS76K>ccnxF,Wr`ʥYzjRAvsv|I)<ۋ'Ȯ" 19&Nvdv/C-Nu`9*k\A ?/Q]Eye'zJȎ+ľ81F<ΐ5ٸo3іKơFcn_iąGO'd;6sh Q#{#*Ȅy9juEv)/6=)eR0qQ\C$SoV_jTp=dnYh m~"MrveqKb&!AҦ m?C)  kOckr"/j_/ڛ?zx20@?Mce4Cۑ6G9{-^Bї%-zpq%\淖Yu hQ ~?J=8xhcD"7Ic۫t :Keý,62 (cm'MMZ)F)W0S0g ?@1 + kYg\pH,2pH+u7#:6.'proZĞ *#i0Em:u_k[('oVcۨzcǽSA#Z̹Zwe8omk -ԟ-EB꤁۠_[{0ib+CFU\rX+x//СxMRU΄ b1!X7 l4]g ,kvIP!?^MmO1f4Tf/ѰpG3ޢk :KU\+W,čud2CH:HSޭ]Y ;jKۄݶ(p bO'ah]/DOl 9'A5,$od8|caћD ?li#F8QG qaxr&t8'ZΑq-Hw3qI s6:#FV: /r+cTa|w1$3@>;V~bW4 `0z⯨-OoQj 7(NfMOs}Uw9t#hoV78ū:_Ԋ(X6w.Q==iUv. Lk1  t96C- $*YOM}>8Yw!@s` zR.?T8gH$\m_-@*A$`a?aVm+K丆BZO.E}ăsª Icv.L(۰p=@jRS[+è[KI|)}p:'n$zzm 򪃑Uwfjltla zZG bVHd6ģ9n>V(gm6om ˻bUI*e K'bh2 | N>\ FN@9/cfYF.|08N{b| "w"$UvA gjI]ꚭDTgwM.K-[)ʎ!?!;tr>S9܁Б럠5# Iq{Ħ=&^1ܠyT2~ hRpbh `dΨZl ,?}ik%l#l9E.W$ܵ'* %\xkVXO"CNgb_ ʮrXn# O*-ڴV&Uc1n{yz3Hhg 7L8E!@"V%W ߈(pL7&ΫxMGcې 0$1zMn%Y$ d 'ϿNMFմZԄ1DLW=G>IjW1JM_F5Az|/6Ȭ#fowq6>wӿ@#`տ,)] !rrI$c?4ynIn$g傌`ִ?#Ю}kW1-1+H?Z6\0uMb` {$H8}m'M !LZH}'iO\IUTԽ|cmHlԏҢ?z"u?z{In~3.&?aroundme_0_4_0/asset/user/thumbs/1_DSCF0003753_t3.jpg 777 0 0 2243 10157616263 15027 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222* " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?KOj<ޛa<۬1Y8=?5[OJ?HSj!GF#,H ? Avaroundme_0_4_0/asset/user/thumbs/1_DSCF0004655_t1.jpg 777 0 0 5710 10157616275 15034 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?& nֺQxZYx5V]pUSfl3CD ^B|+p{Li \SxN*n;SY9HJBҋJJO4pZ@jM9šb.w qO+ 5vG4:˘OJΚ!ڶzU)"TќY4xFU᭫1-Aeh3vRjQ?TpDpr)0DP8O⥊)=*(Ky-;nYAsjKAszQjkӼƌW81VI#3l#g5[=+>?)ۇG&v5 q]Dh?@Ҵ^fD1\t[*NPZ[="q6'o'`w3/Z\zwjј#6?vC\? nFcsl>_³f:45c_Y2>ة?Z߄A\VETzT"#"2M+k 63z0.Pc2ͫћҖkwe0I*S9 rBy R6SK>U&k }1ŷښ5.0RDMuJp t=Z[MuoHBXEk"?w i yZ],zջFe2ۓ {dG`JKo+k_-㡩n\]Z6alZ]){ 3Koj"^B7,ߛ¼n\,4p~pjgYxaȾe=M奿$HZ-սyy pc7gO^ u}ʻ)5/Zw= 刍>qĢ%ܼF1i8{X+[z\s%- eLdEyŧ{aI #P.ֵ4U6*Y ЗFn3nrrӣR^rj&5 mm,g}Gw!o2j`83j 2]&OP5ߥn,>MOǹR:Dgb)#VHeR#GHݟLUT]JY` 는:j3$bTCE7sg$rGZi93فzTؤ14f8a\5-4YGEH>nQ^2y(\G??ʜ:lGOsRFDv5%cwF~Z豂ek*|:[ ⡢(A=@";jWP7c#6{bP!Lu R*RҴH_jaS9ҴDEzӈ*(ZI 3'S0Gzr`tP#?j?T{j(l".aVkd9ϷbϷb) GTS붃Z9SAi!Ml;)O^JuVķHIưys2囩ZA+ʧI7a c#f%+|zR}iu;m7si2Z#;ʤ~?Jy6R}mHHY2kYYc*iGol/c{u3]@o01ڼ&-]7eAڐXM)LErԅ*fPdMJi_jVVii4NVV+ii\P$˼ BCX_׼ ˏĎ)ަеtP6Ҥ~e~Ul9{$QpXS V,kHFAtem?rKoJ4) BqCr@ mWO>%9%x9 z Qh!k_5Z@[ OBpXQܟ1O5e2%]p1R :df*`2ѣ Tu^ZZrџ@GX#X! y#F)=kZm\O1d01qT1L5Cw}:VrrFha7g qm=2b*tm)}Ozz\pNGnިnѱʚL+zV N,?Y$`o6*2Mv T4R8Գ7`+G&4p(==PxHXfe#{J}0YH\mw(8PflF7bDJ`nF ?Ʀ(ݝP{ Vk=A |=Md窊}+;cp9Et jc%ʏQYm׎E4(HUu˜*WrM`HT ]֫e dZDU[ӵsե)o>;Cj:h)!n=Eb7{|WZebkv 1 kR}xјXQK-^*J+sS1n<~>/m5#ԝdD0!GC\Ư>$,/4NH8!q~/cTg)N;z"Slu h-yP>36dp3Pe})@_s3gu[@ԭZ;U‡Jprd +.ngvii'$dWQKgo+.9FԃN:QعRwAP; Q: +uPF?݈R@9㠫V2m{秭4a)yJXmȲt'ۊd1HAVv-HP:}RDݙ"s>Y>r *к)P˔$m`EwvF G8z瞅=zbIcVar+!ip莁A|.Ek {aa!}9J7vvQjHfa#έaYaw߷.`,m (G:`ↀd_|W^.X{C{Ƅkq=Ĩ_tGR<3sh''^:=Ȼ\J7tqkfW08F9ⵧ+U9qҜ>RASa +DIg$)bHO* Ӟ(Hv;>8^X IPI\r3VYǯMnL g&"1.~P>;>y @;ƛFO5.z;UgaFm?HYFeՉU6܌?Ҡl) ]7cy:cjTwK;pXgjwv4[\vO?ҕ_jY4mn; Nm,\fB00=PirUenJ=ry=M7-Anyu.$2lj'DAD\X,/DB/L$WIkp2*cW?yج!J)+#HcSt54Di~OLs5Y5It4tK#;s9y>-k2u-k%rzְ~F$ iɍd#9=u'h5;}[jH̡Fǜq=辺-melg ';r$ߨZ wBHb0 @'UY2 %C `xg8kwX'20n)%@a1ҫMisqGMr0Q좍Y\?LPu>=7_!T'" aؒIy[Gcn3А\lwY#kIGnkޚS;@A g0Tn|:+t }*?OmBO{WSʞfau= c ;[4z{øAauhw\ǓUc9hKܺZgBdn 6뗁.-rXf FK{qZQ mo-3S5e=܃1๳,1!u949B} FRIR99khfJ:m6t*qҮm%'Ի?tZԦ#fdϐ1ӎޔi=lۤv,NtNsNFt\`^kbK&6z k-qr Eq gbPGZ/㸏Oޛqqך7S3W.ee ?CM0)^:pF2j[KD$.<'<P,He+nn' r.M+*,`*轪PXO*0rN:3 dMm֗p@nwc9PTH@Zg$} -CGz, i純=jͷuԜ Żdj2=0?ҝuh,wg\xԁr9i&e`xSi(GNrux) 2mb=qӏG?Og46!e,jP*zpkv ȨhP6zE)`$<櫍o|sV'K $Q+"x'pe c*67KkGZ7V9R B'!\ֹߔ~Z=|ZE`H~[qe6\| 4u'ky#aWE *&Ǒ{m w`9$ֽ3zN~_nB[>SJ̤[<;*9HNq;zt6s=ĒNQ7p@*xR>cژ0_i3J`灎|!$U9L=*Z'эY0_>qN?Ʃ48 |!֥2'fA'qKh.!#ul gԀ\2c˂~S#Q] #"bK #mu R鄯 .yD)Tp40c8qYHf7b8#ccG4Š E' v*"HL(.xycnI4QA$hؐT|)dPLLv`E$r9FcplEL)'&$($4QPQ (x7c Q/w21yUE:aroundme_0_4_0/asset/user/thumbs/1_DSCF0006151_t2.jpg 777 0 0 5351 10157616310 15015 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222jP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?qVzSL>!bigqqcGR$g^>/jz:W/j#=e1_wA5VfN& *;Mh=*2Lm F֙"o-6D/&'S#vrwyZT96ڸ}7\< `9Qב^YҒiVMz*c@}+rM8d*Ŵur+KXh+^__%J$<9dt@5~.1|K$o&_, 㑎;TZa\ȅ(NATΆTvzǸ2}sO5rU/X)SzU괵fYi0]Ѭ$afxΪxJORP~uhNxD $vU?v&_֪\+:j[ I媚V0ekrK Nk9Uކt:ve_˿7#K{-> 8Ռ ʂk|C CRKAG$b3 gp+*fn0M(ᗂ=Kqv[[e,]˸`1@Q*#d>\Q9jzVEUX]'?ZYXe9gq#G5cWar>BAx\Maŝ "'ʾX H*Oy|Tά7WO^#Hn@Pſt㏼?ɤn8D<= n:8ZG7 "ZB ,rH8w[Cd7ٻgc Oq=+0CF!͠$7~Jвu[5$3Tu N{9&U $c!F沊zISEhe}{gOQW[G3턟;1k-[7[H%3ܐ!..-ПjLt=WIǢ,v9wϜbG4FM<2d|?(zӢm>; $_a1t]۵ʦLR*`@拁p_Cai Z +B$ ⣮M,)Ğ1m6ȶu6A0y}>Yp^YI$)9'~ThhXtubs+}wy% (Ќ}*kŞD&TUAQ3-čٝ-b<'봳)h1Z+n~l\J t'?* Rp]ĝK[=*i5 ,{G8 ZW/]F4.h⚈\t &Z|M{zkiZ͑l¬^_ְ UiL^H]ѣ j9UgGq⛋ȋ3阆v `O9=koKѵ/oF* D<|Bp ׏LT)!2s֔{%PkA% %qgn5Gȴޡ< `:ّq\4EsҚNë{_V4UONʹI"}dv5C>lMZNMon tf퐳HH5FdtR :ɧ]3<`W85k#2,)gkYQ2Ƈ@7s>azs 9PyOT,Hrzj$Lǚ"K.bCgiXTcC{nxуQ,~JkNWqq" Ϲ}zWs;U}z-\Hs p9, 㪯SmOQ6YC2jI/\SWtk ᷙWyrsv4ɴ[we\Hy sgo7%0\B -`M| zsk{=ĬӨWX$`[vsFgvP:`v=jV7Dl!:$R ^sf|ȧei.SZ{,b9ޑ8my6\!,27+u]HJ9#zJmaroundme_0_4_0/asset/user/thumbs/1_DSCF0007866_t1.jpg 777 0 0 22370 10157616322 15055 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?KX7CkI/Dbe~#WGqp"x[S*y)W:[أ,^K~X<lwшٲXd55 {:[򕌌~P 4ѕjjq;`$ >>S5gb-ԻjMio.=MGE.66Rn٢!c'pHI6ܒG5y yEKp8 ###zעVN³ ~r7Qc \e]QWXbebyݟL{hh-4Či"QIzZ3/gnԾԆ, Nw `})l.3c-y&; dc5z`,N":-WG',zcfW}.fX 1hbzhx6;YSupE06͑=kš`YMj?Qz_${29b"PIt܌u0y3B#U.ws8'*fŀb;ͬ@־j.jQm36yfe-rVHX3  Br0J+lb'%o=錏vbHs&\̩'+22=y^*(v\6ֶfWMM؎5F<8e'bJVelu`g۸T<=zE#p?_k2o/zU{幝Ŵ Ut{)F_WcM=Nfn!Ns۱ʑX2T$\Jvٌ8x3e7(T3 GR]2cUw훧үXA ΁$Ú^ fv-h%;i|'ixqُҲ<3g 6-*FYls q[k١"*QV"Fڛm+kmRm!."4/8Gj !xFV ;,=:WMsi弖)du+xPh-n% On~扴_*=#@\mLc\G\e@p G'IF;n'sz5 sny^^$U{5=OSrds ȯ6<۝$9,U]HT-jLz#P: eVFV8Hn%'h?ppU?CڹnY6 "S7L?N$; ka&(-?L+ץX<7[$1󛙁gHPӜccÝ`V9jll 6;a·kNZ:Ɯ?R o{ ;oOI’(&L)9ү@]JOGBp:28=+Nfՙ"N߇er?5zoUFe ۾M_׵D'+yۆ8zFixk"ފǧY{Ij}}OeNt;kMYe$zn?ҼšxK~.7ȯ@4D`Ap =[9ȯ:>VĹ-q_ݿZ榷Z`lkA8?_¾K+R檴-. Q-!I 9=O#Z| Wlm!]ůj,*bp9v yׇ=%#f?1Gfx[We\@|P:H'$襋|EB'zgp*}ZG$U㳆`@N÷ s=SAצܜ0te`I Ҝml5nOPi9z$as]hdʹ{ Kp_$rz*c1U,Fuˤ[\;!x׽[HVBUɨWS Ө*pA;B "Zt(Oo-jhoe2rUk<|-Oo ͙b2ZшĢDbzT)2Kȑ{9|2Z6Zm7Z5WRH) 0Q$xoNwwZ۴h^ 4eg޻O })ח4sk4`-ܼ6 WDqYhJkFPmlN O: r_iڅ݄i }oor  }G8J|qj:ztуʲװoҡкla{mV5JJ:=jhw1D&gm_?ks) glcxN $ݒ3TJ)ޅ?ie-Aq#,ٻY> UNn}DLEW0طU qEٮU5zRY00'[Iv6Aum5hF#o^GZG` AQwu5\c8H2B }VŧlVS5sOJtT})$my穩n|,dګj_'m|Ni!2 [}9kE4_:q\U{6J3f6ʪG󥍔Et[&}x-b.nNMk$MaZFʰ1 1*1l8ԑ+JI#'K`4Hd ewA qpiY"X^4[*y JR C2>0x`kL^Cf)۟~mL-w 5Zv1SwW)w_<5MQOBpR+m.8n>?~ {{1KCUyyObzW[RK7,exX$NOκo iZ[y@N:s X㏻pWY^+>,I-HmQ@8ىb$Xg8Q~#>-`leʹYc,`ֹ!w>vg$*V%ʶ}231kO֑qTW3I O\jܱ61$h줩#3Işmְ-=&H)m8mpcn5ؒGQux7.CUVi$$'M_:O/s׭O?8+n,O@zñrH0s h[>2F><ҸT[{q6Wub77\#UB[MV<m< qT!˒>^[T8٩,3ǿC7/TRf3&: '>k1״Ξd’3r2.9'u xJSu)]ٵ+:(hґd{|ºbibHK8lvz0:s9^ynj>vV5G\Ș @_AH00 N}׸]\]DN#IBśu}G=kD"lRʽ@{J중Z=~ K(C<@,@O|޽A#XjKpGΈ"LaCGҨG Hrqá52w:g?z鞜1M;?< i4-Ĥn:ĶrM8YGQ_[ٕr>7׷!4ldmḐq)\2>wz"~nwz8D|0˾ֶـg~kksfGbB3{Uoc0$Sy<#Uxs4 3O[{}?1WޘύR>ܯz c-6Nؠp16}z zQq[xX,:q9h?Gg lg8 =$)wmqer\Kѣ*G_C_Hn>ܐ`q{Jqt 3rI(J7<ۇ@ʞ֡kf1]lQ[&<݃k9$d|?/j~7;@ǥ^x5l=kC௩bIѴ)iaз'j\:_m!(;8>+,#DK9ǘ!cО)_f~s *B?©xmǃH+.-wyR5gӎ+_Gl6c^\o #nJ?9}6;M6H[qB7O`G~;iĻ n 7|^v#RuTyqһ=>|Emt[옻CJXxV$O RL:dxN{ul֭5-N(-e.G9zײ8_ϒIR/+SGfSr!㓑[8'R"ԯm!k)eIJFpgTp$Khc2cnzcYkXn.*?tB8U(s*0}:P2eCnwusW5YUs"=zgRe:|Yd|B}*[)3NXsY1Յ0qGZGFiP2K'Ս2ɅpeW>F'n x$N:3q4ΊR1!gtۥlf\ &> Me`豈g z`q 2ʃ9$cN]B' ¶Μ\,h<8ޡጆ8 J O& V?9"H~_O^篯JϗP)#yݖ\g?ғc=msI+HJlÞoc-s:u<ӯ_\Ʀ/lȷ(9 ;wkJLͷV(,3Tv;Beeœ;c<{2.I"7*߁Yc [,1#&ۀX{EbF($@1eCҰU;[i –OdMc^}EW];N ?ʕcBYk<"`x8WƩ{԰l/5ϽƮ;3

Sb{'ʝ&p1ѳ֨x#Ze"@.zȥ'z_jxwR[' M9|}(JzrrPeixߐzcГU7]> 0Ƿ֮C?1|{0:uR$/2Rr{S~2pAӊ[LہqtUCX@䌃wHբQ'/2?5t;6 u8n yl~u^w6WknQ$s:+QH:I" ZyLHݜ QE:eRĮpsӥb3i5[@^Q@Q\4 qJf:QI-ILFsŸ'u|0v$04Q@Ix4P ;@ާ[Z@V03Ҋ(hs}*/8ޒ!?62:}( |߽'VVLUPKC('Q@aroundme_0_4_0/asset/user/thumbs/1_DSCF0007866_t2.jpg 777 0 0 6632 10157616322 15041 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222jP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?X>L M8hgI粽ܶ]" -mLs!W.O'>.-ȧFcv3#֮l"PJ'):|ܩh&P F T::_.|j`Slim㰩<j],4f90ʹϖW\N!ˁP8Ws1=z=߄{He"ܡ-Øg/5L|Pq>YW]mcXͻvkntk)34%F“ziH' .pD,IӿN}yKVU.X6Yo͵'E[Z"Kuy!XFZJ/tX9y?STidI䬀Onhe@7 ;ȊP@8$f#q]*pcDgi8Ok7*˫/jEv؅f˱AsIGe$/heE/8~9cb 40 IgK;K4?zuoWozOSj[ƺ nD'd!BUjyϪKT{nvj2؅cO-4UT* 1ۀ8:\j3K+s0*G Oo}sl9Q (vً;דwU,9Oj{IZ'bMd2tu88>p㌏OL*[+fydyyXYkI2IF "$uߌr#ۘm;c8% )NŒbݤv>!M3W5,zNXS\kɒ9HI?kY4ϞF2',d dv饙5 )ѿ%`W+'}ny9a8J|UZ AlH'$duψOIwIFKvיMKRz5'՞5兞v͝0[gx?ٴ?e+ UM,@ql{Cƿj$@nNsGZu-:NNH=zG hreF2?g;ee9.՟$g1+HRi(]8n.@ MQ&l,sz--.H+>{ }J<}qV-w Đcʑ # M{g`i70aʌsǭY S-zzV*l׊EXVZV1L(<HsWѰwHY[(,--P@g\ǥyNj<'kK4]Hj#wS*H'L~̗CVy$%~^l!Y3;0?*xsAG~2%* Prz?S29YDl?w<8d>3SEdYu}%x×rŤa;9$w|hd$|7,Vut^I  שVPDXI$LJȑ(<^5ᆸݴ+2cu+|*9D,n#3>Z+֚&]ɇ}\{q+|,3$e`br:c]f)pK:I$Vc sz4o 3lr!+\U]_Ormu.:`y=?ү<& h!q{f1*I:m] R}7Dw%]^vhXK;SM ޣ (FUpq+@9sU[[u sil 9?=h,tm+<Ҥ90 (=>&րIn!FKN2ON5Tq2NEe]9 '5PxV g`wq՛LRBrc^{徝\5&cr Cu9@=WP/H˳FYN}2`[=T'P98=Oj_q pe9sڠ/!STfs*G6ry^5MwƫKtt8+䝑ˌ^U6U%ѓp1=z;ks ѐ 9c&A8ǰz]6KHRWyd!>Sm>loiwOi,ŭ;\;y9=ghz~΂<^P{ͭd#$q˟jf`ӥtڏ/˝64L[+#g1|NTg$d| vvH՝|.(Ԯ)\x՘)Zėv!wO*c8c*}JN851{^l$MdӀ3ϦRЭQ佳H1\]T?.Cw#I$M43+_'@JR&:BҀ*zcI)TudƏ|OeGFT*{TvD" psT'S )TMR4lj"#4֓>d%.M1I'i~d''9L*Q2r~_(|ΟL7HyR:㏯bKgM!+bL!9< 0 .jd!l%.9r8GcEY"]pB"y$o5/7{*8f[P{ 2!qbA뎵Fw_mI!Dш `w}*%QrIFgUois[,{[K"g8隘kzI'qjvH6^Ns8cTgR.s( @ kOnџtBbT5HOoeyhr`''/C)->C74Xjkws}|Mu,c$cdO[ԤP q >QdPٴ Wԕ(zZDu֥̅$<*ڸvFTh[ :0c+K}hه9ʍ*t{4۶Qg-9JWeڜbH񮸌Emsu Wavq5j?枚%la9Ν6z3&%I[5 Z`TY@1M.[+ڭ1g~X{J3ӞނU1uQ$r wN+$K 1~S2܍NI Ӱi,89x#ۧT]]-ɅG(@\6Ɇa\? ji;%~A@_D'wRj1Grrst= h'M0ۣnG% O=~@QoRL y:S_]H\ ByI8!^-E&Bzci֨k~ԙEp6z98R8',Z` ,lijVM>%9/(}>OJ4hޤ6;&? E%T7n9[6&Xm4`یĞh; [ƻ;4_|[8y<T.YpwL q}?*C%HQVx{o,CeN0y<0jHֆL) ae `N:gk(IT7'dp1V=ׅo͠ܜg YZkmE djH'9#SgZHK;cdHf m.1ԓcQcqmeTH ~Bf2S)0+۞xPh'R=~qpёp@@9`=h;D'&ylq?W3O<gn:L#c* ]}) 6>Y߯9`F b4l|Ȫ2Lxd*JŔJ)&0`sf}O:&-]tR)(=~hzaroundme_0_4_0/asset/user/thumbs/1_DSCF0008780_t2.jpg 777 0 0 3363 10157616334 15036 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?/jEVj`tJBjxگ}j."K/L 'ڐZ&jCf}4˳L_A5a:8/N:A'j'#q A5(w+Le01SgWڇH"O ͔CP8i?])zV^<=t@4Jz1E{#:49H8?ΥW*Dzy,W\|s Sq=_6' Xġ~5#ߨxJ1ϧ3 SfYd?!zִ2ꓶi>W#Tj[h_O"'ڢNIj ވ=OJrW#܎ׂzR9*I"a}مiiVwZ3e>`6_jm5 d~ܟQ%Mwl|3ȒI#6wod Fg\gsֽ1}AM?(<-+դ}95fKHGz|FF;~xk sEpά|\gӞs]`wNz[6_V$m%azնMƚDd댨e-Go[3F0Rqnq:^\{K '8O #vcx⦿ȊȎz" i]1%ҸOf)`l`t{/Їu'i~F9(o#f$$NgTXgrȭ&A\Maroundme_0_4_0/asset/user/thumbs/1_DSCF0008780_t3.jpg 777 0 0 1615 10157616334 15035 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?N8-N4㏻[0g>@6H}|߹!vqgҽo}GOvn.h&c³kfhP5*G9^k#ӣ25( =OVK\({wv9';OF?'?:=>xQ#"NnX˱FNy2}ҕijXW lNI%K n9瞣橦%vEcDIߖgUvg)Nv'ASW*M6ew:NJVD \[9hJyM{f&P7|秨 9\ZᵋO 1i9uؓKޓfw4OJWc1EoЦ0S||Iܗ+;E9!-߭zmŬ>-Q+#IHv<)2 A^ⲴYEqUQ.:v=R3CjIc+b>#R[\R)Svˡb2Je"=y1׽OtFܬ >lz_xt4Oh(A,arp+p\c6;TGN3.l!t $Du,$ O_ujOM^kk1#,{/S9$`՝ +Zc! RsԖP}7mĬa T;x.6wgNM9nr:D߼ZzHBDqhfV$OIG2Fv ~VC&{ł#hg[V.B ߷ۛ׌Aj8ɌFmr--~⍝.G>U,=\BZyƬxݽ/-*P[q c~N8 s 1l^pUzj)O `RmM,:#eSskc}7S|z$랙'f-VVi#*r@=Nx#8Y.#X*[hPT{ aXF|Tb~o zb -flE-[FChXR0l9545/ HDk\g۟Tkj1b0dGyY~Tt$tխ?_/渙Tِdo~rp0Iq׊Vż3n;Q~Sy棤]x3T Ε,]B :sFyMtBJouo5Z[|!1a }ēg+nIV2ܪXwq[,5%֡K[$"0X1'=zc=+7wi'Qq!.FAV\dG=K[B5΋`T -Fk׼IOwkė!:2!<8֒i_toF2M: oQm3VW|&Fa`~Yr؏@.-J9BKhv1s]0^t4{k{ݹʶފɐݜHHMcj[:zE]Y`BkzcA[ksдt͵*ZfȌf,K1 ?ZT|GnDb_<c^];_&-nZD .mu9d4Q%@;Sb@B}yDkdy~w*I{,sMԝ ['`uI6d[]ofX'3\ ÀX9nO"Eİ@]KKa's]EucVlep]%\crӌߑ[rqkaTLd{o t4#fG ǾzOIc4ד$h WNѻ}kRPWӓwC W:O&&M!tp>!xzm2}` X.> ^ w ,H# #7V$BQ=WR@RLVX F6ǐF*Z^*U%O8ާ 2ٚH[3w;F98`N>n8b<u)ih]SO 7}dn =1D#е:}:m|d sN1~3obܠR$ rsްK; TW!rqy\cZ-Tx6ڝս3,s+nހA-ljdf[%4`"7`g5hwQ±ciQQl5˲N b1\UꝵT;߱jS_#NQ8'[ '3$+/ 1O2;Zw7̉n?3>x< 3d_JWזO(&dN TrS$QB֒iA"hp}1 VgUX.ecmA ;'+pRw#ʑ ^AmC Ii$϶3VR?x‘i.U1F8Asyeo{I/iempОOI:+|w,W:I<AvʎI8t=:Vǂ=o~KJdW(PgPFK85b{tG~#M-so2%$"|nXa+2:s>%4>$t='9ًpݷsp 1ڸtxVk)I9L|BʑAE{<=*%-ͅyS>n13+\24Mxj [%gbd?]wF"XfY <_ʱ^y/ b|vn+3Oh-` 5$d@>º)(;)rZ2ZyVl2U<Eб hSYKL@1 'ۯ9,^9\5M$jX>^4t]>xc7S RJ@Y qԓwHƌbUjxxu[vtۃ=+ߊ|A>ma"Y7wHAl0alU<;6ӆ,ԼZQ !DYOs5*I45K3K-`[IS9' r[梆mrY|&Ք1 OCg':*ܡhj8a~j{H~ͪNG#-$?z<#3QOMx)r8==b_kzt- L!wnS[BԚ;aH`LGhFħ{xXS,:jmᶮTA~?ZsMlLh}Juy`}=q5 BI]`nUXfx<[j:]! QG4#n25'kh}{GBK7zJ$~J8u> _Vw:l6i=@ BIePsu?j '& ̌Twqӯ~xCs+BbU#,2\V8œ[yeG]ep:t$qWEhG u"^C!uD*z+m$˷'z`U=GJeߒշ%#.snA`˜0ղo%rlj#,Ilt}hWoG &H6܂cI+1"e0xj]&f2՜J`2FG@ px;BBljK*<BKځ㌀G\xZu ӹx(QnKa7r4gko#PYZoq>k(ltN:q^xv{y(b8Y#<0O'=^wj'%>ʱ+:Bm18y$~+ ;c3˫;3&".a[>4"\76g,r$y6NpGSVXX߱ڡ).Pd0rI=װA[hw$\o * g>T;N񱁪xnn`ӈnH*]Ip?K$HW76oM¬9 H/R6j>-[6Lb8+W5}`kcoDN(-.@*֫q+wV점__4:7i\^%b/kvwP[]&eug$G+Iu-ٴ>9jƐ픒AYTScZ|;k,i*Qc\/7r08AߚQ'vyu= K1"Uwdr> r,BKrUvb8$Ujcˡ~va-m~A0Ry= vӭ[K}#M7.(u|q1xϧ8uK!G%U7ur' z5Ƨ0`#,J0Tz׾)KmV\YssBibHHm,{2}k'M9mfvR68Kk8źJdE\6섵g\ڬƛT#(<`p3}kE69+he 6a3)v5Zncp 7tk7=$=*ח6o u@S˘f#%C2;q%E XJLN"vJp$TjαypMo`m \R<8\\fIʒ7(w3izr}yϼ[mѼŽB:vlsUֶJݯл-NãFx:%Fx>SZgmfYѡo#Ʋ&CvMrWZ^Iׯ=5uN17  3A.&v%dxz]&WŵaD^AYc%QHUg) =: wsXxOܨf@ђ1v=WmOyG[Zc/(eULns18 ZE4{uȒ)\B2.<#ұecj{Dkyy% +eI4OďlwnY*;n9;{8沭o ibYPK2*wfNGN7\^}brˎdz$*%vg7u_ h[BO=|(.lLfɨ{xld|IVֱWMY} /]S3\o}К%n浸>lC0V9 IԞk$p̑ŷ;~~{#?N$l@n q*b~[TJ6r'תDt=CyʐQ^mIՍKՀLȯciJr̐6p>5Cٍ;Dw\>$<|Uuć$-^1%A2 Q?L(N<>y2n,qc 篾{xm a$'?z4ZIR®7"k]w;iXZvd;2i;29OֽyEzAgA.)óoq9hD.C&sWe|;}>B-FM6U7JffX1Oz SZCl]UA-עVe+is4:+N N$O!ayjkMq*t= {<2\[5ʱ+z֟!2]?5`h靾~Fƕy`^8Uu$ssT>-m 4!eS&:|Xkn9 b/ O+ `DZ[O(ekj;q N<=ΐbDQmwo \^3H<*z=ޟd[["G?גj{-L+ x v! 6{0rc8SRr2mn!cMZH#.f,p{pp=q^ޣ1"vdWFaork~0Zͯo^r!>Q? {fB~<aI0)>l08zʲwḬMɍ&tOXEY>$8-ΡNcѮ&l8$9rqs|I;YXtxn]pn8ڃ=Y̮LN n&g%m;8mUHPc֩˶%»Ȳ9ۥ[X9ZU^Gj~!hW=ΛFOY>$OaYAc"$7q8ڷ6zAO8=b(ͦ rۯD$?#?Z/l-1I^#z(n`.>XΪKtW2vA*\7-KD[ú:J)U)#1t玼s+5žG'1c =Kxp]f`wSRmjW42k5W.2~Qkyk}8\s&:3ޣXٜ"nU{!GEL%\UȄŽKґ2IA[\0>=꽣jڽ\;ݪV$|~YR_Y">#i\np}<~#{]v a1`A Mwga764g؅@96\-J7~` CV2`$7Yf[h_3}myqqkmxP08ʐG<׿\{W/hqos$[e,{+U{x.? Ǯ}TsO}jMI&hœNkԬ.;@48p,[5̅ ʏn}4K|Ce QHHt-.mbۻmHQ?^'ֲ̊V 8b{=;ۊ^@O1*oS[$;9 f9"hyLHED).1^<,ii&b6ެ RDz[-R/`Y6<)8<~ ~5K GAj` xfٛnX7 Vi}y-os,c|nQr2 o#S6zٝۂx :HL`R?57'h(ȐHF2GLVQOCY5zF)" *Е81cu_P{x$nIRÚybKz˱5n5cR?ɬݷ;d*k6]ZB8+DZd\5hִ/+HwïSiqJV7-i8@xjb(qC"Wn= kJX0bZgZhW  4Ḵ7B Hn ט1+WN TYWM: ɭ 8L-+FߖP)|zEVtK!I]Shg1Q̯rڱvH#sI%p,|XsN"9b`88Td` 32NW9$UkCbm߷YR39f%'$)EMYTw?zɚ$<$wr+6ZV'K\Q&q=? y犞%a#4z"EZƏrn2= E 6#v\6 [F6F2n]yėi >]LӜ06U&cUv}w<`S+yk7:E+JdiC#S. OtۧҊ+hc-aroundme_0_4_0/asset/user/thumbs/1_DSCF0017616_t2.jpg 777 0 0 10510 10157506377 15051 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222jP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?m.5{h&IIYYĀ>_QzSŋ1qѶv$6ڟ676XƖQ29 / Df\:QYSKU&C1B}\{zZG7xx7"NCmn1`z泴lZh s4kHd H>>pP5VqR"b"UWۯVݓdvG1*jq K` L`gsҶm0?#;ud4KkXx oĜY\;kiY&b>|ufը|DԄX JN@ vyTϚ~!qPX$N8?L sGz[oc]htQK٫iLcȀv=55\R 8rN{c$ElI^YCSghYP01sL5 4s#J ?šЭiloob0 VXX\f[VbX,d*Ԓ6AJ0_5=NjZvl%( 66 䂹 1WnW}ߟo ,$C&rrpNz sq 7n20Peҽ:ҎN*)mV0J݇vA?1{0* >ikf4kos M3+,12&RwD 9'<:d=3Mt0#.%EyF2N[#Mtʒ[-yo:=#p=q}+5!` thfi٤J$;cy_临O eYʀO\czobET. l@98]źdi'4hXtR훫Y,h{W0O3ʈLewXOۊ$P AםG;d;+F]2ۉLI;ne(xINy+;ޅg}QR{8R#bz?.:/=\ڤ0F !R$#q|A/@JM>83`*!g"@1:pN3Srs4U2V:d B NUEnug-DRDq,*琪2joR#bUw9?߷jp\IdJK3nwOb zΫz+R=IDfPYg#Iq^emJ>-|_?eڲfbぴmq%+m $ 2<}O\WTofOop 0ن79= |Q r2y+\\=即nm¢۱99R2Urc1FAYFfwe+RvW3[fdp@)8'=]>Ȗ6]qƀM'ny^Y\H ~>+M+j5 Ży eP㌩w:=74~dLc<ǷִA䰵%Ԃgz0HlmJŦ-í2ʥ%cn m< W{9yxRlUYd6=N}r1zd;Up#YbTnwcN #'bq9T$qܧ קZܞyt-Ƒ< ̭+Xm,HϠ8gR pB[*ԛ"5-AXY n=F,b+ҵkj G;=2 ~*e\61{6wY[;Y€8la܌KMXԣ&f G!B<ѳ),! z6Sp$L"4y ,D͑|tQȥmyyc{ڷٴ a"[vEpۀ##x&W>CnH*<2rG^px'U(Iog<@K铷~ixj}wk6o,3mt#G^kKޯ:R\FU\4_4t\R5^ͮ(nL+_ϸ gaHM=l֬ 9 r+5nI뚞;Ol׹ȏ+VWδ6'w ؕ5YZ8bfp#kcpGj M}t8VkHMn}".s3.:iZonmuY*֚z ߬ ۡ {֕ԱG\FYoÃTcZzҡ-]n9OWDaroundme_0_4_0/asset/user/thumbs/1_DSCF0017616_t3.jpg 777 0 0 2550 10157506377 15037 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222* " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ʼL蛛H2I>ʸ*8`7/+Ƿfs&e,_evuPz18gq\k@83Kqd K΀{U#Y0pAnݝ^$X,"er ӏ|WH|ks-70Y"dR;r+ܞ]o&m{ ++|b =zAA*E5D6Ϣ߮|賾ݾ~S20A Ԟ:9wSPՓS:`I8|slxe yzׯVO$VYȏ'+殚qgB4{m6Q*UJ}'mcڲ'MS9D.$y>`/g2zFh2B3E ( ( (4V׻#>rEܲVeMku%7PK "G܄{J+G]@5yE .GE  Ρ_z& lpd 6k\EF!a{漋/|*\|?z4xxic)$ےp8禇} F݉[C%ܗmFy3Ұn?]r|kxOrtdc#0/' ?$?tyCI\=/' ?$??LH?a!.߇0?>`<וH=;]bn cr+B-z3HG\/˭F/ =1y \97c0`eı3 xV]OBhAǩO_*..dzL!\*G.T'5 ?%q\z0Pa’?F#9*{woJ ?%q;.m_O*v<$?~Wni pbj Om׋R8`5.NK>2OaxK ߏ7صuVֳwS ;K˙UW/^zdcκ SdIWOVE n(5d7h[o]Cy/*?&V{7č *Ert|UAy?M|UAy?Ms4Qdt|UAy?5<;:[[:LK>rUjfbeNTt)8s N 7seA3* ww'?H}tՆs"`bVHۆR;eEw_kC끴BB6F=AY:t89AkJ4',~O,a⸗H0܁4zA6کI$L9IQ^ Ʃ/??O'Έyued3b2,-" o:'rǟش%-!\d91|}U<⧳[#Gd>Hkώ G#D5LFj:O [K/b8=ǽz= UMݖui33 rycH5|uin'E's1,?p HU_"𗈴MO%o݀?g?)9]S+aroundme_0_4_0/asset/user/thumbs/1_field10543_t3.jpg 777 0 0 1565 10157616155 15234 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?⇶GmPW2dኂKOhp^^O=޽̭3$qIy xŧZ+h<JGS:Ϟcq9(ĀEz½q⼟Byhn?6bG|EEbSn-mI/`9P( x8N:Taroundme_0_4_0/asset/user/thumbs/1_kermit269_t1.jpg 777 0 0 15705 10157376434 15332 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?;QK+ϔE1GSG4PK!hSQJCKHz4'7 wzOƂ3KތPF:P~p98P !@RSRIޖ E &8tҨzт;zP~4m8ShSZ `Z((hBR(ڊJ| ֣%d8~**MB<ҝ79Xx:Rg'(u^k^_""`I36Ay?U>"xQmV9!#HH xA 9?Ike0Ϊ`KscxsYCt+׳E mǨK~jy!Os^dvq+I}edW,O\N¼v{:S yle8S^ gf' u:W]Tq& *7<8INI^bO`O~O_]QxopqVG;OJXle\4*q35h#bX\őrOyJ6>1:{ UܶXu=sYH)1-}6)01ߎ<{ݎiak_CĘm<dWO!o hL2u~sJ&&8*6gVB4b-E\4J/Ij[Hu\ǷQRjr{"#sHUidL&z]lDܜ#+jDIZMs1^KiPQEw+m0 )_~jfP ^!}A}s}+hTelI  /@Ud99mQϷ1f5H}GǏէn7RkK MB01].)nXZoxK @$q! x;xZ壱/$)|ĠFq#,:YO\kkH!@=* 66*t; ieyg^ b4@`clҶԣSS]1y5~cV&;aV=[!Ҭy }y;;;rY$Mz1f|gVTFM74{S }ٮ.Uj(vk !pmq*UryXSO| =NӓWmѝ#=Ԗg,xy.xlzz;(]N ,7+'>ug=ksPʜ5B}M*FT  Sww+ :v@lQ##qeRI8|V:8RVBa,8%r䜖<ɼrj7wy6(%{v}}kbC+W9'S<76ޮڽJ(lhݳ> ʯRG?J#@/@ǯ=0{z|+wn #*aQ)hC1xzܵ*iH$nߺ~l׬rXiE)9)ڐ-(=Gas¥'@J[xeG^Һ3MH{8>+̳ʾ# u]cfӲ4uki`ٳ O:q>AG:B4>@ YWvQgV΍ãX-s''$UR=EErCd\e{Z̟N s[_VU@G\\#}GTm^Hǝ'WRq`stj0ȹ[Jp?{.ŭJT'd1׹ke`8?O*VpV V[q(5Fi LTdIg`?\׶CKC~'i9ڜO5f&4h bx` ?;uL^*8zNooJ)vtP0̒ I}=WYOcjL72~Jj.!a; [DN.LUOoIWɺ֪{t⠬_i~lk a};rG_Ozn.#Y v~=1-zv^q\`~=k7 MʬvѰuEϊ3躊,\]jנ#E`a2[=<'b/P~9HD0Oi6B ,Q*FkYjuneϨN EyNУ}/zFB`N MAItx0nq'ڼ]*1uYS@]1\iwWZ2FApA~ʔ3>uМ fYI̙= |5JxFtgc+[ɑ>$ӧq]FxxV##?+М"@1#>w6@-s}GNw[TW"ωצ5F`12{Uŕ²-܌:w8:W/,6eW}1M_ŖG.x{z]/HmN땚e"C&9VUwvs\=D?R0!$(}A#EgB: %-d}Woh<͏VI_r<{Xi%\z`ui2vdcv,8ҫꗟ=wh0 q\8뾤zzH͜u1U#?0i b@~f/)Wm p 03SXfmjHrH*?Dᰛ c'MƱّ8(~lΎlbȿ cի̅wg#0?)} u}EQמ.6{[!>] 1ө䓉w! +ʵ3:lઁskXuM{9'̶gMy:[E\n>uyr+SSI7`'8k&E ?sAlj8yUREFr']V쐠}kAikuX~>nĸFOv9ǭz瞿TD KH>xc([ v(轿t.!Ysc?Io-ybq7#GL! b::rP(>K )RG^l7nNy<qj;n +#Ó}pF?ڒ#d^y4M O<$m`9CTQ2_xWNpޘ l=@JB3 3<7drrwfq0 3֡Y][GCڵ fv $c]jSir[Z%#29 8Vn5)T ֢0!nya#uHpўܬ 69>r;1Az*G/Cg%x r3?:m@P]ç+pU}63='kMt7(3w( ŽQ_gRh- l?/CG<- ?\T #nGNG8{ 0[z袼1`[h:0v9?:EHp d06\qҬ[og!f8hP۸u=T$UDmʌFzEa'HIv\ ?J8dNySQEa#DJ!'l{}(LQE:?B0R|Y$nQsr?j(qO ~NMUmw: Ic 6t<滻g7;P '99PMWfnZGGsaroundme_0_4_0/asset/user/thumbs/1_kermit269_t2.jpg 777 0 0 5377 10157376434 15317 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222dP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?i1Kޒ@ S 1K;P!ihP1i1KE /\Χm7,EϭuZ=\xzN86VCˮv*GVOkMMOyf6;I<uGMs&BR]Iٛ=^.aŒۢpXe(sJ;ml/k@ܝ5sMŭ_:}Vq*գA8$*Isjs.nA ˮ ׮3_zյ`d$񯛆YVr+>JW9_'^85 [@MC$мVH2U`AMq튖6r[[ޡ4Þxrp=+ 9t-dlg0E}N[#>gͩ%dV"׬y4*FyQ&YE%㧯jδ)K.gSjbc90a82;\ͬV3߸3E.e^[#?t~oW`ɹ7>~o^m>*cI+;p18çZص)$1ֹYG +nU 9R=:u #|( O<כ^ #X;䍞9+wzxKfRqִĖZzuq2c9'd֩xsU%Fq+*u(c)kňm?IItdFi(n|fYᔂU,v_BzJQu'}iItncqS2}s\]<&_%Xu#yȴ*vn}&b6ipe%g9=e(QICX gNΪQ Gnr>zgӁKQH绮'$d~93w\Y `B@1ӯ~:5xfu1 a~yq]Bǻl<-$Q0H[3ht~ u=.Y eP6{=qgIXsVVkev>g7Rpn+Gm֛bx>e VI~#{{U=:ݬYϠ)oΙ` Vrv>c$v|l/eIw o2^_ :rih<cΓPAHx< mZk{yi`\>Pk :!ڤ-qƣ1j6|ΆW dҾBV?^ƅ,-p@;]7M3NŖU{k|Yl'z@m'sT'H U-~98= N:C\c+ɣ`@ 5gzt:L/[Y1'7_OG! v`Uِzہ׷NMz9k Jדx8L&۲1Bܮ[z.ϫԜ.8A4Z%j$O*nC"HE͊`7mrDRRa!EPE\%#%ϗ?9*ܟViue K\4[$^Rұ\u4A<`n ~U,}OJRl>Xr3Ng)4$uH[(F}{sCGB))sM;jK0@:5xW?"sZ6p$s+c߲Gƥ?RR׮b IKY2[θaNwp3 ܓ<{=wLa_2-#$Z>x$B/^ chҪ*x WtK1o=QIW8 Lqm崶 )`hfAsp)Բ6VU%猃jFUU\Bm˟7B$V\~-Bp AŀKⒿg79Ac<4` * &J7~9C/ʹӺ=ʗm"c\{:DzR:\b͖yq>+m xVze`2?ʲg(15R ECzʶVkCzs\90 N ׽y3vj#m#= 4v-pzjs'l)?ֺ q>ޒouV+{gZɈ 7G Z+荩иҊi_bµ]wteJKfՌ91[p?`[>}+j97Եۣ"*$MHv zSqUVO9ZPn⋺!qj5&@lTM\ #dcoNqxV UڱzYU^Z=86j2碀Bx>)JH9lQH&ݼS-%4Uvf rM"RmBK0W[cCcgZ[MlVnڼ`ps$36q^ ݃wK^˒g7F(2|rA9wX,R, ?*t*RQ޳EKcq%՚K4&$du${dd.uuR|b8Rz*oM9rĚq}g;yS A;8 J.?J#q!6L~ՑOUմRRh$?mÖ'8?5z|"mSmbO>"H#p2&D/ U$m4IDP@r}{Vԧ y?6M ^"nNjkyo$L\\ g :g:^UEi3)4Ӵ *?C*6mni^/̹8&i5??ibcZk͐d5J{WRMF0^T_Wp$p@r De˩)Pu[MJF@*$|r8e<+E YVeEʌ?g-ѥ1JHaЌ9<WsG;cbEڠ߮{J҆iO%nyvRzkĶn(3"! 㶹oD=0k.bW&U0 ]xY:Y#`VYZFrp85ΰf RvV JEԽyzo.@b:kg'=OzňQrp8UjFap۪>L/#d8ϒjIx#aG(2)SH]6N8 փ{I߭xFB6BB1O8*Vs5Tԓ7Y8A5695{1کM3OLg&y.nmUT#vEj:<(0зa+TӬSNv[ǹXJƝeYEWQkHUC'XvAg|hy{b2Nq^V;}ntЯc8585gĐJN!+c"$zQqvgm؟u85Dw" C` _kMmd|A>niN]9Λ ݣW֬FWC ~XTt\ׯ5iEmB d `pQUإ{YVJ;|CI0*&޲1QU/z2Ms2 49ªM\`^']n >?>p ۂht$}]rIUkd W`^ߞjvKEEPIZ(m~n#ݷ G+oCID@v_ NĵiN~rEYKn2k70+ JsY~ KYܘdnZ*UéT^1048檿lTk .ݑƹ ,,yޚn*t]]myjOF5FIlN8*hu`5⁞O5F{] S?A~}kjL=[g C'-U2N:d$f|Ơ9#~S{gq:nغNCU5CFκ(i]ט4w$Ŀ MZwa -,{z*E5{+´9c(3^o*-~v{cҖO2A 3_?k1OnZ(KjAK, O)%\5\='*#B pF {QF컍K^TZ1F*)E,̡@B82.U8%r9VŸ|#J!8'8c߃/ }$Gml眎ҡm>ƕt򚦐y~ ,dK݀1Bf]]ӮZRпct3ûi'X!ߴ5laN& z ~DlХaXuɎ@hn\ ,6]fIpX7\{ds\«|47̢YZH%fzIa\u%_hlnkB@q5qƛ_ ,FHKY3lA&1-ڤ]v€Nr[1MB\՟єer钬c*Ts8V\/c`C]@Ky,z:W3u3CZܿ7:nNVuu7:cƘ j궍sk;~#a&Ђ8 }ƃYˣʔ拱I֬I/R)JQ6X!TG 2+ !y]|BtwCRkI͌JH>:.1y8vF(uaE@$۩8<ƭͨd1*&eI'L4VޠJn-kŴ HQp2İ^I$ׯzy|'Skc&I تQ$ :lEtv2V5Л xcH q1ZW3I#aRڪ:jωFPd:UHû[?YsEW,9{mbzSx2GX; z a51~V$(MVXpU?J=C{o^%0=1b- ݘ΀Jl~-־~YV5GlkB[ijZFŲ%9*gsO,fxcs4Y^V$ }$|mCIr'XО3'^)W2-m=^m=NU-I J 2MfA~啮aAuY{MnxrF Xp8eIDc*ë4]ڑyx]uAܘw$ MG'~C?Uaƞ/mKM0,yS9˞ԿӍӬѾTcs߽d-fqI؇f x%zװTͮ[b5%dVYV᤻Óde<,&WH9,{u+xԜ /00:;u . MZ+]zJ)aroundme_0_4_0/asset/user/thumbs/1_para31385_t1.jpg 777 0 0 10572 10157616100 15105 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Q\R{3hRSaq(;bLTȩ3QMiB/ۭiz TEDN3T˨{,4nQ)}\n)qNF~.6v6E;miNI\q)O#ݷu!?AVD&>e )6sW>yO^Ъ˫~O(ڎB}fT"P `WF iS3NzG%O@zuQX^XDEU ;AxYGf"*2?ږ+.fn\}jOseqDDI#@}9<"mw {7˘Ls=x~+B eYY$c㈭CY]INO=)|:U'ڝҽShRADSB_U q_Wg⿉7+v2K8 OR\^ldOGtqqǧ&\RǙ#eeGrr&oCd/o+eu~k7Rgy8?mӪ}$U3ODXԌ$ֽBMV $l9Gp#[o+[1Znһ6+bLf^=rjZi1C,'*kZtnm遳+:*%fyyTqbciUu mu'?Rw/Fe {=gNgoV &0xyYظ 5c˩BUYb1B>n ;Z(BB5d;xԦqq=jF$ ԭ4s0;Ns=Z].& (rFXaQctĎ<x-5#ϙ#p^zUY5=LO,(՗ _"[ayQI#XrSYtgU]a"VN=eT3d;?`?VpF?:h'F+=+a) ˙ݝW"0g*/G{qP~=GL= O,yfuV}\`!6ג3\mf+;K mD,P1+pz@,9=Mu~' -mnaœ?X^jq4NP38"eJ}:iӲ jmweJ],>VPOC<0ac]RGx=Hj/jɭxtۂi*=>g&SMFG-C!D\Pq{4Q{VG0l)`1r+ te3|m[D#OT3^_-'oD*:}3Oϱ=|Uރ@m?S+Yvg/Ahd=q^wt=7'NJkxSmzu_)lA/˹2kֺe7S|#,qF{)ҼKVծo{x& 3' W|`~kZeSM#j;vEIky¾3k2U$4K=|j>cwSo3 LSO8Ao * 95OV҆m{%8zz2Iy+L!4)FJKqsi8C6]ˎq~ GuE>Ҹn#cMws(n-\&w/3h.o7Jf#?c\2zg5n'QM A#iH+LG'~}h-чS*MJ;}<1 zK)&ySRxݎ39n.PV@fѶt!dB #Ѱ !Rq^[\xnqkl~NΟi!A /VAn2? .R}k'Ы;o( LPr,R?EGԛ>ƾ1NQdvl2e qoZ^_͆9J*<<{Wա"YFwh5gd:O|D0 Ҵr!KcϹzn[G<'%!ϩ^k #~~WḨ{f]́8 3 oiݩ1Hm<0s$x=ɩSmb8>?#sWJ+0\?gn~&3aE ; Ŀvh7C(; vh;C(; vh7C(; Ŀvh7C(; vh7C(; Ŀvh7C(; Ŀvh7C(7 vh7C(7v~%OVgF,4eKy8e ԩ#2CEaroundme_0_4_0/asset/user/thumbs/1_para31385_t2.jpg 777 0 0 4032 10157616100 15060 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222222P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?QsN1Sf :"yB} 隔ZJֶ7hmoU}B~8bք9Ǚi{i}~vR-ٳ(A65}}7Gӈ[}R6ȘPk:V>XfU9\wv(MMhڐVȟlm5m})!E?ʳKܗJl).tEY_~k7ZW5Yy.wU`ьNy3,d1I<ϰFаDtaq_$~ ])4o&XD]ܒp9N= F"t= g[>PnnPƱO˂;G stM h6C^NdmR]U E7-ՃlMu^)Kn7n= 1ۭU<ʋRRg Ѻޏr;\heۗӭ&bK, Ē'>=(` |9h4fH=q2q==(?aroundme_0_4_0/asset/user/thumbs/1_pkiting709_t1.jpg 777 0 0 10572 10157616112 15466 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?)RzP)RV 8RV%(bn&(.)qEqF)أX.3bLR\f(?bdRRbr*}rojZFtf)@#6.)qF*Ca)iq@&(.(QqF)أSQv(q?.0TGK.#WSԇK.&keGQKVE—bq1KJ(RPb&*X$Iwg+棥7bbLPqU5! UpeGtM\R+B]ς5VcfIO&# `9+#E.noC{Kh7w#Ҳxȫ{`(i8<[iQձ†Eέ@Њs|r%NQՉEE%--SF(jc%WW TJo?& *;ZZ( eujw_ѧ;띋 Xm&'U5 y3@#?ZUsQi>i7{X)h>ъ)h4RI@- Qv)1@ U5OM]OT),)qEQE- >dӽ' pyޜG/_qHciWI VԱҭ.?_:2 cמՔ҇$Z4bȤUwvFIuknbEs@ayt 4[J\AX]d {J[W\ :R1*UU^ܟ\21vs:bdenr1+o 1cmB]89d/"#4EN㎧tQp Φ7+}V(;jK)XJ6>o'qc`׿lHUKA{SkrQjY-4q[ _QW|ghf ꮪ?Oz&bjc^1wMX㸴QKZQ@ V쭾ֳ6 F7WATqݡ[ImmÞOU5ŎU+P]ͨ8)> }3M`ŗ]u+hg+b!$BN+ϴSKȢF~;u{2Yfn>ȩ*]?҆`g-V7ZOjeb'yq{ק/_.lRVh8D=~¸;oltْ䷖r8S>J ]q;d؀Zԧn9ֵF72,4BOE0~߭Vm{PDm0(zUIn'V<+=w7&O2(}&ku[gԠ]1Bczq|9oXL1ʀ$`g/Ik [NWw&8#Y&[RiNdtr S륃rܺSl[]I?.w"Bz{^N$!-X3Db6ROfi&wc&9nX5rɖ6R1_2kyʤ dO-e `:RJтvG$_my3|U\|Fm5sXKIKZR{ސR*Br h7CړxuVv4!)T{V%\r~aTxi9–5U /"$oRD%UW' D m7O*09༊HuAK=:WS 2U|5Wix⒗]8 (y*%,7y5o`y?J_ *;QZ- Z(*YQ8䃞j*2>d`pÏI u‹$ yz~ε$L*IO̠52Шq֓)kKHbY2y{++PGRP9S\-o岻z)?,z5e#&a'5ҟ:hvGE%Hf9tcJvֹ4}])WkxM8Py#\үtY2`r ]gT֧:3S$˵:p}k-4mk]E4t~5ԌS)í$QVе2~'>) *G״ S4 JZp)i- 'w jHo@k3VrD$=^kw Ώ!GAv\JzCחZ%nxY]0[,BOjEcAi{qip‹An5,w =. ڹRS#j]>+ #1}疓Q+N#іE|(QÌ\gGzغO}m%H Ă0Grp9ƺ09 zzfIG_Sqiq Hd6D6$rT3$kY| 5hi$4i %yF,K؟×G< M,0 ג}8,~=x Uv?.;|]굮.^*?S{\A5]'s敮EofoZAx3n-s/W;Ok׭qҭ.j [0d,Agf K1`z ZX4!1(AӞ+Q'dfVXٕ {T:E#|Or1?: i/1Uc ŝ&[{q|/ye,j|-J(Wj1GnptzК=?_L5 S?3WG FpRqLTNɒO%!@PI?'j*Ə}^&J[X;JQMu=R38a\ߔn\O$,7#'l}3 ֤L'xM_)9?w9:qֱO"$v#i 8}^{cC '^;=gF-qbz;HY[@;C(ϕ$_;ɜǨp=krZec[V_׼ Jy^4=CMtdEjVL+SdI84~tGoRqI9ZA%ݔ1B=8U7 l!I;<+o 'T26YW-x1#㑊ѳ[s oJiU;9mKakOm,x Npcs;3hMS*0ܝPdq_״ CoVdݢߏwA4W F 8ɢPi٨@F (4&ixsϥG7R(5ST#wA5>yEpOeGt")sEHi٢P &(1 =MWv?&+9,+Taroundme_0_4_0/asset/user/thumbs/1_pkiting709_t3.jpg 777 0 0 2127 10157616112 15445 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222/ " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?0)*y=ɷ|-e=n+f9d 8޽xrY~ǘjaAqp~_QZڷg`.WH{#u,2i~E䡷|&;Z w6Y(Čc.B{ ɂ;r8$h`b_y:kNUשIR\ߐ5̑7Ng/!TĺP]2JjK0P]5m]nݖ}q=)5Ioǭ5 6?_ «MN;2$=*Fk.1?aroundme_0_4_0/asset/user/thumbs/1_tom-br209_t1.jpg 777 0 0 15232 10166305312 15207 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.4MA಻KȣPFrpܶvznFkcWȅ%z\r#yqYuquYX{Hs "Fa<)n-+ѪA[/u]bY$wc\;HpX{SC:QK-\e02u< XZOA3859J>1h>7^ ՙYB,X -QфԼV Is;I(9ޤ 7-揥2EpP[aV>xyL~B5ėSjv_G1 0xfڸqhК^kz ɪK-;7-U'6<eݡd[``2lv~7;tF95:9\]x_RAD9H?y{X5) `3 ;9oҽ7ßc.5{Y< l-*-teD ޢV4i6kۙJ +`[M\|/qzGGgM2Pv5(@+y\ڔg dP$:rSFW +A_wN*te5:Qj zbGڜ:Gks~՛P^;JMRG\[21Tk5 2/ʊjt!cq+XfEȭ[#/#l^O5` !G}qo8u;פiWQ 9m*7b+Ӵ%V曳7:g9~B3P6bNk>qgakʢ& 6)6Ik˛8Kk(@ּRKy5jw. r>C-ZS]X}&IVb*u{UJ]Bq5aNH=3RylN+65)#1Hek ;7薗iһVm&DI_su=s-`#N]WFVW1$#A@h#ֵ8j'i\vڡ.aHQxL=#Y$Z"=VI,NA$}k桥aR!W(@,yVҫ^I]3# g)15KNmBu@gUl ivR]CoY\h0R>lWc4E Mq &˸ޱnmz\ (r a3NFYx=2!$^`=Nqoo"cÿ5SkSXc8Rӥ(e`IvqlsQFُM$3Jqӑ1Y4댧6 e.mk a>2=͔~޴dTU|JI4XEC,xQZ­֩H1UqbLe\zcX+b sw G9zGt0Պ-EUy3i5ĒYE&$ )vsF #1ĖNvn“?J讵K;{oR嘸! wQ5:YKy €Rw1V:MR<{Vր߼lҹja͌r}Ev&`2 qdtf2ȼd#^RgWy:sX"}q,qҹ9gzfuF";-ģh\Tvc;TִG-YԒQ*ѴY&< P}gVي' ﴹiY%rvzb˰Ng6"/`sV`{Ɓkxɤ lV樱O*슨I@ZgAM){hRs{栝gM?/H뗒߆R }hM0[ZҰ4>"Eh`Ct*r$o\hܸ2?Onj櫫4u"R[h 0>i x g1 X)NNEjc75*z\iZ-]è%TXLf"kYAu |$Fӡ  0V;MV́r_ν{hC.YxYg$ĊOAuۂ[Im41e;]5WH(VU*=kV ZR#4 z4< [v8 n;o~ 1VQr*)5m.$ņAPH"]y;{Q 9''末 )ij6:v͟J3kds_C rjk&I-JKsg8DBsXEsI$qkݳM6L8SQvC޻+fOsW kh2T@ sO\xXCk$MǒMWo62rpd)3Č=9d `2?i/ڣ@mxגSs (,zԼu3樳5Q='@Dk+g +8392R8y4ɾ-Q9= ݙ>`xrpNEjv4S# nnRUxؒ{c'IjBggYބ?Z&ngO+aRX[_\%Vdڃ4-DR #s+XS8Uo r#hLb.sUz zupp;u<[ curRtx.5"8jl4hŔTQ<NaU t=9 *z%Ҫf9&)S !}C.wrn|+|\X '@ 8: mq O5pHM6/># SqJ`DB7sX9Uf#h5v:sG=āArk^gMmiF&"'s9C[6vZ@[=KM&Jm$qҔZd3_m;ްu}Qgo@nM<9~ >g܀pV&XSOSVѻ%ӓgҫxT3 [<|EU\pq[I;Z|f9H>v`$*p=,[lMb~njn0YWӾמД'q¶Ҫ<Y4I<_*8* 2ɓEZ<)@m"b"'φB"r,q8o#`jBx-_Qc^shYͱ/sX%U[ =iGnK!]38WzΜC哖\u .FW'޺ IX`Cy X$֦q2&dlaC&+"X\3*\ծ!ܩ+5]IwA[_6wr}jM6Ea|pj 4lsLy hBw kELolٻX?:Ff2]3 i} $j:C}j1カT,ePZ7NWSH w*0IaYpI!مI< iXWeU /_ζ0hocJyYP / fU`%8jf[y|sV8+?oVVK_ʖ(dkNkaroundme_0_4_0/asset/user/thumbs/1_tom-br209_t2.jpg 777 0 0 5335 10166305312 15173 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222`P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?o \ S̈'7^}Ioy<$96Z=<:LQ~FV=01~Bڼ҉C+VM4x4S;ʤru⨹edi wWg;حl%"$2mer?s?7`m!m䌐iaFݬ0xfpQi6F?2,U Kfjc_^}،;68$cvXeq NI?\+ iN+ O+#RbGE<:j3su 3()F<>:ׂo#wA85ׇntdlzֱzRMg7_,q;g9Ꝿva#O@ā|{=}*-:.5u,1mfҺRT&$I..+r:/Jm>w51varVlz  $VMY>[5-gan)9u6+7 ұKx.""X +Oj8J5tyƓmg )V&{fD+c##vIIx<ѨҲ<ڴ#=5khpbz>5 [h3G1*r-ǥkE<S0&0G=]U$+IK;Pb  E)Pk7LmB=8#9ϽoG*"*v՛J2/X.# P;=~dGojޒXFjR9$J Y[SgyeAǠ;ב+\-ɓY,ڹSK{Ky#I,{5lyΧ|WZD8܃n4ڍ`L'tҳn?.{ &f+{l~/cK|{H*ZlJf$=Ϝ?tqz#k}$u>hP+5K,r;?j4&lGݙ#-nFH(pITx|SloPخjS+>d)Q\tX(chܮ{u/J$ _jTM:,r#(9 GS3v?aroundme_0_4_0/asset/user/thumbs/1_tom-br209_t3.jpg 777 0 0 2220 10166305312 15162 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222& " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?O iZ &jNYD $@;MCGy6#3ݸdž^k7ܩ%2O^ukA$;<9#U8FVocʵҮ*?sZFs5j6&_0࢓)Nn=k"15rזvw˱$a7 :Eޭkm~Kh .AvUyB?/zgQEd R>U^MjC0Ę1$8A}+FƩc)w:+b*d{]^JvUR g=kʹ˘^fE,FF̖8;:T(VKx(<"96b[|Mf!FQzg\8Iŷhɸ%RҚo sc;QEYѣ嵕%wPۃuyx<#\Cߩ(ZJaroundme_0_4_0/asset/user/thumbs/1_ultimate-f376_t1.jpg 777 0 0 15171 10157616200 16066 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?usq5ynxֹYa؜Tj3\Įsҩ`!oR9ύ]O},ĨX uvR 8#늮e{q9egn'J3#;ḒTbjП[(1 ;AFH&o ]}JVk dj!S'?JʕJNsq^:TkY sF)fYN331W4ieTkw$!@y5!ӯ,'X hOUr+YN@KqY[4n6`M0> wCVP"jnc5?T4g[dwY"8_q?Gj"&d ֫|=񭶒f"WKt9㎕{mmGN[Nj!mJFOF]O'1pΘұ$!kFm pxT*eY}55rytɭ RIA{]z+X2[3^9ҽF-gFa4jy3AM7kkv,ױ#ҚNMVnɏ22Oa_Bx+n\l?s޼fblqx4{(?uҷIKY:?[woebwތW35_{KYIm==Ot %fa#Ma~|rqu%+la@c8'52i6rV`y힕1[(2Ғg#KKݟA)o#tzn[W֡%V 89gCҺړF rG< SJ7!8[cڜE[s^p^M$1x~DxK wn^2T~8 *ȣ@0n7߀j"`V<+b@-l[,sYJw5ffԭn;E*]MBzdZ1I>ҨONk~. n=;ҼWՖj!+ Jm]asow"D͐1,fq譿e + F4 ĪNw/؟Δ\*%49]|AޣڢI Ч9=[Pw $-)[H1㿩Z3WgIhվqJ@?:4ؔFzӟfܑTI<'RKrE9@dI6UNf:cU~ųP?(W[ XKic2A]nFIisN j8JYN9ӵBO{MOn+, }KƑƣ#y 9j!Z?g@῭s{y4fCJoy`5W)쎚K+t;3Y>"ܬ/,F2iGs_ھۈr8pY6_ ou8"mĄ烏Q]΄·M]4?q>Y*zuE>kg%W2'RiWKIyxǰQ'߈._iɄG@rlVTaZ֗'\ͧɕ2H㞸 GR0p Weǜy|3 ȓ9n# l}sX΃{%_X^DHcλYTpH-5-&IdLd?^ԯ|Gmsyo46VVr,BCH y2sBѵ}6cwi\Jr7S8Z+i/>+Z3=9?Q5ʸjik'y:im$t47:6G?ʺ+/WW'b Ns:?&,ǜF Q͜~8 #_%g;㑹c'?ּ~QWDy&ݮ;,>f`yQ\&1zvuW*+pC.EsV9)tqёZF}jX$PYsްX$e@qϮ:}kVYj *%d*6x k) Sg$72ķt+?xSʽ;4_?ʠ,GA/^1~( I3=(a4Os x/xz'?ΥUa_7rЌLm{ڼTmKd~U,a{{y\[d|ˡ W$4ḑ_(kLs:C~ȯUM3I&u8@!uؤq8O^ҵ*;!jbʩ}s2m2I>m_kAY729 IRw jR$#k>O2.#-D,>`/nn4c!J$`*w'vɌ}CD-*$>;W͌lt&_i&}4#H-!AcJ3i(ithx_Zjy%k9~Q1s$z6 2aF;Nxh$3Ù!818O[5AWh8)|ڢh6IᯧPxDmw!A b?E­_[A |Gc nXخ/#V[xe 6 zkO]7RߙjT ΔeL߇z.duD's 93sOu{ ,-x<?w𗉾bqJ8B h |Q$h D68V¦V߽RS@;Wgm$vQu,Sg#5x'VN2qW~AYB?vؤu\Y 89]Ͼ0{EmVXns2j^,Ԯ46O/F3WN.Oo%Y &xݫhzn=rh|JQ&C5E e~dmb:} qz4: 769| TQ@5tҹ߼z8'pO].{k`% ~Y"oX؏[1  H֛iHOvc)EEwWZ$zSǞp@OSj=jn{P8bB+jhvLPfbLZϹU4)WGxq3SUQi#T<;+Y4L2NgCŨ"˲X`?wgtcH7ZqLa 2yHiŒŻO,: vwf@ l‘tj\Vyg/"x*7̠yeE#!z3ӚTe){%i즂@c"O+=x'E3{hݒHj E+TwQE 2þI)L3Lye)3tך0. DC 3hr;w;1r''yԶwcҊ+_ *yf24QE@M+۝pO8b| AV>,5~8 r?.QY>dtF+ٳfzErm7<  IB[qLu4Q^uOM6 %"ݎv˚9<`EM(? i/fG89r)zmIvf?aroundme_0_4_0/asset/user/thumbs/1_ultimate-f376_t2.jpg 777 0 0 5562 10157616200 16052 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222CP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F]nz`m$M\ޯv݋j;p35+ zik[{53[7HPGȹs-QfFr{I3sn2!@U8ZK [Eٚ>!f 3dF܎A-ԗ en!D`x]ZNIqYE`};WK&ƌԆ'vP$pyTNM$T&mn} GԒ$u-6H X=𭯇,|kr̎ ݂q+|j:xӠkgi|l 8F>OZ֘jH,в"<.u!֛܀F$q}14CgYJ1Cb\Mc,ryQ Q9$TŬw)  dPbX U-Uы؏64sqW8v h/ռ趟29TE?{{EuKz r#EYYn#TVa9'x=ac7Sz |9b:=E3Iawc)SM H^WihÚ÷6`1S<#%iO 5-#nVf'i烃T~!b&3ƑdfA!9p:Sh˗^SbH XV%8 O?ZAE1[6*#' C.X\:;_*o3.` {P)7s+Dډr,?UՖwW#agM8%"t!gaE$15LT3GN:pGT9U>B7FljQ'|/n ;9b R8'-t}s5Yo'wAdOZ )o@ ȚFgCT A'5֚VK6a~U86!Ugsּ5/ӵjڇܤf) 6rFx3V `_V7}6龉6,#}!y ȍ\F'hh?o%l xQk.M@He؎Ƿj)E5E 9nQ\&khE&[A5EnT(1GhVaroundme_0_4_0/asset/user/thumbs/1_ultimate-f376_t3.jpg 777 0 0 2216 10157616200 16044 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ixZy$qa7͵*ۇ˽C`m䰾/;D<`Pߎ)֚Z鑲3j@cSVZ7-'`}#$Tby#NFH)[UAj 4ƛh1k_麩`.1śH<8g?/Nj-#ᳮC8[pnbв|Xᶓ{C쭟Kym'?rB1|Gk4KǸuV# a{R{coas-kkJ8s89.L0$8&WkX卬/8kVas6.XJ1hwZ"xQmV9!#HH xA 9?Ike0Ϊ`KscxsYCt+׳E mǨK~jy!Os^dvq+I}edW,O\N¼v{:S yle8S^ gf' u:W]Tq& *7<8INI^bO`O~O_]QxopqVG;OJXle\4*q35h#bX\őrOyJ6>1:{ UܶXu=sYH)1-}6)01ߎ<{ݎiak_CĘm<dWO!o hL2u~sJ&&8*6gVB4b-E\4J/Ij[Hu\ǷQRjr{"#sHUidL&z]lDܜ#+jDIZMs1^KiPQEw+m0 )_~jfP ^!}A}s}+hTelI  /@Ud99mQϷ1f5H}GǏէn7RkK MB01].)nXZoxK @$q! x;xZ壱/$)|ĠFq#,:YO\kkH!@=* 66*t; ieyg^ b4@`clҶԣSS]1y5~cV&;aV=[!Ҭy }y;;;rY$Mz1f|gVTFM74{S }ٮ.Uj(vk !pmq*UryXSO| =NӓWmѝ#=Ԗg,xy.xlzz;(]N ,7+'>ug=ksPʜ5B}M*FT  Sww+ :v@lQ##qeRI8|V:8RVBa,8%r䜖<ɼrj7wy6(%{v}}kbC+W9'S<76ޮڽJ(lhݳ> ʯRG?J#@/@ǯ=0{z|+wn #*aQ)hC1xzܵ*iH$nߺ~l׬rXiE)9)ڐ-(=Gas¥'@J[xeG^Һ3MH{8>+̳ʾ# u]cfӲ4uki`ٳ O:q>AG:B4>@ YWvQgV΍ãX-s''$UR=EErCd\e{Z̟N s[_VU@G\\#}GTm^Hǝ'WRq`stj0ȹ[Jp?{.ŭJT'd1׹ke`8?O*VpV V[q(5Fi LTdIg`?\׶CKC~'i9ڜO5f&4h bx` ?;uL^*8zNooJ)vtP0̒ I}=WYOcjL72~Jj.!a; [DN.LUOoIWɺ֪{t⠬_i~lk a};rG_Ozn.#Y v~=1-zv^q\`~=k7 MʬvѰuEϊ3躊,\]jנ#E`a2[=<'b/P~9HD0Oi6B ,Q*FkYjuneϨN EyNУ}/zFB`N MAItx0nq'ڼ]*1uYS@]1\iwWZ2FApA~ʔ3>uМ fYI̙= |5JxFtgc+[ɑ>$ӧq]FxxV##?+М"@1#>w6@-s}GNw[TW"ωצ5F`12{Uŕ²-܌:w8:W/,6eW}1M_ŖG.x{z]/HmN땚e"C&9VUwvs\=D?R0!$(}A#EgB: %-d}Woh<͏VI_r<{Xi%\z`ui2vdcv,8ҫꗟ=wh0 q\8뾤zzH͜u1U#?0i b@~f/)Wm p 03SXfmjHrH*?Dᰛ c'MƱّ8(~lΎlbȿ cի̅wg#0?)} u}EQמ.6{[!>] 1ө䓉w! +ʵ3:lઁskXuM{9'̶gMy:[E\n>uyr+SSI7`'8k&E ?sAlj8yUREFr']V쐠}kAikuX~>nĸFOv9ǭz瞿TD KH>xc([ v(轿t.!Ysc?Io-ybq7#GL! b::rP(>K )RG^l7nNy<qj;n +#Ó}pF?ڒ#d^y4M O<$m`9CTQ2_xWNpޘ l=@JB3 3<7drrwfq0 3֡Y][GCڵ fv $c]jSir[Z%#29 8Vn5)T ֢0!nya#uHpўܬ 69>r;1Az*G/Cg%x r3?:m@P]ç+pU}63='kMt7(3w( ŽQ_gRh- l?/CG<- ?\T #nGNG8{ 0[z袼1`[h:0v9?:EHp d06\qҬ[og!f8hP۸u=T$UDmʌFzEa'HIv\ ?J8dNySQEa#DJ!'l{}(LQE:?B0R|Y$nQsr?j(qO ~NMUmw: Ic 6t<滻g7;P '99PMWfnZGGsaroundme_0_4_0/asset/user/thumbs/2_kermit860_t2.jpg 777 0 0 5377 10166525100 15277 0JFIF;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222dP" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?i1Kޒ@ S 1K;P!ihP1i1KE /\Χm7,EϭuZ=\xzN86VCˮv*GVOkMMOyf6;I<uGMs&BR]Iٛ=^.aŒۢpXe(sJ;ml/k@ܝ5sMŭ_:}Vq*գA8$*Isjs.nA ˮ ׮3_zյ`d$񯛆YVr+>JW9_'^85 [@MC$мVH2U`AMq튖6r[[ޡ4Þxrp=+ 9t-dlg0E}N[#>gͩ%dV"׬y4*FyQ&YE%㧯jδ)K.gSjbc90a82;\ͬV3߸3E.e^[#?t~oW`ɹ7>~o^m>*cI+;p18çZص)$1ֹYG +nU 9R=:u #|( O<כ^ #X;䍞9+wzxKfRqִĖZzuq2c9'd֩xsU%Fq+*u(c)kňm?IItdFi(n|fYᔂU,v_BzJQu'}iItncqS2}s\]<&_%Xu#yȴ*vn}&b6ipe%g9=e(QICX gNΪQ Gnr>zgӁKQH绮'$d~93w\Y `B@1ӯ~:5xfu1 a~yq]Bǻl<-$Q0H[3ht~ u=.Y eP6{=qgIXsVVkev>g7Rpn+Gm֛bx>e VI~#{{U=:ݬYϠ)oΙ` Vrv>c$v|l/eIw o2^_ :rih<cΓPAHx< mZk{yi`\>Pk :!ڤ-qƣ1j6|ΆW dҾBV?^ƅ,-p@;]7M3NŖU{k|Yl'z@m'sT'H U-~98= N:C\c+ɣ`@ 5gzt:L/[Y1'7_OG! v`Uِzہ׷NMz9k Jדx8L&۲1Bܮ[z.ϫԜ.8A4Z%j$O*nC"HE͊`7mN@czkx#q Y_@hAr!lsYKO{mu9dG :ݑyq䥭Rú͜j@|fR­xrNici`vc9r8ҽGN퟇'XkronE[98885Cwm[xj[by<s4tҍ%LK+52#.G9jh'c~'ĻEzrxu:)o 8ٕq8$8YQ[Z +54b,}OWn*gɮDKy6JQ*GhZItAO| ".$7E/\(=+NIEj/Xhc1`0IN$s"?JFnri6HEg)T$.ዻjp6.#(}H @LT.^ٲCt-­ p3yK~;d%Ժw@|1\WGCMzZK 0!y^u[Y_Eͺ>]ʤ` ;veգZk2C-m72yv;)bT@=F}o5 v Vo }=kyOXQjW9xKNf!b1H?]UfRr'c+i͜sҽ;ßmi2dH%>8VmڬBVF^TSM3G8pv$/$`#O7z4̀upG1V6dbFfKYMSmF\sE<f6qڏ8uPGlGlVfA|IID觪<{f\ǥRu 3X"Q@\]$,w(8T8M2 ԃҶIn~O5kcHdΓ ˳pڹ \]`nQpkS2Ci}qy]6`lZӃjk2N(ot)XidT.Q=*wzMżҽM"FpWFP\)#uz~4Rۗ枎芼u:g9P2Đe V# {S@v5WKR,%=Վ% ^ 2Uff䓜֖]ܷ$-j}:d;֔VRDv<8zԋTtB#jƒE:819<f zYqR`ҙ&qJ*\DSD_0zWozͺ&W]_h,C1QºsZv#5YIOJ/B2<ԺXi݋ .yYsjr 02Rrr2QGCia [>PuF\21Y5RCy}Ev'm[}:jq=1k; OtkZLQ1NsX"uG͎̜6Bqr9?܄U\,J0l#E9U`z֓(0x2՝)(!!A ԑGJHs)kc1DRN@5iSf!ee=a]UrOh%WsnDϼmV- ]hԵ CCrOt›Y 2[WvpF:޳Xj% r)5O]޵6k%>qU^OUcMfyRp㚖/cQ20[4\ M 8$$CZQFRz'< klSZ )PUP0]N'Yb U%l{V'|K.]_گi|'y?V4GO cs)H`OVWMm튛j9;"7eaү8'@]cn jx9( 0$PݾXW`XX| O|Ԗ]Ü=+2kLjۮTnQ.7tjXAqڙ eX69V}6RF0 aO:_ Kp#hLbsANH2J;űxlq] ky@@gq PǠZ%̈IPx$b{Y'gRD*ʷt]掚3Tlk%Ҫd}f%JJZ?0%{.9eV$(n"[dn}}+КBwLTI+[?)'>-ncݐçA%gT%s:d_hH9c.4)M"VcmX0 }BNx縐(nշ{kfĠ˜./k}Fk\H b-OMcͤ>3RMMm;ǭew`UF?0k:`QNO]Nl֒9|W.B1T3y-@4N~ͿQGcA&[kN@j-X$2$ez:CxE-Xkikr Iy?En=qU$l$,cwTy:Tq9LV?7L qlS.&(s|Rۮ=*[ʔZ#&:,X! ִ-,L-OodA0J{!Y砭)LjM|ɦt<`VnTW'Z^s#ep|芵IXaAy X@$ֶq2E&dlaq)1X2(ݎr#Vf y5YItvz;~cG;+Uzk>{C9-u54- ҅SՊz1\Zj'qWJuTP!wb*[i$$DUV! }lajqc91UUdRg" :0YUc5,SX.j#ԁLovH&)1K^^fMϓuXZ bljIp'[*+#̩N:o {pnr'Ӧ@Qyi Vj*%K|ߘjšShAoW殪ђOSwJV+/=O !Refwm rHx#9ϽoG*"M`oSVq]m0G|g ,M9y`p R9$Y[S..wxN =a=0сWUm[ lsڦpKeXseZ]fY8R4=$yIgck!deP t˫8ŏƪNӊmɔO@&8͇Vb͡ P39\E)+mYrLcVҒz_ItiW2~d JԹq,pߞ+I,4-~jhLmʑ+|豼|quN 6ۗcvqXY%M<2̿Ju2U6ӓih\)v1:*19xçIZOG5,B\N<ږQQĎ"9FsEDQwm`1*[+m}@r35ZZ@rrޕdCXsPDg}kv$ d@9nq{zV~?ҷI d& ֣Օ#Iub3yM(V=AP>}nkr=qYjKI&H^{/<lz5e],F۸ =3SșN= [WP;{ki`cEq` t:O=$S)0fúu%ķ*J WE58jMslɨYpyҮDm e*m}rm|*U@=u9B>U5X9IXz4R`u}~{Kkx)Vf@|~@VLmWR `u'3U9c@LIҥH$)vus֮=Dg{IOB*|q$HUW[5Uz>ȅ,xW^$$HTMHø5MYug^xs&4Q\F)pyDZ=+K$(cf%spԆD66=9Yuo#ƹ= Qaroundme_0_4_0/asset/user/thumbs/tom-br_t3.jpg 777 0 0 21723 10155074451 14545 0JFIFHHExifMM*bj(1r2iHHAdobe Photoshop 7.02004:12:06 16:22:17 &(&HHJFIFHH Adobe_CMAdobed            & "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?s絷1f! g2M?wsqC// Eo 'MxB&8Pm.uIc!ctޟ{ K5znKMi:@ {> sٓ.HLu˓])нU4cZǹoC >!p}#.oV|ՋKXUyvێ8/AnE6p 0MNk&'*-5p.оO!7U33"CX/=[ p&NH;ۓXZ4u6_H\BJlް+_¿oZ}5.P0 sy>9>~G Photoshop 3.08BIM%8BIMHH8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMG& tom-br_t3 &nullboundsObjcRct1Top longLeftlongBtomlong&Rghtlong slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong&Rghtlong urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM8BIM  &`@JFIFHH Adobe_CMAdobed            & "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?s絷1f! g2M?wsqC// Eo 'MxB&8Pm.uIc!ctޟ{ K5znKMi:@ {> sٓ.HLu˓])нU4cZǹoC >!p}#.oV|ՋKXUyvێ8/AnE6p 0MNk&'*-5p.оO!7U33"CX/=[ p&NH;ۓXZ4u6_H\BJlް+_¿oZ}5.P0 sy>9>~G8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIMHhttp://ns.adobe.com/xap/1.0/ adobe:docid:photoshop:33c9cd2e-478a-11d9-b0b1-e2205b7c6bd7 !Adobed            & "2!"BAaqRb1Q2#!1AQa C|67Ish41ΒlDZ-r` g*8D0`57ߝbY#[vtgnP|YJ,aP8ij?[QiKs: ^fᬹLlI:ҽiO?r#o4?O 6/8\}?Yx 1 ~'VNJn{1w {YF_YMRྗ' ~QjL \":DpKǫ"fpQC4#.ݿ:-CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?=2LtK5f0$" II + Vމ7_\\[F$FmUdU_[kwTPFA C)3#6QiַZٿX00 {b-/$0VCouhxu-2Z 2ӐqǷXܮ$y\~tVѭI!mA|<{bx~xjI,u[pJlIsxFjΓ2Pd[ 0YϵjgGVKy9V:>Ya-v'@dTD9 QErnEDv nA&0=+IGBNp;a&0g=j4NMbcP Sޑ'ƥcmF}SG0̸ffr( R< Ҳ,nZ޵mG|7rFuJۙr ?xZ>խYWr8YUbE[-ߚ ċM9$k^eq+FX9+} RkkdtYḢoEK>KCo-Ŗ07;+B6VBm!% +Ȥa` 5ͤ$$ Nwmur#qZգg&M9jGŞPk2*Ej䤤=_ι? W֒\\R+TF'lpE{6il9L|cU<142G=U8=OJKe{q[X{)^V>N8 j c"Nv\[2.~|@m}ZR~ִ-vٕW*jzUΗkoyΚA; *G|涴mNJҠH I,Ыq?ǻ#h}kV՝lgQc)kI'm_[_4y= km3{=zN .>THq8IҶ 0ՎYM]a zFѕ&l_k1%ԷP&$.xu⹋B{YmG?qz/ҬI snbI=ޕᆝzw5zSri26#Hz[0xF@Y#^iAkH =W!֩$yU߅.a\.a%YNE{[+r>}[]+ǥZ:v$M+uo f2 rkg?ʴR*v9 ud\ܩ#PWsM2H'WTo3`ErKD3@7VU \%bճu'QMj-uV+pupmnM,NG7+U I8,u} Ht򘩷@9;Uj-`@@YHbr(]9yS0c=m[O)&ezksOAN+kԛ%4fV7pk='ձ4 `*ҹgMQ)hm;FNtO:rsu6xg$Abfܰ:gsk2W#RvdI_Fy">"DSZ[1>fGք 7$l F9 )9kXOOqZYHʷ4/mP4C{J($+5MCTd6l*]5k$q6ZblRRغ}`JʹWw6[; z8۱?CБp:Nv5.\Aʕt- @3W\Vur$؉B,SDxSҹۋ3F+b3\ᨦfh3sΏc̼;~5GzQfsJvt@B6ZsQy G̊2XonիK-:WӤХyaGY0 +rHK: cִ&7c9V2$ԢVx#.IٰDMa m?"e W4/Z'#[Y]J`5|Y>ki2G ^@5I@OfiBGPir1Dq8KPq~#D]7?Xe\OvI+jL@p*͝X#5B4ާ5,{T++hT#͹T@}8"D"f:UzhEy^d&e|flC#QK^6w. Y [wp:W)@yTޗ q[̤E @k>M'鑚ıy5otgMk>mFL(,P H3Hx#8M$>P@`7,gwbե[kl>繫ŃzdTo'>2ziufYpsSƂ>Ka*= Y4yCTY:$/\*ֺLQI2P0Q=6#-e3*+늺7u&bJਨNO& a?֦NztKڳyqd/V+\ߤjrV{ji{9LUKJfґd=jTQeOpisܞn.6aڹv_vUaޭ6wk\QWVt,Iq+l\pjG!{4*Xڅ~Uaӥ}FEeVqE:9/4wg!ѩK;I$7L1[I(iW-^ M|E$'Y:ȸl5Q^$Nڲc$ȥ]!'&szRqVdi[J bzZG)SkM6 /C ][.TUPwaߥ^mP)Gp,*b bq[Es"dQ#8G1d2&y{ִ]TC5dΨN`lye86|EsWȬ禇F 1ٙ]DTݵW${Vڕ͘Ic)'u#8"Y"$Xr)'!%kȓ xk ތ \ Plz~vv5kMN;T9$Pܮ!ZќVte$P0{Alf)ݱX 튲(d +N4] jF"r8i,X $fʾRPw=Z14 p?^q>y&ckF(2N_liӣ]=%2=K%.L#d{t8 KdkbγcF r5H<:s6ۃY"w#5ݒ:-N/W U]ҡ=Mf!/`{U Y Gz4?=M7U%RM^Fs/ύe*JqJήa-sthsTռP OqM5(jrB+ZէWAi,bxӥsݝ-2)d@FAB 1PK橭 T[0J湟ܮy]a'"/[Yjo)>]N.gX-#T65j@x0?Ҩql 3[;sE:H쿥XK8 h䷅T*F\΢괙ک0dR*=V9IZI'\ޙ74<9o>y1}t.^hvx1)cKu5&Z}~L #9>: NEק)F^YMe͡$ֻSÓS$oOFz:qV9SݟxKm7c ڨzLQ0 KS]&(mzn+6!ROn{p#q<[]nlvj73mʧ*9JVSVnZ5`X,H%K buW/t9ݥ=zTz3udyӳf*J4Ě(} 0 1W?jEcmDgsH4ڱ-u^Ml1؀ң,084q ;u=(ĥ1GE׭[Ss@IX9{XՏ' ֓~R<+R$Kv!z-nqEAfUP8QPaGjg<*j|?@+kfgg+}SFޢ%w!YP%C bgoJD(,tM 79ڴݸTl'ֶ,R ?s՟&k_Fm/oP+Z>#yՈ<05k89^>EY-Fx4T61SEj02w6ѹ.Ai$sRkDCV&%qȬ_ߚjqtkcM')&Am~hf>L7Y4j?9eO?i64RAK&oJFFX)!ܚ(\j[TdSc:TZ.R*v>d+xcYvTĺb,>Q3c =i>i`Pd$LʕKyHܫRKwv&+0u۽D>YၮES57|Sq\js@$nwY{y&;5cbF8j_Q6ZԦwf5Y$?|Q+> aroundme Copyright (c) 2003-2005 Barnraiser. All rights reserved. >> 0.4.0, 11th January 2005,First Alpha release Group.class split into Group.class and Groupadmin.class group create scripts re-written and put into Groupadmin.class File class implemented and Image class deleted - aroundme now supports png,gif,jpg,pdf, swf,txt and can be configured to accept any MIME type. All classes cleaned up. Error handling rewritten to include debug mode. All configuration files tidied up and config vars grouped and renamed to allow for "group of vars" to be passed to classes simply. Removed forum section as user feedback found the levels confusing Bookmarks centralised in single database table Polls move to sit under groups rather than users as they are always attached to group subjects. Information about blocked users has been moved to the network section. The ability to have multiple profiles has been added. Registration preview added. Comments applied throughout in prep for reputation management system Events changed to activities (it is meant to be things to do) and activities changed to tasks for clarity Hidden forum topics and subjects now allowable Text_Wiki updated to 0.23.1 Removed set homepage from pages and put in membership Removed guestbook Remove library and blog total views Flash functionality added Bug fixes sn_recommended page error fixed >> 0.3.3, 26th November 2004 Bug fixes Fixed forum subject and reply problem Fixed Blog update problem >> 0.3.2, 23rd November 2004 Newsletter admin added full access control system implementation started phpMailer upgraded adoDB upgraded DB prefix added to allow for multiple instances of aroundme under a single database account. Shoutbox functions moved to Class Abuse reporting functionality added Multilingual language content display added in prep for CMS implementation Bookmarks (favourites) rewritten in preparation for forum movement inclusion Forum subjects and topics now track movement since last visit Bug Fixes When adding a friend, config file error in add_friend.php fixed Paths fixed in register, lost password and invite files. Template id inserted into DB upon installation many MySQL specific SQL's replaced with adoDB complient requests. adoDB insert_ID removed in favour of a select statement (not complient with all DB's) >> 0.3.1, 14th October 2004 Latest blog (splash) page added. default page button added to welcome page. Favicon added. Message 'select all' button added for ease of deleting all messages. Bug Fixes Images can be uploaded with spaces in the image filename. All files changed to UNIX/utf-8 encoded all href strings containg & have been replaced by & for xhtml complience. appended SID ID to all header redirects (ensures session ID is carried). group apply page missing variable ($lang['hdr_node_rules']) fixed. Genre and group type added to "my groups" list. Fixed breadcrumb var name clash on some pages (var note renamed to breadcrumb_note). >> 0.3_0, 23rd September 2004 open source release (released to Savannah and sourceforge) Bug Fixes In weeks most read genre added. Message title now accepts special characters. Session last used timestamp fixed. Total users online corrected to explude pending applications. Forum subject now accepts special characters. Group admins no longer have node admin priv within groups. Library links corrected. Templates set to transitional XHTML (note: not all pages verified on default template...this is ongoing) Profile summary line breaks fixed. Setting new email address in profile now works. User class no longer puts zero's in the relation table. >> 0.2_1, 19th August 2004 pre-open source community version released to core developers only. Tidy up of WIKI Tidy up of language files and terminology. Bug Fixes none >> 0.2_0, 4th June 2004 Library WIKI New user scrapbook, WIKI style Events calendar Basic schedule included Lang file changes Group member invites Auto create membership fro help group when registering Auto create user librayr item when registering Delete my group membership WIKI style messaging Many invitees catered for Bug Fixes Reply button fixed Fix mail compose delete button Removal of Group templates Image class now handles .JPG as well a s.jpg Node admin screens and groups now working Group registration duplication >> 0.1_9, 16th May 2004 Group and User statistics completed Group member statistics completed Polls completed Basic Node administration screens added Added functionality to attach a subject to a group event When creating a group default library and forum items also created. Added Group image max size (disk space) Added User image max size (disk space) Bug fixes Now you cannot post to the forum if the discussion is locked. My profile says now says 'online' (was offline) Only basic profile and global published blog items can now be seen outside of your social network. Dropdown date selects now have start and end vars added. Send group apply now goes to all admins for approval. >> 0.1_8, 5th May 2004 Edit group functionality added Edit group member privilege functionality added Edit group rules functionality added Group Permissions functionality added very basic Event Calendar (unpopulated) added Event admin functionality added very basic Poll admin functionality added Bug fixes Registered Spelt wrong in create_group.php Many little interface bugs solved Delete button on u_message_item.php no working .php added to template names for security Total acquaintances statistic fixed >> 0.1_7, 25th April 2004 Updated ADODB class Date Class introduced Tidy up of language files Error/success handling Help links created Forum sticky/locked icons added Member details page added Edit image added Ask a friend from within network functionality added List pending invitees to your Social Network functionality added Welcome Instant message added Link 'from name' in Instant message to user profile Blocking of user functionality added List of blocked users added Tidy up config file Bug fixes Cannot send if MB is 100% full - fixed: Tom Calthrop Remove aqaintance if aquantance is me - fixed: Tom Calthrop IM - list all users, should be list social network - fixed: Tom Calthrop Block user in mail pages - fixed: Tom Calthrop >> 0.1_6, 18th April 2004 Image upload working Basic 404 page and error capture Register and confirmation added Invite friends via email functionality added my_overview, latest acquaintance pages fixed Global blog page added Node stats now working Forum completed Instant messaging working Bookmarks added Obvious error removal completed Basic library added (no wiki functionality) Group apply completed Change password and lost password functionality added >> 0.1_5, 9th March 2004 Image upload class included, images now display properly Session and user management Group privileges installed Group statistics working Group pages reworke >> 0.1_4, 14th February 2004 parser completed user section display screens completed social network completed guestbook updated to work with parser edit profile screen complete >> 0.1_3, 29th January 2004 group section templates coded guestbook added user scrapbook added user registration (buggy) added message (internal mailing) display screens coded find groups, events added group library added and changes to wiki style library basic group forum display pages coded >> 0.1_2, 16th January 2004 user section templates coded (classes not incorporated) basic parse added language files added shoutbox completed bookmarks added >> 0.1_1, 5th January 2004, tom calthrop database connectivity added. header.inc.php now connects to database, pass to classes using $->db= $db; See User.class.php for example select. footer.inc.php closes db connection. >> 0.1, 4th January 2004 First release of basic html structure and class structures for development usage.aroundme_0_4_0/COPYING.txt 777 0 0 36333 10146730716 10515 0NOTE: The following license is taken from the GNU General Public License. See http://www.gnu.org/ for more information. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. ------------------------------------------------------------------------ GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ------------------------------------------------------------------------aroundme_0_4_0/CREDITS.txt 777 0 0 2153 10170760067 10452 0>> AROUNDME DEVELOPERS Many thanks to the developers who have given time, energy and expertise to the aroundme project! Erik Sundelf Tom Calthrop >> 3RD PARTY CLASSES Many thanks to all the developers who have devoted time and energy to 3rd party classes incorporated in around-me: Template - http://www.sitepoint.com/article/1218 phpMailer - http://phpmailer.sourceforge.net/ ADOdb - http://php.weblogs.com/ADODB/ Text_Wiki - http://wiki.ciaweb.net/ >> TOOLS Many thanks to all the developers who have devoted time and energy to the following tools: Linux - http://www.kernel.org PHP - http://www.php.net Apache - http://www.apache.org mySQL - http://www.mysql.com phpMyAdmin - http://www.phpmyadmin.net phpEdit - http://www.phpedit.com/ Miranda - http://www.miranda-im.org/ Skype - http://www.skype.com tom calthrop - tom@barnraiser.org ('aroundme' maintainer) note: developer credits will be applied only those who have accepted and integrated source code in the latest version of Barnraiser's 'aroundme'.aroundme_0_4_0/INSTALL.txt 777 0 0 7645 10170717452 10476 0Copyright (c) 2003-2005 Barnraiser. All rights reserved. http://www.barnraiser.org/ >> PRE-INSTALL Please check you have a PHP4.x version installed. We have not tested on PHP5.x yet. You are welcome to try. GDLib 2.x needs to be installed. You will see errors on a 1.x version. You are welcome to modify the File.class.php file to cope with a v1.x version. >> INSTALL This software is in development. Version 0.4.0 is alpha. Expect bugs! 1. Please read the terms of the license prior to install. 3rd party classes are included for ease. Please note, these are under separate license. 2. Use the included aroundme.sql file to populate a database (you will need to manually create a new database first). For development we recommend using MySQL, however ADOdb supports many database types. Please note, we have only tested this software with MySQL. No support for other databases can be given at this time. You can edit the aroundme.sql file to change the prefix of the database name. By default this is "am_", but if you wish to have multiple instances of aroundme under one account you can edit this to anything such as "am_dev_" - remember to update the server_config file db_prefic var to reflect your changes. 3. Edit the /config/config_aroundme.inc.php with your server and database connection variables. 4. Edit the .htaccess file and replace the 404 error URL with your own. >> SETUP 1. Register as a user and complete the registration process. Once complete select the user from the am_user table in the database and change the 'role_id' column to the $c_acs['arr_acs']['resource']['administration'] (admin privilege) value found in the config_acs.inc.php config file: (default is 101) 2. Setup the administrator privileges. Insert the 'allow_access' privilege into the am_acs_permission table. Default is: INSERT INTO `am_demo_0_4_0_acs_permission` VALUES (1, 101, 1, 101); 3. Logoff and log in again. You will now see a "node admin" button appear at the top of the page. Press that and select "acs". Check the boxes for the permissions for the administrator to grant yourself permissions throughout the system (recommended that you check all boxes in first column) and press "update permissions". 4. start playing. >> Common Errors 1. NO GDLIB INSTALLED (WINDOWS) You will need GDLib support active for uploading images. Php4.3.x and up has this built in, but not activated: Now you should have a file named php.ini.dist (for this document we will assume it to be in in this path "c:\php\"). Rename that to php.ini and copy it to the root of you Windows directory, C:/WINDOWS/ (be sure to back up the one that is there). change: extension_dir = ":/" to: extension_dir= " C:\php\extensions" uncomment to extension: change: ;extension=php_gd2.dll to: extension=php_gd2.dll You must restart to see the changes take effect. 2. SESSION ERRORS (WINDOWS) You will need to set up a session save path in php.ini. Edit php.ini: change session.save_path = "/tmp" to: session.save_path = "C:\tmp\" (C:\tmp\ used as example - you can change the directory path to suit you) >> Unsupported languages You can add a language by translating the language files, adding an ID to the config file and by updating set_locale function in the User.class.php file, but we would be happier if you worked with us so that we add it and everyone gets it. >> Support Members and supporters can obtain direct support from Barnraiser. Other parties should see the Savannah site for support. If in doubt contact Barnraiser and we will try to help you - http://www.barnraiser.org/ aroundme_0_4_0/KNOWN_ISSUES.txt 777 0 0 1203 10170751374 11340 0Known issues 1. The Social network totals are incorrect. 2. Schedules do not accurately report activities. 3. Shout form javascript character count does not work. 4. Nodes comment privilege not implemented. 5. Default node role is not applied to user at registration BUGS Please see our savannah site ( https://savannah.nongnu.org/projects/aroundme/ ) for a list of bugs. ENHANCEMENTS Please see our roadmap under http://www.barnraiser.org/aroundme/ for details of future enhancements. If you have feedback or have found a new bug, please report it to info@barnraiser.org or to the savannah site.aroundme_0_4_0/README.txt 777 0 0 3537 10170665704 10323 0>> aroundme version 0.4.0 // ----------------------------------------------------------------------- // This file is part of aroundme // // Copyright (C) 2003, 2005 Barnraiser // http://www.barnraiser.org/ // info@barnraiser.org // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) any // later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with program; see the file COPYING. If not, write to the Free // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // ----------------------------------------------------------------------- >> COPYING See the "copying.txt" file for instructions. Please note, all images showing "aroundme" or "barnraiser" logos are a trademark of Barnraiser. You can distribute them under the terms of the copy license, however you are forbidden to alter them. >> INSTALL See the "install.txt" file for instructions. >> REASONING 'aroundme' is developed by Barnraiser, a Swedish not for profit organisation. Barnraiser is dedicated to giving people the tools they need to share knowledge and further society through social software. You can find out more about us at http://www.barnraiser.org/ . If you find our software useful and/or you believe in our goals please consider supporting us through either our membership program or by making a donation to us. aroundme_0_4_0/www/ 777 0 0 0 10170660246 7352 5aroundme_0_4_0/www/.htaccess 777 0 0 112 10170662345 11207 0ErrorDocument 404 http://localhost/barnraiser/aroundme_0_4_0/www/index.phparoundme_0_4_0/www/aroundme_0_4_0/ 777 0 0 0 10170663401 12041 5aroundme_0_4_0/www/aroundme_0_4_0/a_activity.php 777 0 0 10635 10170663332 15021 0path="group"; $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup activities require_once($c_node['dir']['class_path'] . 'Activity.class.php'); $activity = new Activity($db, $c_acs['arr_section']['user'], $date, $file); $activity->task_user_status_ids = $c_node['activity']['task_user_status']; if (isset($_REQUEST['withdraw_confirmation'])) { $activity->updateTaskUserStatus($_REQUEST['task_id'], $me['user_id'], $c_node['activity']['task_user_status']['withdrawn']); header("Location: a_activity.php?group_id=activity_id=" . $activity_id . "&" . SID); exit; } elseif (isset($_REQUEST['task_apply_update'])) { $activity->updateTaskUserStatus($_REQUEST['task_id'], $me['user_id'], $c_node['activity']['task_user_status']['pending']); header("Location: a_activity.php?group_id=activity_id=" . $activity_id . "&" . SID); exit; } elseif (isset($_REQUEST['task_apply'])) { $activity->insertTaskUserStatus($_REQUEST['task_id'], $me['user_id'], $c_node['activity']['task_user_status']['pending']); header("Location: a_activity.php?activity_id=" . $activity_id . "&" . SID); exit; } $activity->activity_id = $activity_id; $output_activity = $activity->getActivity(); $output_tasks = $activity->getTasks(); $user->user_id = $output_activity['user_id']; $output_activity['author'] = $user->getProfile(); //get activity image if (isset($output_activity['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->file_id = $output_activity['file_id']; $output_activity['image'] = $file->getFileRecord(); } //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_activity'], $date, $user_id); $bookmark->item_id = $activity_id; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_activity['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_activity['bookmark']['recommend'] = 1; } //move to template if (!empty($output_activity)) { $body->set('activity', $output_activity); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); } if (!empty($c_node['activity']['task_user_status'])) { $body->set('task_status_ids', $c_node['activity']['task_user_status']); } if (!empty($output_activity['activity_title'])) { $template_pageLink = $lang['txt_activity']; $template_pageLinkNote = $output_activity['activity_title']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/a_calendar.php 777 0 0 15566 10170663327 14752 0level_id = $c_node['cms']['cms_level']['node']; //setup file $file->path = "group"; $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //activity setup $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->task_user_status_ids = $c_node['activity']['task_user_status']; if (isset($_POST['search'])) { $search = trim($_POST['search_text']); $activity->activity_type_id = $_POST['search_activity_type_id']; $output_activity_search_results = $activity->getActivities($search); $output_task_search_results = $activity->getTasks($search); $display = "search"; } else { //get activity ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; if (isset($data['activity_status'])) { foreach($data['activity_status'] as $key => $i): if ($i <= 0) { $arr_activity_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['activity_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_activity_delete)) { $cms->deleteCmsItem($arr_activity_delete); } } $output_cms_activities = $cms->getCmsItems(); foreach($output_cms_activities as $key => $i): $cms_activity_ids[] = $i['item_id']; endforeach; //get task ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_task']; if (isset($data['task_status'])) { foreach($data['task_status'] as $key => $i): if ($i <= 0) { $arr_task_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['task_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_task_delete)) { $cms->deleteCmsItem($arr_task_delete); } } $output_cms_tasks = $cms->getCmsItems(); if (!empty($output_cms_tasks)) { foreach($output_cms_tasks as $key => $i): $cms_task_ids[] = $i['item_id']; endforeach; } //get activities if (!empty($cms_activity_ids)) { $activity->activity_ids = $cms_activity_ids; $output_activities = $activity->getActivities(); } //get tasks if (!empty($cms_task_ids)) { $activity->task_ids = $cms_task_ids; $output_tasks = $activity->getTasks(); } //setup calendar if(!isset($_REQUEST["time"])) { $time = mktime(); } else { $time = $_REQUEST["time"]; } $now = getdate($time); $cal = new Calendar($db, $now, $me['user_id']); //get date $cal->setCalendarBase(); // get global activities if (isset($lang['arr_activities'])) { foreach($lang['arr_activities'] as $index => $activity_tmp): $activities[] = $cal->modifyActivityDate($activity_tmp); endforeach; } //setup group require_once($c_node['dir']['class_path'] . 'Group.class.php'); $group = new Group($db, $date, null); $group->user_id = $user_id; $group->registration_types = $c_node['group']['registration_type']; // get all group events $output_groups = $group->getMyGroups(); if (!empty($output_groups)) { foreach($output_groups as $index1 => $temp): $activity->section_item_id = $temp['group_id']; $activities_v = $activity->getActivities(); foreach($activities_v as $index => $activity_tmp): if(isset($activity_tmp)) { $activities[] = $cal->modifyActivityDate($activity_tmp); } endforeach; endforeach; } // get all user events $activity->section_id = $c_acs['arr_section']['group']; $activities_v = $activity->getActivities(); if (!empty($activities_v)) { foreach($activities_v as $index => $activity_tmp): if(isset($activity_tmp)) { $activities[] = $cal->modifyActivityDate($activity_tmp); } endforeach; } // Populate all activities foreach($activities as $index => $activity_tmp) $cal->populateActivity($activity_tmp); $cal->setBlankDays(); // Set blank days in the beginning of the calendar $calendar = $cal->getCalendar(); // Get the calendar array // get today's day number to highlight today in calendar, // a string is only returned if the calendar view is current month $todaynumber = $cal->getToDay(mktime()); // Get last and next months timestamp $links["last"] = $date->getMonthTime($time, -1); $links["next"] = $date->getMonthTime($time, 1); // Get the calendar view month name $thismonth = $date->getMonthString($time); } //move to template if (!empty($output_activity_search_results)) { $body->set('activity_search_results', $output_activity_search_results); } if (!empty($output_task_search_results)) { $body->set('task_search_results', $output_task_search_results); } if (!empty($output_activities)) { $body->set('activities', $output_activities); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); } if (isset($display)) { $body->set('display', $display); } if (!empty($search)) { $body->set('search', $search); } if (!empty($search_activity_type_id)) { $body->set('search_activity_type_id', $search_activity_type_id); } if (!empty($time)) { $body->set('time', $time); } if (!empty($calendar)) { $body->set('calendar', $calendar); } if (isset($todaynumber)) { $body->set('todaynumber', $todaynumber); } if (!empty($thismonth)) { $body->set('thismonth', $thismonth); } if (!empty($links)) { $body->set('links', $links); } $template_pageLink = $lang['txt_activities']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/a_schedule.php 777 0 0 7174 10170663321 14743 0setScheduleBase(); // get global activities if (!empty($lang['arr_activities'])) { foreach($lang['arr_activities'] as $index => $activity_tmp): $activities[] = $sched->modifyActivityDate($activity_tmp); endforeach; } //setup group require_once($c_node['dir']['class_path'] . 'Group.class.php'); $group = new Group($db, $date, null); $group->user_id = $user_id; $group->registration_types = $c_node['group']['registration_type']; // get all group events $output_groups = $group->getMyGroups(); if (!empty($output_groups)) { foreach($output_groups as $index1 => $temp): $activity->section_item_id = $temp['group_id']; $activities_v = $activity->getActivities(); foreach($activities_v as $index => $activity_tmp): if(isset($activity_tmp)) { $activities[] = $sched->modifyActivityDate($activity_tmp); } endforeach; endforeach; } // get all user events $activity->section_id = $c_acs['arr_section']['group']; $activities_v = $activity->getActivities(); if (!empty($activities_v)) { foreach($activities_v as $index => $activity_tmp): if(isset($activity_tmp)) { $activities[] = $sched->modifyActivityDate($activity_tmp); } endforeach; } // Populate all activities foreach($activities as $index => $activity_tmp) $sched->populateActivity($activity_tmp); $schedule = $sched->getSchedule(); // Get the schedule array $todo = $sched->getToDo(); // Get the todo array // Get last and next months timestamp $links["last"] = $date->getDayTime($time, -1); $links["next"] = $date->getDayTime($time, 1); // Get the calendar view month name $today = $date->getDayString($time); $name["last"] = $date->getDayString($time, -1); $name["next"] = $date->getDayString($time, 1); // Get the maximum number of activities at one hour $nr = floor($sched->getMax()); //move to template if (!empty($time)) { $body->set('time', $time); } if (!empty($schedule)) { $body->set('calendar', $schedule); } if (!empty($todo)) { $body->set('todo', $todo); } if (!empty($today)) { $body->set('today', $today); } if (!empty($links)) { $body->set('links', $links); } if (!empty($nr)) { $body->set('nr', $nr); } if (!empty($name)) { $body->set('name', $name); } $template_pageLink = "activities"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/add_friend.php 777 0 0 4314 10170663315 14722 0relation_type_ids = $c_node['user']['relation_type']; $sn->status_ids = $c_node['user']['status']; //update relation if ($sn->updateRelation($friend_id)) { $friend_details = $user->getUser($friend_id); //get text files $body_im_txt = readTxtFile($languageTextPath . "/im_new_friend.txt.php"); $body_im_txt = str_replace("NAME",$friend_details['user_firstname'] , $body_im_txt); $body_im_txt = str_replace("FRIEND", $_SESSION['s_firstname'], $body_im_txt); //send invites $im->sendMessage($friend_id, $lang['subject_im_friendship_accepted'], $body_im_txt); } $db->Close(); //redirect to my_friends.php header("Location: sn_network.php?".SID); exit; ?> aroundme_0_4_0/www/aroundme_0_4_0/cache/ 777 0 0 0 10152641260 13103 5aroundme_0_4_0/www/aroundme_0_4_0/cache/Adodb/ 777 0 0 0 10152641260 14114 5aroundme_0_4_0/www/aroundme_0_4_0/class/ 777 0 0 0 10170522423 13144 5aroundme_0_4_0/www/aroundme_0_4_0/class/Acs.class.php 777 0 0 25515 10170700046 15601 0role_id = $role_id; $this->section_id = $section_id; $this->db = $db; }//EO Acs // getGroupRoles -------------------------------------------------------------------- // return array of multiple roles // tom calthrop - 4th Nov 2004 // function getGroupRoles() { $query = " SELECT r.* FROM " . $this->db->prefix . "_acs_group_role r where r.group_id=" . $this->group_id . " order by r.role_name" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } } //EO GetGroupRoles // getGroupRole -------------------------------------------------------------------- // return single group role // when joining a group the role_default is the default role that the new member gets // tom calthrop - 4th Nov 2004 // function getGroupRole($role_default = null) { $query = " SELECT r.* FROM " . $this->db->prefix . "_acs_group_role r where " ; if (isset($this->role_id)) { $query .= "r.role_id=" . $this->role_id . " and "; } if (isset($role_default)) { $query .= "r.group_id=" . $this->group_id . " and "; $query .= "r.role_default=1 and "; } $query .= "1=1 "; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $result->Close(); return $temp; } else { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } }//EO getGroupRole // deleteGroupRole -------------------------------------------------------------------- // delete single group role // tom calthrop - 4th Nov 2004 // function deleteGroupRole($data) { $query = " DELETE FROM " . $this->db->prefix . "_acs_group_role WHERE role_id=" . $data['role_id'] ; $result = $this->db->Execute($query); }//EO deleteGroupRole; // insertGroupRole -------------------------------------------------------------------- // insert single group role // tom calthrop - 4th Nov 2004 // function insertGroupRole($data, $role_default = null) { if (isset($role_default)) { $role_default = 1; } else { $role_default = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_acs_group_role (role_name, group_id, role_default) VALUES ( '" . $data['role_name'] . "', " . $this->group_id . ", " . $role_default . " )" ; $result = $this->db->Execute($query); if (empty($result)) { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } }//EO insertGroupRole // updateGroupRole -------------------------------------------------------------------- // update single group role // tom calthrop - 4th Nov 2004 // function updateGroupRole($data, $role_default = null) { if (isset($data['role_default'])) { $role_default = $data['role_default']; } if (isset($role_default)) { $role_default = 1; } else { $role_default = "null"; } $query = " UPDATE " . $this->db->prefix . "_acs_group_role SET role_name='" . $data['role_name'] . "', role_default=" . $role_default . " WHERE role_id=" . $data['role_id'] ; $result = $this->db->Execute($query); }//EO updateGroupRole // insertPermission -------------------------------------------------------------------- // insert permission // erik sundelof - 4th Nov 2004 // function insertPermission($role_id, $resource_id, $privilege_id) { $query = " INSERT INTO " . $this->db->prefix . "_acs_permission SET role_id=" . $role_id . ", resource_id=" . $resource_id . ", privilege_id=" . $privilege_id . ", section_id=" . $this->section_id ; $result = $this->db->Execute($query); }//EO insertPermission // deletePermissions -------------------------------------------------------------------- // delete single group role // erik sundelof - 29th Nov 2004 // function deletePermissions() { $query = " DELETE FROM " . $this->db->prefix . "_acs_permission WHERE section_id=" . $this->section_id ; $result = $this->db->Execute($query); }//EO deletePermissions // getPermission -------------------------------------------------------------------- // get permission // tom calthrop - 4th Nov 2004 // function getPermission($role_id, $resource_id, $privilege_id) { $query = " SELECT rp.* FROM " . $this->db->prefix . "_acs_permission rp where rp.role_id=" . $role_id . " and rp.resource_id=" . $resource_id . " and rp.privilege_id=" . $privilege_id . " and rp.section_id=" . $this->section_id ; $result = $this->db->Execute($query); if (isset($result->fields['role_id'])) { return 1; $result->Close(); } else{ return 0; } } //EO getPermission // checkPermission -------------------------------------------------------------------- // check permission for a given resource and privilege ID // erik sundelof - 29th Nov 2004 // function checkPermission($resource_id, $privilege_id) { $tmp = $this->getPermission($this->role_id, $resource_id, $privilege_id); if(!empty($tmp)) { return true; } else { return false; } }// EO checkPermission // getAllPermissions -------------------------------------------------------------------- // get all permissions for a given section // erik sundelof - 29th Nov 2004 // function getAllPermissions() { $query = " SELECT rp.* FROM " . $this->db->prefix . "_acs_permission rp where rp.section_id=" . $this->section_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { array_push($temp, $result->fields); $result->MoveNext(); } $result->Close(); return $temp; } }// EO getALLPermissions // findRoleIndex -------------------------------------------------------------------- // find array with index that corresponds to a given role // erik sundelof - 29th Nov 2004 // function findRoleIndex($role_id, $output_roles){ foreach($output_roles as $key => $roles){ if($roles["role_id"]==$role_id) return $key; } }//EO findRoleIndex // getResources -------------------------------------------------------------------- // get resources and create structure // erik sundelof - 30th Nov 2004 // function getResources($config_resources, $resource_privilege, $arr_acs, $output_roles){ if (!empty($config_resources)) { $output_resources = array(); //loop through the array and get the name, desc from the language file foreach($config_resources as $key => $res): if(!is_array($arr_acs['resource'][$res])){ $temp1['resource_name'] = $arr_acs['resource'][$res]; $temp1['resource_id'] = $res; $temp1['resource_desc'] = $arr_acs['resource_desc'][$res]; } else{ $temp1['resource_name'] = $arr_acs['resource'][$res][0]." (sub-resources)"; $temp1['resource_id'] = $res; $temp1['resource_desc'] = $arr_acs['resource_desc'][$res]; } //get privileges attached to each resource $config_privileges = $resource_privilege[$res]; $temp1['privileges'] = array(); if (!empty($config_privileges)) { //loop through the array and get the name from the language file foreach($config_privileges as $key1 => $priv): $temp2['privilege_name'] = $arr_acs['privilege'][$priv]; $temp2['privilege_id'] = $priv; //for each privilege we now see if the permission is set against the role if (!empty($output_roles)) { $temp2['permissions'] = array(); //loop through the array and check the permission foreach($output_roles as $key2 => $role): if ($this->getPermission($role['role_id'], $res, $priv)) { $temp2['permissions'][] = 1; } else { $temp2['permissions'][] = 0; } endforeach; } array_push($temp1['privileges'], $temp2); endforeach; } //push this resource info to the main array array_push($output_resources, $temp1); endforeach; } else { $output_resources = array(); } return $output_resources; }//EO getResources // updateGroupDefaultRole -------------------------------------------------------------------- // updates the DB with the default group role ID // tom calthrop - 22nd December 2004 // function updateGroupDefaultRole($default_role_id) { $query = " UPDATE " . $this->db->prefix . "_acs_group_role SET role_default=null WHERE group_id=" . $this->group_id ; $result = $this->db->Execute($query); $query = " UPDATE " . $this->db->prefix . "_acs_group_role SET role_default=1 WHERE role_id=" . $default_role_id ; $result = $this->db->Execute($query); }//EO updateGroupDefaultRole } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Activity.class.php 777 0 0 64627 10170700043 16673 0db = $db; $this->section_id = $section_id; $this->date = $date; if (isset($file)) { $this->file = $file; } }//EO Activity // getActivity -------------------------------------------------------------------- // returns single DB row // tom calthrop - 7th April 2004 // function getActivity() { $query = " SELECT activity_id, activity_start_datetime, activity_end_datetime, activity_title, activity_synopsis, activity_body, activity_location, activity_frequency, file_id, user_id, activity_type_id, status_id FROM " . $this->db->prefix . "_activity WHERE " ; if (isset($this->section_item_id)) { $query .= "section_item_id=" . $this->section_item_id . " AND "; } if (isset($this->activity_id)) { $query .= "activity_id=" . $this->activity_id . " AND "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $temp['display_activity_start_datetime'] = $this->date->formatDate($temp['activity_start_datetime']); $temp['display_activity_end_datetime'] = $this->date->formatDate($temp['activity_end_datetime']); $result->Close(); return $temp; } else { $error_info = "function=getActivity class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //getActivity // getTasks -------------------------------------------------------------------- // returns multiple DB rows // tom calthrop - 7th April 2004 // function getTasks($search = null) { $query = " SELECT task_id, user_id, task_type_id, task_title, task_synopsis, task_start_datetime, task_end_datetime, task_user_requirement, activity_id FROM " . $this->db->prefix . "_activity_task WHERE " ; if (isset($this->activity_id)) { $query .= "activity_id=" . $this->activity_id . " AND "; } if (isset($this->user_id)) { $query .= "user_id=" . $this->user_id . " AND "; } if (isset($this->task_ids)) { $task_ids = ""; foreach($this->task_ids as $key => $i): $task_ids .= $i; if (count($this->task_ids) > $key+1) { $task_ids .=","; } endforeach; $query .= "task_id in (" . $task_ids . ") AND "; } if (isset($search)) { $query .= " (task_title like '%" . $search . "%' or task_synopsis like '%" . $search . "%') AND " ; } $query .= "1=1 "; if (isset($this->orderby)) { $query .= "ORDER BY " . $this->orderby; } else { $query .= "ORDER BY task_title"; } //echo $query; if (isset($this->limit)) { $result = $this->db->SelectLimit($query, $this->limit); } else { $result = $this->db->Execute($query); } $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $this->task_id = $temp1['task_id']; $temp1['task_start_datetime'] = $this->date->formatDate($temp1['task_start_datetime']); $temp1['task_applicants'] = $this->countActivityTaskUser($this->task_user_status_ids['pending']); $temp1['task_confirmed'] = $this->countActivityTaskUser($this->task_user_status_ids['confirmed']); $temp1['status'] = $this->getUserTask($temp1['task_id'], $temp1['user_id']); if (isset($search)) { //format search results $temp1['task_title'] = searchTextFormat($search, $temp1['task_title']); $temp1['task_synopsis'] = searchTextFormat($search, $temp1['task_synopsis']); } array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getTasks class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getTasks // getTask -------------------------------------------------------------------- // returns single DB row // tom calthrop - 7th April 2004 // function getTask($task_id) { $query = " SELECT at.* FROM " . $this->db->prefix . "_activity_task at WHERE at.task_id=" . $task_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $this->task_id = $temp['task_id']; $temp['display_task_start_datetime'] = $this->date->formatDate($temp['task_start_datetime']); $temp['task_applicants'] = $this->countActivityTaskUser($temp['task_id']); $temp['task_confirmed'] = $this->countActivityTaskUser($temp['task_id'], $this->task_user_status_ids['confirmed']); $result->Close(); return $temp; } else { $error_info = "function=getTask class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getTask // countActivityTaskUser -------------------------------------------------------------------- // returns count of task applicants // tom calthrop - 25th December 2004 // function countActivityTaskUser($status_id = null) { $query = " SELECT count(task_id) as total FROM " . $this->db->prefix . "_activity_task_user WHERE task_id=" . $this->task_id . " AND " ; if (isset($status_id)) { $query .= "status_id=" . $status_id . " AND "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields['total'])) { return $result->fields['total']; } else { $error_info = "function=countActivityTaskUser class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO countActivityTaskUser // getActivities -------------------------------------------------------------------- // returns multiple rows from DB // tom calthrop - 7th April 2004 // function getActivities($search = null) { $query = " SELECT activity_id, activity_start_datetime, activity_title, activity_end_datetime, section_id, activity_synopsis, activity_location, file_id FROM " . $this->db->prefix . "_activity WHERE section_id=" . $this->section_id . " AND " ; if (isset($this->section_item_id)) { $query .= "section_item_id=" . $this->section_item_id . " AND "; } if (isset($this->activity_type_id) && $this->activity_type_id > 0) { $query .= "activity_type_id=" . $this->activity_type_id . " AND "; } if (isset($this->activity_ids)) { $activity_ids = ""; foreach($this->activity_ids as $key => $i): $activity_ids .= $i; if (count($this->activity_ids) > $key+1) { $activity_ids .=","; } endforeach; $query .= "activity_id in (" . $activity_ids . ") AND "; } if (isset($search)) { $query .= " (activity_title like '%" . $search . "%' or activity_synopsis like '%" . $search . "%') AND " ; } $query .="1=1"; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['display_activity_start_datetime'] = $this->date->formatDate($temp1['activity_start_datetime']); $temp1['display_activity_end_datetime'] = $this->date->formatDate($temp1['activity_end_datetime']); if (isset($this->file)) { if ($temp1['section_id'] == 1) { $this->file->path = "user"; } elseif ($temp1['section_id'] == 2) { $this->file->path = "group"; } if (isset($temp1['file_id'])) { $this->file->file_id = $temp1['file_id']; $temp1['image'] = $this->file->getFileRecord(); } else { $temp1['image']['file_title'] = ""; $temp1['image']['file'] = $this->file->noimage; } } if (isset($search)) { //format search results $temp1['activity_title'] = searchTextFormat($search, $temp1['activity_title']); $temp1['activity_synopsis'] = searchTextFormat($search, $temp1['activity_synopsis']); } array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getActivities class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO getActivities // updateActivity -------------------------------------------------------------------- // upates activity // tom calthrop - 2nd May 2004 // function updateActivity($data, $user_id) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); if (isset($data['activity_frequency']) && $data['activity_frequency'] > 0) { $frequency = $data['activity_frequency']; } else { $frequency = "null"; } if (empty($_POST["no_start_datetime"])) $activity_start_datetime = "'" . $_POST['start_year']."-".$_POST['start_month']."-".$_POST['start_day']." ".$_POST['start_hour'].":".$_POST['start_minute'].":00'"; else $activity_start_datetime = "null"; if (empty($_POST["no_end_datetime"])) $activity_end_datetime = "'" . $_POST['end_year']."-".$_POST['end_month']."-".$_POST['end_day']." ".$_POST['end_hour'].":".$_POST['end_minute'].":00'"; else $activity_end_datetime = "null"; if (isset($data['file_id'])) { $file_id = $data['file_id']; } else { $file_id = "null"; } if (isset($data['group_id']) && $data['group_id'] > 0) { $group_id = $data['group_id']; } else { $group_id = "null"; } if (isset($data['status_id'])) { $status_id = $data['status_id']; } else { $status_id = "null"; } if (isset($data['level_id'])) { $level_id = $data['level_id']; } else { $level_id = "null"; } $query = " UPDATE " . $this->db->prefix . "_" . $this->module . "_activity SET group_id=" . $group_id . ", activity_edit_datetime =" . $datetime . ", user_id_edit ='" . $user_id . "', activity_start_datetime=" . $activity_start_datetime . ", activity_end_datetime =" . $activity_end_datetime . ", activity_frequency =" . $frequency . ", activity_title='" . $data['activity_title'] . "', activity_description='" . $data['activity_description'] . "', activity_body='" . $data['activity_body'] . "', activity_location='" . $data['activity_location'] . "', file_id=" . $file_id . ", status_id=" . $status_id . " WHERE activity_id=" . $data['activity_id'] ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateActivity class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO updateActivity // insertActivity -------------------------------------------------------------------- // inserts a single DB row // tom calthrop - 11th April 2004 // function insertActivity($data) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); if (empty($data['file_id'])) { $data['file_id']= "null"; } if (empty($data['status_id'])) { $data['status_id'] = "null"; } if (empty($data['activity_frequency']) || (isset($data['activity_frequency']) && $data['activity_frequency'] < 1)) { $data['activity_frequency'] = "null"; } if (empty($data['activity_type_id']) || (isset($data['activity_type_id']) && $data['activity_type_id'] < 1)) { $data['activity_type_id'] = "null"; } if (empty($_POST["no_start_datetime"])) { $activity_start_datetime = "'" . $_POST['start_year']."-".$_POST['start_month']."-".$_POST['start_day']." ".$_POST['start_hour'].":".$_POST['start_minute'].":00'"; } else { $activity_start_datetime = "null"; } if (empty($_POST["no_end_datetime"])) { $activity_end_datetime = "'" . $_POST['end_year']."-".$_POST['end_month']."-".$_POST['end_day']." ".$_POST['end_hour'].":".$_POST['end_minute'].":00'"; } else { $activity_end_datetime = "null"; } if (!empty($_POST['activity_start_day'])) { $activity_start_day = $_POST['activity_start_day']; } else { $activity_start_day = "null"; } if (!empty($_POST['activity_start_month'])) { $activity_start_month = $_POST['activity_start_month']; } else { $activity_start_month = "null"; } if (!empty($_POST['activity_end_day'])) { $activity_end_day = $_POST['activity_end_day']; } else { $activity_end_day = "null"; } if (!empty($_POST['activity_end_month'])) { $activity_end_month = $_POST['activity_end_month']; } else { $activity_end_month = "null"; } if (!empty($_POST['activity_start_weekday'])) { $activity_start_weekday = $_POST['activity_start_weekday']; } else { $activity_start_weekday = "null"; } if (!empty($_POST['activity_end_weekday'])) { $activity_end_weekday = $_POST['activity_end_weekday']; } else { $activity_end_weekday = "null"; } if($data['activity_frequency'] == $this->frequency_ids['monthly']) { $activity_start_month = 0; $activity_end_month = 0; $activity_start_weekday = 0; $activity_end_weekday = 0; } elseif($_POST['activity_frequency'] == $this->frequency_ids['yearly']) { $activity_start_weekday = 0; $activity_end_weekday = 0; } elseif($data['activity_frequency'] == $this->frequency_ids['weekly']) { $activity_start_day = 0; $activity_end_day = 0; $activity_start_month = 0; $activity_end_month = 0; } $query = " INSERT INTO " . $this->db->prefix . "_activity ( section_id, section_item_id, activity_create_datetime, user_id, activity_start_datetime, activity_end_datetime, activity_frequency, activity_title, activity_type_id, activity_synopsis, activity_body, activity_location, file_id, status_id, activity_start_day, activity_start_month, activity_end_day, activity_end_month, activity_start_weekday, activity_end_weekday ) VALUES ( " . $this->section_id . ", '" . $this->section_item_id . "', " . $datetime . ", " . $this->user_id . ", " . $activity_start_datetime . ", " . $activity_end_datetime . ", " . $data['activity_frequency'] . ", '" . $data['activity_title'] . "', " . $data['activity_type_id'] . ", '" . $data['activity_synopsis'] . "', '" . $data['activity_body'] . "', '" . $data['activity_location'] . "', " . $data['file_id'] . ", " . $data['status_id'] . ", " . $activity_start_day . ", " . $activity_start_month . ", " . $activity_end_day . ", " . $activity_end_month . ", " . $activity_start_weekday . ", " . $activity_end_weekday . " )" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $query = " SELECT activity_id FROM " . $this->db->prefix . "_activity where user_id=" . $this->user_id . " AND activity_create_datetime=" . $datetime ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields['activity_id'])) { $this->activity_id = $result->fields['activity_id']; } else { $error_info = "function=insertActivity class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } else { $error_info = "function=insertActivity class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO insertActivity // deleteActivity -------------------------------------------------------------------- // deletes a single DB row // tom calthrop - 11th April 2004 // function deleteActivity($activity_id) { $query = " DELETE FROM " . $this->db->prefix . "_activity WHERE activity_id=" . $activity_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=deleteActivity class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO deleteActivity // insertTask -------------------------------------------------------------------- // inserts a single DB row // tom calthrop - 3rd May 2004 // function insertTask($data) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $task_start_datetime = $_POST['start_year']."-".$_POST['start_month']."-".$_POST['start_day']." ".$_POST['start_hour'].":".$_POST['start_minute'].":00"; $task_end_datetime = $_POST['end_year']."-".$_POST['end_month']."-".$_POST['end_day']." ".$_POST['end_hour'].":".$_POST['end_minute'].":00"; if (isset($data['task_user_requirement'])) { $task_user_requirement = $data['task_user_requirement']; } else { $task_user_requirement = "0"; } if (isset($data['task_type_id'])) { $task_type_id = $data['task_type_id']; } else { $task_type_id = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_activity_task ( user_id, activity_id, task_title, task_synopsis, task_start_datetime, task_end_datetime, task_create_datetime, task_user_requirement, task_type_id ) VALUES ( " . $this->user_id . ", " . $this->activity_id . ", '" . $data['task_title'] . "', '" . $data['task_synopsis'] . "', '" . $task_start_datetime . "', '" . $task_end_datetime . "', " . $datetime . ", " . $task_user_requirement . ", " . $task_type_id . " )" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $query = " SELECT task_id FROM " . $this->db->prefix . "_activity_task where user_id=" . $this->user_id . " AND task_create_datetime=" . $datetime ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields['task_id'])) { $this->task_id = $result->fields['task_id']; } else { $error_info = "function=insertTask class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } else { $error_info = "function=insertTask class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO insertTask // updateTask -------------------------------------------------------------------- // updates a single DB row // tom calthrop - 3rd May 2004 // function updateTask($data) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $task_start_datetime = $_POST['start_year']."-".$_POST['start_month']."-".$_POST['start_day']." ".$_POST['start_hour'].":".$_POST['start_minute'].":00"; $task_end_datetime = $_POST['end_year']."-".$_POST['end_month']."-".$_POST['end_day']." ".$_POST['end_hour'].":".$_POST['end_minute'].":00"; if (isset($data['task_user_requirement'])) { $task_user_requirement = $data['task_user_requirement']; } else { $task_user_requirement = "0"; } if (isset($data['task_type_id'])) { $task_type_id = $data['task_type_id']; } else { $task_type_id = "null"; } $query = " UPDATE " . $this->db->prefix . "_activity_task SET task_title='" . $data['task_title'] . "', task_synopsis='" . $data['task_synopsis'] . "', task_start_datetime='" . $task_start_datetime . "', task_end_datetime='" . $task_end_datetime . "', task_user_requirement=" . $task_user_requirement . ", task_type_id=" . $task_type_id . " WHERE task_id=" . $data['task_id'] ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateTask class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO updateTask // deleteTask -------------------------------------------------------------------- // deletes a single DB row // tom calthrop - 11th April 2004 // function deleteTask($task_id) { $query = " DELETE FROM " . $this->db->prefix . "_activity_task WHERE task_id=" . $task_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=deleteTask class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO deleteTask // getTaskApplicants -------------------------------------------------------------------- // returns multiple DB rows // tom calthrop - 7th April 2004 // function getTaskApplicants($task_id) { $query = " SELECT au.*, p.profile_nic, p.profile_hometown, p.profile_create_datetime FROM " . $this->db->prefix . "_activity_task_user au, " . $this->db->prefix . "_user_profile p WHERE au.user_id=p.user_id and p.profile_default=1 and au.task_id=" . $task_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['profile_create_datetime'] = $this->date->formatDate($temp1['profile_create_datetime']); $temp1['task_user_create_datetime'] = $this->date->formatDate($temp1['task_user_create_datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getTaskApplicants class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getTaskApplicants // updateTaskApplicants -------------------------------------------------------------------- // updates multiple DB rows // tom calthrop - 11th April 2004 // function updateTaskApplicants($task_id, $user_arr, $task_user_status_arr) { $rownums = count ($user_arr); for ($i=0; $i < $rownums; $i++) { $query = " UPDATE " . $this->db->prefix . "_activity_task_user SET status_id=" . $task_user_status_arr[$i] . " WHERE user_id = " . $user_arr[$i] . " and task_id=" . $task_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateTaskApplicants class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } }//EO updateTaskApplicants // getUserTask -------------------------------------------------------------------- // updates single DB rows // tom calthrop - 11th April 2004 // function getUserTask($task_id, $user_id) { $query = " SELECT * FROM " . $this->db->prefix . "_activity_task_user WHERE user_id=" . $user_id . " and task_id=" . $task_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $temp['task_user_create_datetime'] = $this->date->formatDate($temp['task_user_create_datetime']); $result->Close(); return $temp; } else { $error_info = "function=getUserTask class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO getUserTask // updateTaskUserStatus -------------------------------------------------------------------- // updates single DB rows // tom calthrop - 11th April 2004 // function updateTaskUserStatus($task_id, $user_id, $status_id) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " UPDATE " . $this->db->prefix . "_activity_task_user SET status_id=" . $status_id . " WHERE user_id=" . $user_id . " AND task_id=" . $task_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateTaskUserStatus class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO updateTaskUserStatus // insertTaskUserStatus -------------------------------------------------------------------- // inserts multiple DB rows // tom calthrop - 7th April 2004 // function insertTaskUserStatus($task_id, $user_id, $status_id) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_activity_task_user (task_id, status_id, task_user_create_datetime, user_id) VALUES ( " . $task_id . ", " . $status_id . ", " . $datetime . ", " . $user_id . " )" ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=insertTaskUserStatus class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO insertTaskUserStatus // getUserTasks -------------------------------------------------------------------- // returns multiple DB rows // tom calthrop - 3rd January 2005 // function getUserTasks() { $query = " SELECT task_id FROM " . $this->db->prefix . "_activity_task_user WHERE user_id=" . $this->user_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getUserTasks class=Activity.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getUserTasks } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/ 777 0 0 0 10152641260 14156 5aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/adodb-iterator.inc.php 777 0 0 3216 10142745754 20440 0Execute("select * from adoxyz"); foreach($rs as $k => $v) { echo $k; print_r($v); echo "
"; } Iterator code based on http://cvs.php.net/cvs.php/php-src/ext/spl/examples/cachingiterator.inc?login=2 */ class ADODB_Iterator implements Iterator { private $rs; function __construct($rs) { $this->rs = $rs; } function rewind() { $this->rs->MoveFirst(); } function valid() { return !$this->rs->EOF; } function key() { return $this->rs->_currentRow; } function current() { return $this->rs->fields; } function next() { $this->rs->MoveNext(); } function __call($func, $params) { return call_user_func_array(array($this->rs, $func), $params); } function hasMore() { return !$this->rs->EOF; } } class ADODB_BASE_RS implements IteratorAggregate { function getIterator() { return new ADODB_Iterator($this); } /* this is experimental - i don't really know what to return... */ function __toString() { include_once(ADODB_DIR.'/toexport.inc.php'); return _adodb_export($this,',',',',false,true); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/adodb-lib.inc.php 777 0 0 67711 10142745754 17407 0$value) $new_array[strtoupper($key)] = $value; return $new_array; } return $an_array; } function _adodb_replace(&$zthis, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc) { if (count($fieldArray) == 0) return 0; $first = true; $uSet = ''; if (!is_array($keyCol)) { $keyCol = array($keyCol); } foreach($fieldArray as $k => $v) { if ($autoQuote && !is_numeric($v) and strncmp($v,"'",1) !== 0 and strcasecmp($v,'null')!=0) { $v = $zthis->qstr($v); $fieldArray[$k] = $v; } if (in_array($k,$keyCol)) continue; // skip UPDATE if is key if ($first) { $first = false; $uSet = "$k=$v"; } else $uSet .= ",$k=$v"; } $where = false; foreach ($keyCol as $v) { if ($where) $where .= " and $v=$fieldArray[$v]"; else $where = "$v=$fieldArray[$v]"; } if ($uSet && $where) { $update = "UPDATE $table SET $uSet WHERE $where"; $rs = $zthis->Execute($update); if ($rs) { if ($zthis->poorAffectedRows) { /* The Select count(*) wipes out any errors that the update would have returned. http://phplens.com/lens/lensforum/msgs.php?id=5696 */ if ($zthis->ErrorNo()<>0) return 0; # affected_rows == 0 if update field values identical to old values # for mysql - which is silly. $cnt = $zthis->GetOne("select count(*) from $table where $where"); if ($cnt > 0) return 1; // record already exists } else { if (($zthis->Affected_Rows()>0)) return 1; } } else return 0; } // print "

Error=".$this->ErrorNo().'

'; $first = true; foreach($fieldArray as $k => $v) { if ($has_autoinc && in_array($k,$keyCol)) continue; // skip autoinc col if ($first) { $first = false; $iCols = "$k"; $iVals = "$v"; } else { $iCols .= ",$k"; $iVals .= ",$v"; } } $insert = "INSERT INTO $table ($iCols) VALUES ($iVals)"; $rs = $zthis->Execute($insert); return ($rs) ? 2 : 0; } // Requires $ADODB_FETCH_MODE = ADODB_FETCH_NUM function _adodb_getmenu(&$zthis, $name,$defstr='',$blank1stItem=true,$multiple=false, $size=0, $selectAttr='',$compareFields0=true) { $hasvalue = false; if ($multiple or is_array($defstr)) { if ($size==0) $size=5; $attr = ' multiple size="'.$size.'"'; if (!strpos($name,'[]')) $name .= '[]'; } else if ($size) $attr = ' size="'.$size.'"'; else $attr =''; $s = '\n"; } /* Count the number of records this sql statement will return by using query rewriting techniques... Does not work with UNIONs. */ function _adodb_getcount(&$zthis, $sql,$inputarr=false,$secs2cache=0) { $qryRecs = 0; if (preg_match("/^\s*SELECT\s+DISTINCT/is", $sql) || preg_match('/\s+GROUP\s+BY\s+/is',$sql)) { // ok, has SELECT DISTINCT or GROUP BY so see if we can use a table alias // but this is only supported by oracle and postgresql... if ($zthis->dataProvider == 'oci8') { $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$sql); $rewritesql = "SELECT COUNT(*) FROM ($rewritesql)"; } else if ( $zthis->databaseType == 'postgres' || $zthis->databaseType == 'postgres7') { $info = $zthis->ServerInfo(); if (substr($info['version'],0,3) >= 7.1) { // good till version 999 $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$sql); $rewritesql = "SELECT COUNT(*) FROM ($rewritesql) _ADODB_ALIAS_"; } } } else { // now replace SELECT ... FROM with SELECT COUNT(*) FROM $rewritesql = preg_replace( '/^\s*SELECT\s.*\s+FROM\s/Uis','SELECT COUNT(*) FROM ',$sql); // fix by alexander zhukov, alex#unipack.ru, because count(*) and 'order by' fails // with mssql, access and postgresql. Also a good speedup optimization - skips sorting! $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$rewritesql); } if (isset($rewritesql) && $rewritesql != $sql) { if ($secs2cache) { // we only use half the time of secs2cache because the count can quickly // become inaccurate if new records are added $qryRecs = $zthis->CacheGetOne($secs2cache/2,$rewritesql,$inputarr); } else { $qryRecs = $zthis->GetOne($rewritesql,$inputarr); } if ($qryRecs !== false) return $qryRecs; } //-------------------------------------------- // query rewrite failed - so try slower way... // strip off unneeded ORDER BY if no UNION if (preg_match('/\s*UNION\s*/is', $sql)) $rewritesql = $sql; else $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$sql); $rstest = &$zthis->Execute($rewritesql,$inputarr); if ($rstest) { $qryRecs = $rstest->RecordCount(); if ($qryRecs == -1) { global $ADODB_EXTENSION; // some databases will return -1 on MoveLast() - change to MoveNext() if ($ADODB_EXTENSION) { while(!$rstest->EOF) { adodb_movenext($rstest); } } else { while(!$rstest->EOF) { $rstest->MoveNext(); } } $qryRecs = $rstest->_currentRow; } $rstest->Close(); if ($qryRecs == -1) return 0; } return $qryRecs; } /* Code originally from "Cornel G" This code will not work with SQL that has UNION in it Also if you are using CachePageExecute(), there is a strong possibility that data will get out of synch. use CachePageExecute() only with tables that rarely change. */ function &_adodb_pageexecute_all_rows(&$zthis, $sql, $nrows, $page, $inputarr=false, $secs2cache=0) { $atfirstpage = false; $atlastpage = false; $lastpageno=1; // If an invalid nrows is supplied, // we assume a default value of 10 rows per page if (!isset($nrows) || $nrows <= 0) $nrows = 10; $qryRecs = false; //count records for no offset $qryRecs = _adodb_getcount($zthis,$sql,$inputarr,$secs2cache); $lastpageno = (int) ceil($qryRecs / $nrows); $zthis->_maxRecordCount = $qryRecs; // ***** Here we check whether $page is the last page or // whether we are trying to retrieve // a page number greater than the last page number. if ($page >= $lastpageno) { $page = $lastpageno; $atlastpage = true; } // If page number <= 1, then we are at the first page if (empty($page) || $page <= 1) { $page = 1; $atfirstpage = true; } // We get the data we want $offset = $nrows * ($page-1); if ($secs2cache > 0) $rsreturn = &$zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $offset, $inputarr); else $rsreturn = &$zthis->SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); // Before returning the RecordSet, we set the pagination properties we need if ($rsreturn) { $rsreturn->_maxRecordCount = $qryRecs; $rsreturn->rowsPerPage = $nrows; $rsreturn->AbsolutePage($page); $rsreturn->AtFirstPage($atfirstpage); $rsreturn->AtLastPage($atlastpage); $rsreturn->LastPageNo($lastpageno); } return $rsreturn; } // Ivn Oliva version function &_adodb_pageexecute_no_last_page(&$zthis, $sql, $nrows, $page, $inputarr=false, $secs2cache=0) { $atfirstpage = false; $atlastpage = false; if (!isset($page) || $page <= 1) { // If page number <= 1, then we are at the first page $page = 1; $atfirstpage = true; } if ($nrows <= 0) $nrows = 10; // If an invalid nrows is supplied, we assume a default value of 10 rows per page // ***** Here we check whether $page is the last page or whether we are trying to retrieve a page number greater than // the last page number. $pagecounter = $page + 1; $pagecounteroffset = ($pagecounter * $nrows) - $nrows; if ($secs2cache>0) $rstest = &$zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $pagecounteroffset, $inputarr); else $rstest = &$zthis->SelectLimit($sql, $nrows, $pagecounteroffset, $inputarr, $secs2cache); if ($rstest) { while ($rstest && $rstest->EOF && $pagecounter>0) { $atlastpage = true; $pagecounter--; $pagecounteroffset = $nrows * ($pagecounter - 1); $rstest->Close(); if ($secs2cache>0) $rstest = &$zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $pagecounteroffset, $inputarr); else $rstest = &$zthis->SelectLimit($sql, $nrows, $pagecounteroffset, $inputarr, $secs2cache); } if ($rstest) $rstest->Close(); } if ($atlastpage) { // If we are at the last page or beyond it, we are going to retrieve it $page = $pagecounter; if ($page == 1) $atfirstpage = true; // We have to do this again in case the last page is the same as the first //... page, that is, the recordset has only 1 page. } // We get the data we want $offset = $nrows * ($page-1); if ($secs2cache > 0) $rsreturn = &$zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $offset, $inputarr); else $rsreturn = &$zthis->SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); // Before returning the RecordSet, we set the pagination properties we need if ($rsreturn) { $rsreturn->rowsPerPage = $nrows; $rsreturn->AbsolutePage($page); $rsreturn->AtFirstPage($atfirstpage); $rsreturn->AtLastPage($atlastpage); } return $rsreturn; } function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=2) { if (!$rs) { printf(ADODB_BAD_RS,'GetUpdateSQL'); return false; } $fieldUpdatedCount = 0; $arrFields = _array_change_key_case($arrFields); $hasnumeric = isset($rs->fields[0]); $setFields = ''; // Loop through all of the fields in the recordset for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { // Get the field from the recordset $field = $rs->FetchField($i); // If the recordset field is one // of the fields passed in then process. $upperfname = strtoupper($field->name); if (adodb_key_exists($upperfname,$arrFields,$force)) { // If the existing field value in the recordset // is different from the value passed in then // go ahead and append the field name and new value to // the update query. if ($hasnumeric) $val = $rs->fields[$i]; else if (isset($rs->fields[$upperfname])) $val = $rs->fields[$upperfname]; else if (isset($rs->fields[$field->name])) $val = $rs->fields[$field->name]; else if (isset($rs->fields[strtolower($upperfname)])) $val = $rs->fields[strtolower($upperfname)]; else $val = ''; if ($forceUpdate || strcmp($val, $arrFields[$upperfname])) { // Set the counter for the number of fields that will be updated. $fieldUpdatedCount++; // Based on the datatype of the field // Format the value properly for the database $type = $rs->MetaType($field->type); if ($type == 'null') { $type = 'C'; } if (strpos($upperfname,' ') !== false) $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote; else $fnameq = $upperfname; // is_null requires php 4.0.4 //********************************************************// if (is_null($arrFields[$upperfname]) || (empty($arrFields[$upperfname]) && strlen($arrFields[$upperfname]) == 0) || $arrFields[$upperfname] === 'null' ) { switch ($force) { //case 0: // //Ignore empty values. This is allready handled in "adodb_key_exists" function. //break; case 1: //Set null $setFields .= $field->name . " = null, "; break; case 2: //Set empty $arrFields[$upperfname] = ""; $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,$arrFields, $magicq); break; default: case 3: //Set the value that was given in array, so you can give both null and empty values if (is_null($arrFields[$upperfname]) || $arrFields[$upperfname] === 'null') { $setFields .= $field->name . " = null, "; } else { $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,$arrFields, $magicq); } break; } //********************************************************// } else { //we do this so each driver can customize the sql for //DB specific column types. //Oracle needs BLOB types to be handled with a returning clause //postgres has special needs as well $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq, $arrFields, $magicq); } } } } // If there were any modified fields then build the rest of the update query. if ($fieldUpdatedCount > 0 || $forceUpdate) { // Get the table name from the existing query. preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName); // Get the full where clause excluding the word "WHERE" from // the existing query. preg_match('/\sWHERE\s(.*)/is', $rs->sql, $whereClause); $discard = false; // not a good hack, improvements? if ($whereClause) { if (preg_match('/\s(ORDER\s.*)/is', $whereClause[1], $discard)); else if (preg_match('/\s(LIMIT\s.*)/is', $whereClause[1], $discard)); else preg_match('/\s(FOR UPDATE.*)/is', $whereClause[1], $discard); } else $whereClause = array(false,false); if ($discard) $whereClause[1] = substr($whereClause[1], 0, strlen($whereClause[1]) - strlen($discard[1])); $sql = 'UPDATE '.$tableName[1].' SET '.substr($setFields, 0, -2); if (strlen($whereClause[1]) > 0) $sql .= ' WHERE '.$whereClause[1]; return $sql; } else { return false; } } function adodb_key_exists($key, &$arr,$force=2) { if ($force<=0) { // the following is the old behaviour where null or empty fields are ignored return (!empty($arr[$key])) || (isset($arr[$key]) && strlen($arr[$key])>0); } if (isset($arr[$key])) return true; ## null check below if (ADODB_PHPVER >= 0x4010) return array_key_exists($key,$arr); return false; } /** * There is a special case of this function for the oci8 driver. * The proper way to handle an insert w/ a blob in oracle requires * a returning clause with bind variables and a descriptor blob. * * */ function _adodb_getinsertsql(&$zthis,&$rs,$arrFields,$magicq=false,$force=2) { static $cacheRS = false; static $cacheSig = 0; static $cacheCols; $tableName = ''; $values = ''; $fields = ''; $recordSet = null; $arrFields = _array_change_key_case($arrFields); $fieldInsertedCount = 0; if (is_string($rs)) { //ok we have a table name //try and get the column info ourself. $tableName = $rs; //we need an object for the recordSet //because we have to call MetaType. //php can't do a $rsclass::MetaType() $rsclass = $zthis->rsPrefix.$zthis->databaseType; $recordSet =& new $rsclass(-1,$zthis->fetchMode); $recordSet->connection = &$zthis; if (is_string($cacheRS) && $cacheRS == $rs) { $columns =& $cacheCols; } else { $columns = $zthis->MetaColumns( $tableName ); $cacheRS = $tableName; $cacheCols = $columns; } } else if (is_subclass_of($rs, 'adorecordset')) { if (isset($rs->insertSig) && is_integer($cacheRS) && $cacheRS == $rs->insertSig) { $columns =& $cacheCols; } else { for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) $columns[] = $rs->FetchField($i); $cacheRS = $cacheSig; $cacheCols = $columns; $rs->insertSig = $cacheSig++; } $recordSet =& $rs; } else { printf(ADODB_BAD_RS,'GetInsertSQL'); return false; } // Loop through all of the fields in the recordset foreach( $columns as $field ) { $upperfname = strtoupper($field->name); if (adodb_key_exists($upperfname,$arrFields,$force)) { $bad = false; if (strpos($upperfname,' ') !== false) $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote; else $fnameq = $upperfname; $type = $recordSet->MetaType($field->type); /********************************************************/ if (is_null($arrFields[$upperfname]) || (empty($arrFields[$upperfname]) && strlen($arrFields[$upperfname]) == 0) || $arrFields[$upperfname] === 'null' ) { switch ($force) { case 0: // we must always set null if missing $bad = true; break; case 1: $values .= "null, "; break; case 2: //Set empty $arrFields[$upperfname] = ""; $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq,$arrFields, $magicq); break; default: case 3: //Set the value that was given in array, so you can give both null and empty values if (is_null($arrFields[$upperfname]) || $arrFields[$upperfname] === 'null') { $values .= "null, "; } else { $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq, $arrFields, $magicq); } break; } // switch /*********************************************************/ } else { //we do this so each driver can customize the sql for //DB specific column types. //Oracle needs BLOB types to be handled with a returning clause //postgres has special needs as well $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq, $arrFields, $magicq); } if ($bad) continue; // Set the counter for the number of fields that will be inserted. $fieldInsertedCount++; // Get the name of the fields to insert $fields .= $fnameq . ", "; } } // If there were any inserted fields then build the rest of the insert query. if ($fieldInsertedCount <= 0) return false; // Get the table name from the existing query. if (!$tableName) { if (preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName)) $tableName = $tableName[1]; else return false; } // Strip off the comma and space on the end of both the fields // and their values. $fields = substr($fields, 0, -2); $values = substr($values, 0, -2); // Append the fields and their values to the insert query. return 'INSERT INTO '.$tableName.' ( '.$fields.' ) VALUES ( '.$values.' )'; } /** * This private method is used to help construct * the update/sql which is generated by GetInsertSQL and GetUpdateSQL. * It handles the string construction of 1 column -> sql string based on * the column type. We want to do 'safe' handling of BLOBs * * @param string the type of sql we are trying to create * 'I' or 'U'. * @param string column data type from the db::MetaType() method * @param string the column name * @param array the column value * * @return string * */ function _adodb_column_sql_oci8(&$zthis,$action, $type, $fname, $fnameq, $arrFields, $magicq) { $sql = ''; // Based on the datatype of the field // Format the value properly for the database switch($type) { case 'B': //in order to handle Blobs correctly, we need //to do some magic for Oracle //we need to create a new descriptor to handle //this properly if (!empty($zthis->hasReturningInto)) { if ($action == 'I') { $sql = 'empty_blob(), '; } else { $sql = $fnameq. '=empty_blob(), '; } //add the variable to the returning clause array //so the user can build this later in //case they want to add more to it $zthis->_returningArray[$fname] = ':xx'.$fname.'xx'; } else if (empty($arrFields[$fname])){ if ($action == 'I') { $sql = 'empty_blob(), '; } else { $sql = $fnameq. '=empty_blob(), '; } } else { //this is to maintain compatibility //with older adodb versions. $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); } break; case "X": //we need to do some more magic here for long variables //to handle these correctly in oracle. //create a safe bind var name //to avoid conflicts w/ dupes. if (!empty($zthis->hasReturningInto)) { if ($action == 'I') { $sql = ':xx'.$fname.'xx, '; } else { $sql = $fnameq.'=:xx'.$fname.'xx, '; } //add the variable to the returning clause array //so the user can build this later in //case they want to add more to it $zthis->_returningArray[$fname] = ':xx'.$fname.'xx'; } else { //this is to maintain compatibility //with older adodb versions. $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); } break; default: $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); break; } return $sql; } function _adodb_column_sql(&$zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq, $recurse=true) { if ($recurse) { switch($zthis->dataProvider) { case 'postgres': if ($type == 'L') $type = 'C'; break; case 'oci8': return _adodb_column_sql_oci8($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq); } } $sql = ''; switch($type) { case "C": case "X": case 'B': if ($action == 'I') { $sql = $zthis->qstr($arrFields[$fname],$magicq) . ", "; } else { $sql .= $fnameq . "=" . $zthis->qstr($arrFields[$fname],$magicq) . ", "; } break; case "D": if ($action == 'I') { $sql = $zthis->DBDate($arrFields[$fname]) . ", "; } else { $sql .= $fnameq . "=" . $zthis->DBDate($arrFields[$fname]) . ", "; } break; case "T": if ($action == 'I') { $sql = $zthis->DBTimeStamp($arrFields[$fname]) . ", "; } else { $sql .= $fnameq . "=" . $zthis->DBTimeStamp($arrFields[$fname]) . ", "; } break; default: $val = $arrFields[$fname]; if (empty($val)) $val = '0'; if ($action == 'I') { $sql .= $val . ", "; } else { $sql .= $fnameq . "=" . $val . ", "; } break; } return $sql; } function _adodb_debug_execute(&$zthis, $sql, $inputarr) { global $HTTP_SERVER_VARS; $ss = ''; if ($inputarr) { foreach($inputarr as $kk=>$vv) { if (is_string($vv) && strlen($vv)>64) $vv = substr($vv,0,64).'...'; $ss .= "($kk=>'$vv') "; } $ss = "[ $ss ]"; } $sqlTxt = str_replace(',',', ',is_array($sql) ? $sql[0] : $sql); // check if running from browser or command-line $inBrowser = isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']); if ($inBrowser) { $ss = htmlspecialchars($ss); if ($zthis->debug === -1) ADOConnection::outp( "
\n($zthis->databaseType): ".htmlspecialchars($sqlTxt)."   $ss\n
\n",false); else ADOConnection::outp( "


\n($zthis->databaseType): ".htmlspecialchars($sqlTxt)."   $ss\n
\n",false); } else { ADOConnection::outp("-----\n($zthis->databaseType): ".$sqlTxt."\n-----\n",false); } $qID = $zthis->_query($sql,$inputarr); /* Alexios Fakios notes that ErrorMsg() must be called before ErrorNo() for mssql because ErrorNo() calls Execute('SELECT @ERROR'), causing recursion */ if ($zthis->databaseType == 'mssql') { // ErrorNo is a slow function call in mssql, and not reliable in PHP 4.0.6 if($emsg = $zthis->ErrorMsg()) { if ($err = $zthis->ErrorNo()) ADOConnection::outp($err.': '.$emsg); } } else if (!$qID) { ADOConnection::outp($zthis->ErrorNo() .': '. $zthis->ErrorMsg()); } return $qID; } function _adodb_backtrace($printOrArr=true,$levels=9999) { if (PHPVERSION() < 4.3) return ''; $html = (isset($_SERVER['HTTP_USER_AGENT'])); $fmt = ($html) ? " %% line %4d, file:
%s" : "%% line %4d, file: %s"; $MAXSTRLEN = 64; $s = ($html) ? '
' : '';
	
	if (is_array($printOrArr)) $traceArr = $printOrArr;
	else $traceArr = debug_backtrace();
	array_shift($traceArr);
	array_shift($traceArr);
	$tabs = sizeof($traceArr)-2;
	
	foreach ($traceArr as $arr) {
		$levels -= 1;
		if ($levels < 0) break;
		
		$args = array();
		for ($i=0; $i < $tabs; $i++) $s .=  ($html) ? '   ' : "\t";
		$tabs -= 1;
		if ($html) $s .= '';
		if (isset($arr['class'])) $s .= $arr['class'].'.';
		if (isset($arr['args']))
		 foreach($arr['args'] as $v) {
			if (is_null($v)) $args[] = 'null';
			else if (is_array($v)) $args[] = 'Array['.sizeof($v).']';
			else if (is_object($v)) $args[] = 'Object:'.get_class($v);
			else if (is_bool($v)) $args[] = $v ? 'true' : 'false';
			else {
				$v = (string) @$v;
				$str = htmlspecialchars(substr($v,0,$MAXSTRLEN));
				if (strlen($v) > $MAXSTRLEN) $str .= '...';
				$args[] = $str;
			}
		}
		$s .= $arr['function'].'('.implode(', ',$args).')';
		
		
		$s .= @sprintf($fmt, $arr['line'],$arr['file'],basename($arr['file']));
			
		$s .= "\n";
	}	
	if ($html) $s .= '
'; if ($printOrArr) print $s; return $s; } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/adodb-php4.inc.php 777 0 0 516 10142745756 17444 0aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/adodb-time.inc.php 777 0 0 71636 10142744722 17572 0 4 digit year conversion. The maximum is billions of years in the future, but this is a theoretical limit as the computation of that year would take too long with the current implementation of adodb_mktime(). This library replaces native functions as follows:
	
	getdate()  with  adodb_getdate()
	date()     with  adodb_date() 
	gmdate()   with  adodb_gmdate()
	mktime()   with  adodb_mktime()
	gmmktime() with  adodb_gmmktime()
The parameters are identical, except that adodb_date() accepts a subset of date()'s field formats. Mktime() will convert from local time to GMT, and date() will convert from GMT to local time, but daylight savings is not handled currently. This library is independant of the rest of ADOdb, and can be used as standalone code. PERFORMANCE For high speed, this library uses the native date functions where possible, and only switches to PHP code when the dates fall outside the 32-bit signed integer range. GREGORIAN CORRECTION Pope Gregory shortened October of A.D. 1582 by ten days. Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). Since 0.06, we handle this correctly, so: adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582) == 24 * 3600 (1 day) ============================================================================= COPYRIGHT (c) 2003-2004 John Lim and released under BSD-style license except for code by jackbbs, which includes adodb_mktime, adodb_get_gmt_diff, adodb_is_leap_year and originally found at http://www.php.net/manual/en/function.mktime.php ============================================================================= BUG REPORTS These should be posted to the ADOdb forums at http://phplens.com/lens/lensforum/topics.php?id=4 ============================================================================= FUNCTION DESCRIPTIONS FUNCTION adodb_getdate($date=false) Returns an array containing date information, as getdate(), but supports dates greater than 1901 to 2038. FUNCTION adodb_date($fmt, $timestamp = false) Convert a timestamp to a formatted local date. If $timestamp is not defined, the current timestamp is used. Unlike the function date(), it supports dates outside the 1901 to 2038 range. The format fields that adodb_date supports:
a - "am" or "pm" 
A - "AM" or "PM" 
d - day of the month, 2 digits with leading zeros; i.e. "01" to "31" 
D - day of the week, textual, 3 letters; e.g. "Fri" 
F - month, textual, long; e.g. "January" 
g - hour, 12-hour format without leading zeros; i.e. "1" to "12" 
G - hour, 24-hour format without leading zeros; i.e. "0" to "23" 
h - hour, 12-hour format; i.e. "01" to "12" 
H - hour, 24-hour format; i.e. "00" to "23" 
i - minutes; i.e. "00" to "59" 
j - day of the month without leading zeros; i.e. "1" to "31" 
l (lowercase 'L') - day of the week, textual, long; e.g. "Friday"  
L - boolean for whether it is a leap year; i.e. "0" or "1" 
m - month; i.e. "01" to "12" 
M - month, textual, 3 letters; e.g. "Jan" 
n - month without leading zeros; i.e. "1" to "12" 
O - Difference to Greenwich time in hours; e.g. "+0200" 
Q - Quarter, as in 1, 2, 3, 4 
r - RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200" 
s - seconds; i.e. "00" to "59" 
S - English ordinal suffix for the day of the month, 2 characters; 
   			i.e. "st", "nd", "rd" or "th" 
t - number of days in the given month; i.e. "28" to "31"
T - Timezone setting of this machine; e.g. "EST" or "MDT" 
U - seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)  
w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday) 
Y - year, 4 digits; e.g. "1999" 
y - year, 2 digits; e.g. "99" 
z - day of the year; i.e. "0" to "365" 
Z - timezone offset in seconds (i.e. "-43200" to "43200"). 
   			The offset for timezones west of UTC is always negative, 
			and for those east of UTC is always positive. 
Unsupported:
B - Swatch Internet time 
I (capital i) - "1" if Daylight Savings Time, "0" otherwise.
W - ISO-8601 week number of year, weeks starting on Monday 

FUNCTION adodb_date2($fmt, $isoDateString = false) Same as adodb_date, but 2nd parameter accepts iso date, eg. adodb_date2('d-M-Y H:i','2003-12-25 13:01:34'); FUNCTION adodb_gmdate($fmt, $timestamp = false) Convert a timestamp to a formatted GMT date. If $timestamp is not defined, the current timestamp is used. Unlike the function date(), it supports dates outside the 1901 to 2038 range. FUNCTION adodb_mktime($hr, $min, $sec [, $month, $day, $year]) Converts a local date to a unix timestamp. Unlike the function mktime(), it supports dates outside the 1901 to 2038 range. Differs from mktime() in that all parameters are currently compulsory. FUNCTION adodb_gmmktime($hr, $min, $sec [, $month, $day, $year]) Converts a gmt date to a unix timestamp. Unlike the function gmmktime(), it supports dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters are currently compulsory. ============================================================================= NOTES Useful url for generating test timestamps: http://www.4webhelp.net/us/timestamp.php Possible future optimizations include a. Using an algorithm similar to Plauger's in "The Standard C Library" (page 428, xttotm.c _Ttotm() function). Plauger's algorithm will not work outside 32-bit signed range, so i decided not to implement it. b. Iterate over a block of years (say 12) when searching for the correct year. c. Implement daylight savings, which looks awfully complicated, see http://webexhibits.org/daylightsaving/ CHANGELOG - 18 July 2004 0.15 All params in adodb_mktime were formerly compulsory. Now only the hour, min, secs is compulsory. This brings it more in line with mktime (still not identical). - 23 June 2004 0.14 Allow you to define your own daylights savings function, adodb_daylight_sv. If the function is defined (somewhere in an include), then you can correct for daylights savings. In this example, we apply daylights savings in June or July, adding one hour. This is extremely unrealistic as it does not take into account time-zone, geographic location, current year. function adodb_daylight_sv(&$arr, $is_gmt) { if ($is_gmt) return; $m = $arr['mon']; if ($m == 6 || $m == 7) $arr['hours'] += 1; } This is only called by adodb_date() and not by adodb_mktime(). The format of $arr is Array ( [seconds] => 0 [minutes] => 0 [hours] => 0 [mday] => 1 # day of month, eg 1st day of the month [mon] => 2 # month (eg. Feb) [year] => 2102 [yday] => 31 # days in current year [leap] => # true if leap year [ndays] => 28 # no of days in current month ) - 28 Apr 2004 0.13 Fixed adodb_date to properly support $is_gmt. Thx to Dimitar Angelov. - 20 Mar 2004 0.12 Fixed month calculation error in adodb_date. 2102-June-01 appeared as 2102-May-32. - 26 Oct 2003 0.11 Because of daylight savings problems (some systems apply daylight savings to January!!!), changed adodb_get_gmt_diff() to ignore daylight savings. - 9 Aug 2003 0.10 Fixed bug with dates after 2038. See http://phplens.com/lens/lensforum/msgs.php?id=6980 - 1 July 2003 0.09 Added support for Q (Quarter). Added adodb_date2(), which accepts ISO date in 2nd param - 3 March 2003 0.08 Added support for 'S' adodb_date() format char. Added constant ADODB_ALLOW_NEGATIVE_TS if you want PHP to handle negative timestamps between 1901 to 1969. - 27 Feb 2003 0.07 All negative numbers handled by adodb now because of RH 7.3+ problems. See http://bugs.php.net/bug.php?id=20048&edit=2 - 4 Feb 2003 0.06 Fixed a typo, 1852 changed to 1582! This means that pre-1852 dates are now correctly handled. - 29 Jan 2003 0.05 Leap year checking differs under Julian calendar (pre 1582). Also leap year code optimized by checking for most common case first. We also handle month overflow correctly in mktime (eg month set to 13). Day overflow for less than one month's days is supported. - 28 Jan 2003 0.04 Gregorian correction handled. In PHP5, we might throw an error if mktime uses invalid dates around 5-14 Oct 1582. Released with ADOdb 3.10. Added limbo 5-14 Oct 1582 check, when we set to 15 Oct 1582. - 27 Jan 2003 0.03 Fixed some more month problems due to gmt issues. Added constant ADODB_DATE_VERSION. Fixed calculation of days since start of year for <1970. - 27 Jan 2003 0.02 Changed _adodb_getdate() to inline leap year checking for better performance. Fixed problem with time-zones west of GMT +0000. - 24 Jan 2003 0.01 First implementation. */ /* Initialization */ /* Version Number */ define('ADODB_DATE_VERSION',0.15); /* We check for Windows as only +ve ints are accepted as dates on Windows. Apparently this problem happens also with Linux, RH 7.3 and later! glibc-2.2.5-34 and greater has been changed to return -1 for dates < 1970. This used to work. The problem exists with RedHat 7.3 and 8.0 echo (mktime(0, 0, 0, 1, 1, 1960)); // prints -1 References: http://bugs.php.net/bug.php?id=20048&edit=2 http://lists.debian.org/debian-glibc/2002/debian-glibc-200205/msg00010.html */ if (!defined('ADODB_ALLOW_NEGATIVE_TS')) define('ADODB_NO_NEGATIVE_TS',1); function adodb_date_test_date($y1,$m) { //print " $y1/$m "; $t = adodb_mktime(0,0,0,$m,13,$y1); if ("$y1-$m-13 00:00:00" != adodb_date('Y-n-d H:i:s',$t)) { print "$y1 error
"; return false; } return true; } /** Test Suite */ function adodb_date_test() { error_reporting(E_ALL); print "

Testing adodb_date and adodb_mktime. version=".ADODB_DATE_VERSION. "

"; @set_time_limit(0); $fail = false; // This flag disables calling of PHP native functions, so we can properly test the code if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1); $t = adodb_mktime(0,0,0); if (!(adodb_date('Y-m-d') == date('Y-m-d'))) print 'Error in '.adodb_mktime(0,0,0).'
'; $t = adodb_mktime(0,0,0,6,1,2102); if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'
'; $t = adodb_mktime(0,0,0,2,1,2102); if (!(adodb_date('Y-m-d',$t) == '2102-02-01')) print 'Error in '.adodb_date('Y-m-d',$t).'
'; print "

Testing gregorian <=> julian conversion

"; $t = adodb_mktime(0,0,0,10,11,1492); //http://www.holidayorigins.com/html/columbus_day.html - Friday check if (!(adodb_date('D Y-m-d',$t) == 'Fri 1492-10-11')) print 'Error in Columbus landing
'; $t = adodb_mktime(0,0,0,2,29,1500); if (!(adodb_date('Y-m-d',$t) == '1500-02-29')) print 'Error in julian leap years
'; $t = adodb_mktime(0,0,0,2,29,1700); if (!(adodb_date('Y-m-d',$t) == '1700-03-01')) print 'Error in gregorian leap years
'; print adodb_mktime(0,0,0,10,4,1582).' '; print adodb_mktime(0,0,0,10,15,1582); $diff = (adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582)); if ($diff != 3600*24) print " Error in gregorian correction = ".($diff/3600/24)." days
"; print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : 'Error')."
"; print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : 'Error')."
"; print "

Testing overflow

"; $t = adodb_mktime(0,0,0,3,33,1965); if (!(adodb_date('Y-m-d',$t) == '1965-04-02')) print 'Error in day overflow 1
'; $t = adodb_mktime(0,0,0,4,33,1971); if (!(adodb_date('Y-m-d',$t) == '1971-05-03')) print 'Error in day overflow 2
'; $t = adodb_mktime(0,0,0,1,60,1965); if (!(adodb_date('Y-m-d',$t) == '1965-03-01')) print 'Error in day overflow 3 '.adodb_date('Y-m-d',$t).'
'; $t = adodb_mktime(0,0,0,12,32,1965); if (!(adodb_date('Y-m-d',$t) == '1966-01-01')) print 'Error in day overflow 4 '.adodb_date('Y-m-d',$t).'
'; $t = adodb_mktime(0,0,0,12,63,1965); if (!(adodb_date('Y-m-d',$t) == '1966-02-01')) print 'Error in day overflow 5 '.adodb_date('Y-m-d',$t).'
'; $t = adodb_mktime(0,0,0,13,3,1965); if (!(adodb_date('Y-m-d',$t) == '1966-01-03')) print 'Error in mth overflow 1
'; print "Testing 2-digit => 4-digit year conversion

"; if (adodb_year_digit_check(00) != 2000) print "Err 2-digit 2000
"; if (adodb_year_digit_check(10) != 2010) print "Err 2-digit 2010
"; if (adodb_year_digit_check(20) != 2020) print "Err 2-digit 2020
"; if (adodb_year_digit_check(30) != 2030) print "Err 2-digit 2030
"; if (adodb_year_digit_check(40) != 1940) print "Err 2-digit 1940
"; if (adodb_year_digit_check(50) != 1950) print "Err 2-digit 1950
"; if (adodb_year_digit_check(90) != 1990) print "Err 2-digit 1990
"; // Test string formating print "

Testing date formating

"; $fmt = '\d\a\t\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \R\F\C822 r s t U w y Y z Z 2003'; $s1 = date($fmt,0); $s2 = adodb_date($fmt,0); if ($s1 != $s2) { print " date() 0 failed
$s1
$s2
"; } flush(); for ($i=100; --$i > 0; ) { $ts = 3600.0*((rand()%60000)+(rand()%60000))+(rand()%60000); $s1 = date($fmt,$ts); $s2 = adodb_date($fmt,$ts); //print "$s1
$s2

"; $pos = strcmp($s1,$s2); if (($s1) != ($s2)) { for ($j=0,$k=strlen($s1); $j < $k; $j++) { if ($s1[$j] != $s2[$j]) { print substr($s1,$j).' '; break; } } print "Error date(): $ts

 
  \"$s1\" (date len=".strlen($s1).")
  \"$s2\" (adodb_date len=".strlen($s2).")

"; $fail = true; } $a1 = getdate($ts); $a2 = adodb_getdate($ts); $rez = array_diff($a1,$a2); if (sizeof($rez)>0) { print "Error getdate() $ts
"; print_r($a1); print "
"; print_r($a2); print "

"; $fail = true; } } // Test generation of dates outside 1901-2038 print "

Testing random dates between 100 and 4000

"; adodb_date_test_date(100,1); for ($i=100; --$i >= 0;) { $y1 = 100+rand(0,1970-100); $m = rand(1,12); adodb_date_test_date($y1,$m); $y1 = 3000-rand(0,3000-1970); adodb_date_test_date($y1,$m); } print '

'; $start = 1960+rand(0,10); $yrs = 12; $i = 365.25*86400*($start-1970); $offset = 36000+rand(10000,60000); $max = 365*$yrs*86400; $lastyear = 0; // we generate a timestamp, convert it to a date, and convert it back to a timestamp // and check if the roundtrip broke the original timestamp value. print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: "; $cnt = 0; for ($max += $i; $i < $max; $i += $offset) { $ret = adodb_date('m,d,Y,H,i,s',$i); $arr = explode(',',$ret); if ($lastyear != $arr[2]) { $lastyear = $arr[2]; print " $lastyear "; flush(); } $newi = adodb_mktime($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]); if ($i != $newi) { print "Error at $i, adodb_mktime returned $newi ($ret)"; $fail = true; break; } $cnt += 1; } echo "Tested $cnt dates
"; if (!$fail) print "

Passed !

"; else print "

Failed :-(

"; } /** Returns day of week, 0 = Sunday,... 6=Saturday. Algorithm from PEAR::Date_Calc */ function adodb_dow($year, $month, $day) { /* Pope Gregory removed 10 days - October 5 to October 14 - from the year 1582 and proclaimed that from that time onwards 3 days would be dropped from the calendar every 400 years. Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). */ if ($year <= 1582) { if ($year < 1582 || ($year == 1582 && ($month < 10 || ($month == 10 && $day < 15)))) $greg_correction = 3; else $greg_correction = 0; } else $greg_correction = 0; if($month > 2) $month -= 2; else { $month += 10; $year--; } $day = ( floor((13 * $month - 1) / 5) + $day + ($year % 100) + floor(($year % 100) / 4) + floor(($year / 100) / 4) - 2 * floor($year / 100) + 77); return (($day - 7 * floor($day / 7))) + $greg_correction; } /** Checks for leap year, returns true if it is. No 2-digit year check. Also handles julian calendar correctly. */ function _adodb_is_leap_year($year) { if ($year % 4 != 0) return false; if ($year % 400 == 0) { return true; // if gregorian calendar (>1582), century not-divisible by 400 is not leap } else if ($year > 1582 && $year % 100 == 0 ) { return false; } return true; } /** checks for leap year, returns true if it is. Has 2-digit year check */ function adodb_is_leap_year($year) { return _adodb_is_leap_year(adodb_year_digit_check($year)); } /** Fix 2-digit years. Works for any century. Assumes that if 2-digit is more than 30 years in future, then previous century. */ function adodb_year_digit_check($y) { if ($y < 100) { $yr = (integer) date("Y"); $century = (integer) ($yr /100); if ($yr%100 > 50) { $c1 = $century + 1; $c0 = $century; } else { $c1 = $century; $c0 = $century - 1; } $c1 *= 100; // if 2-digit year is less than 30 years in future, set it to this century // otherwise if more than 30 years in future, then we set 2-digit year to the prev century. if (($y + $c1) < $yr+30) $y = $y + $c1; else $y = $y + $c0*100; } return $y; } /** get local time zone offset from GMT */ function adodb_get_gmt_diff() { static $TZ; if (isset($TZ)) return $TZ; $TZ = mktime(0,0,0,1,2,1970,0) - gmmktime(0,0,0,1,2,1970,0); return $TZ; } /** Returns an array with date info. */ function adodb_getdate($d=false,$fast=false) { if ($d === false) return getdate(); if (!defined('ADODB_TEST_DATES')) { if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer return @getdate($d); } } return _adodb_getdate($d); } /** Low-level function that returns the getdate() array. We have a special $fast flag, which if set to true, will return fewer array values, and is much faster as it does not calculate dow, etc. */ function _adodb_getdate($origd=false,$fast=false,$is_gmt=false) { $d = $origd - ($is_gmt ? 0 : adodb_get_gmt_diff()); $_day_power = 86400; $_hour_power = 3600; $_min_power = 60; if ($d < -12219321600) $d -= 86400*10; // if 15 Oct 1582 or earlier, gregorian correction $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); $d366 = $_day_power * 366; $d365 = $_day_power * 365; if ($d < 0) { $origd = $d; // The valid range of a 32bit signed timestamp is typically from // Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT for ($a = 1970 ; --$a >= 0;) { $lastd = $d; if ($leaf = _adodb_is_leap_year($a)) $d += $d366; else $d += $d365; if ($d >= 0) { $year = $a; break; } } $secsInYear = 86400 * ($leaf ? 366 : 365) + $lastd; $d = $lastd; $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; for ($a = 13 ; --$a > 0;) { $lastd = $d; $d += $mtab[$a] * $_day_power; if ($d >= 0) { $month = $a; $ndays = $mtab[$a]; break; } } $d = $lastd; $day = $ndays + ceil(($d+1) / ($_day_power)); $d += ($ndays - $day+1)* $_day_power; $hour = floor($d/$_hour_power); } else { for ($a = 1970 ;; $a++) { $lastd = $d; if ($leaf = _adodb_is_leap_year($a)) $d -= $d366; else $d -= $d365; if ($d < 0) { $year = $a; break; } } $secsInYear = $lastd; $d = $lastd; $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; for ($a = 1 ; $a <= 12; $a++) { $lastd = $d; $d -= $mtab[$a] * $_day_power; if ($d < 0) { $month = $a; $ndays = $mtab[$a]; break; } } $d = $lastd; $day = ceil(($d+1) / $_day_power); $d = $d - ($day-1) * $_day_power; $hour = floor($d /$_hour_power); } $d -= $hour * $_hour_power; $min = floor($d/$_min_power); $secs = $d - $min * $_min_power; if ($fast) { return array( 'seconds' => $secs, 'minutes' => $min, 'hours' => $hour, 'mday' => $day, 'mon' => $month, 'year' => $year, 'yday' => floor($secsInYear/$_day_power), 'leap' => $leaf, 'ndays' => $ndays ); } $dow = adodb_dow($year,$month,$day); return array( 'seconds' => $secs, 'minutes' => $min, 'hours' => $hour, 'mday' => $day, 'wday' => $dow, 'mon' => $month, 'year' => $year, 'yday' => floor($secsInYear/$_day_power), 'weekday' => gmdate('l',$_day_power*(3+$dow)), 'month' => gmdate('F',mktime(0,0,0,$month,2,1971)), 0 => $origd ); } function adodb_gmdate($fmt,$d=false) { return adodb_date($fmt,$d,true); } // accepts unix timestamp and iso date format in $d function adodb_date2($fmt, $d=false, $is_gmt=false) { if ($d !== false) { if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ -]?(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", ($d), $rr)) return adodb_date($fmt,false,$is_gmt); if ($rr[1] <= 100 && $rr[2]<= 1) return adodb_date($fmt,false,$is_gmt); // h-m-s-MM-DD-YY if (!isset($rr[5])) $d = adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); else $d = @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]); } return adodb_date($fmt,$d,$is_gmt); } /** Return formatted date based on timestamp $d */ function adodb_date($fmt,$d=false,$is_gmt=false) { static $daylight; if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt); if (!defined('ADODB_TEST_DATES')) { if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d); } } $_day_power = 86400; $arr = _adodb_getdate($d,true,$is_gmt); if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv'); if ($daylight) adodb_daylight_sv($arr, $is_gmt); $year = $arr['year']; $month = $arr['mon']; $day = $arr['mday']; $hour = $arr['hours']; $min = $arr['minutes']; $secs = $arr['seconds']; $max = strlen($fmt); $dates = ''; /* at this point, we have the following integer vars to manipulate: $year, $month, $day, $hour, $min, $secs */ for ($i=0; $i < $max; $i++) { switch($fmt[$i]) { case 'T': $dates .= date('T');break; // YEAR case 'L': $dates .= $arr['leap'] ? '1' : '0'; break; case 'r': // Thu, 21 Dec 2000 16:01:07 +0200 $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))).', ' . ($day<10?' '.$day:$day) . ' '.date('M',mktime(0,0,0,$month,2,1971)).' '.$year.' '; if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; if ($min < 10) $dates .= ':0'.$min; else $dates .= ':'.$min; if ($secs < 10) $dates .= ':0'.$secs; else $dates .= ':'.$secs; $gmt = adodb_get_gmt_diff(); $dates .= sprintf(' %s%04d',($gmt<0)?'+':'-',abs($gmt)/36); break; case 'Y': $dates .= $year; break; case 'y': $dates .= substr($year,strlen($year)-2,2); break; // MONTH case 'm': if ($month<10) $dates .= '0'.$month; else $dates .= $month; break; case 'Q': $dates .= ($month+3)>>2; break; case 'n': $dates .= $month; break; case 'M': $dates .= date('M',mktime(0,0,0,$month,2,1971)); break; case 'F': $dates .= date('F',mktime(0,0,0,$month,2,1971)); break; // DAY case 't': $dates .= $arr['ndays']; break; case 'z': $dates .= $arr['yday']; break; case 'w': $dates .= adodb_dow($year,$month,$day); break; case 'l': $dates .= gmdate('l',$_day_power*(3+adodb_dow($year,$month,$day))); break; case 'D': $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))); break; case 'j': $dates .= $day; break; case 'd': if ($day<10) $dates .= '0'.$day; else $dates .= $day; break; case 'S': $d10 = $day % 10; if ($d10 == 1) $dates .= 'st'; else if ($d10 == 2 && $day != 12) $dates .= 'nd'; else if ($d10 == 3) $dates .= 'rd'; else $dates .= 'th'; break; // HOUR case 'Z': $dates .= ($is_gmt) ? 0 : -adodb_get_gmt_diff(); break; case 'O': $gmt = ($is_gmt) ? 0 : adodb_get_gmt_diff(); $dates .= sprintf('%s%04d',($gmt<0)?'+':'-',abs($gmt)/36); break; case 'H': if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; break; case 'h': if ($hour > 12) $hh = $hour - 12; else { if ($hour == 0) $hh = '12'; else $hh = $hour; } if ($hh < 10) $dates .= '0'.$hh; else $dates .= $hh; break; case 'G': $dates .= $hour; break; case 'g': if ($hour > 12) $hh = $hour - 12; else { if ($hour == 0) $hh = '12'; else $hh = $hour; } $dates .= $hh; break; // MINUTES case 'i': if ($min < 10) $dates .= '0'.$min; else $dates .= $min; break; // SECONDS case 'U': $dates .= $d; break; case 's': if ($secs < 10) $dates .= '0'.$secs; else $dates .= $secs; break; // AM/PM // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM case 'a': if ($hour>=12) $dates .= 'pm'; else $dates .= 'am'; break; case 'A': if ($hour>=12) $dates .= 'PM'; else $dates .= 'AM'; break; default: $dates .= $fmt[$i]; break; // ESCAPE case "\\": $i++; if ($i < $max) $dates .= $fmt[$i]; break; } } return $dates; } /** Returns a timestamp given a GMT/UTC time. Note that $is_dst is not implemented and is ignored. */ function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false) { return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true); } /** Return a timestamp given a local time. Originally by jackbbs. Note that $is_dst is not implemented and is ignored. Not a very fast algorithm - O(n) operation. Could be optimized to O(1). */ function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false) { if (!defined('ADODB_TEST_DATES')) { // for windows, we don't check 1970 because with timezone differences, // 1 Jan 1970 could generate negative timestamp, which is illegal if (1971 < $year && $year < 2038 || $mon === false || !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038) ) return $is_gmt? @gmmktime($hr,$min,$sec,$mon,$day,$year): @mktime($hr,$min,$sec,$mon,$day,$year); } $gmt_different = ($is_gmt) ? 0 : adodb_get_gmt_diff(); $hr = intval($hr); $min = intval($min); $sec = intval($sec); $mon = intval($mon); $day = intval($day); $year = intval($year); $year = adodb_year_digit_check($year); if ($mon > 12) { $y = floor($mon / 12); $year += $y; $mon -= $y*12; } $_day_power = 86400; $_hour_power = 3600; $_min_power = 60; $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); $_total_date = 0; if ($year >= 1970) { for ($a = 1970 ; $a <= $year; $a++) { $leaf = _adodb_is_leap_year($a); if ($leaf == true) { $loop_table = $_month_table_leaf; $_add_date = 366; } else { $loop_table = $_month_table_normal; $_add_date = 365; } if ($a < $year) { $_total_date += $_add_date; } else { for($b=1;$b<$mon;$b++) { $_total_date += $loop_table[$b]; } } } $_total_date +=$day-1; $ret = $_total_date * $_day_power + $hr * $_hour_power + $min * $_min_power + $sec + $gmt_different; } else { for ($a = 1969 ; $a >= $year; $a--) { $leaf = _adodb_is_leap_year($a); if ($leaf == true) { $loop_table = $_month_table_leaf; $_add_date = 366; } else { $loop_table = $_month_table_normal; $_add_date = 365; } if ($a > $year) { $_total_date += $_add_date; } else { for($b=12;$b>$mon;$b--) { $_total_date += $loop_table[$b]; } } } $_total_date += $loop_table[$mon] - $day; $_day_time = $hr * $_hour_power + $min * $_min_power + $sec; $_day_time = $_day_power - $_day_time; $ret = -( $_total_date * $_day_power + $_day_time - $gmt_different); if ($ret < -12220185600) $ret += 10*86400; // if earlier than 5 Oct 1582 - gregorian correction else if ($ret < -12219321600) $ret = -12219321600; // if in limbo, reset to 15 Oct 1582. } //print " dmy=$day/$mon/$year $hr:$min:$sec => " .$ret; return $ret; } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/adodb.inc.php 777 0 0 327211 10142747670 16654 0 Manual is at http://php.weblogs.com/adodb_manual */ if (!defined('_ADODB_LAYER')) { define('_ADODB_LAYER',1); //============================================================================================== // CONSTANT DEFINITIONS //============================================================================================== /** * Set ADODB_DIR to the directory where this file resides... * This constant was formerly called $ADODB_RootPath */ if (!defined('ADODB_DIR')) define('ADODB_DIR',dirname(__FILE__)); //============================================================================================== // GLOBAL VARIABLES //============================================================================================== GLOBAL $ADODB_vers, // database version $ADODB_COUNTRECS, // count number of records returned - slows down query $ADODB_CACHE_DIR, // directory to cache recordsets $ADODB_EXTENSION, // ADODB extension installed $ADODB_COMPAT_FETCH, // If $ADODB_COUNTRECS and this is true, $rs->fields is available on EOF $ADODB_FETCH_MODE; // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default... //============================================================================================== // GLOBAL SETUP //============================================================================================== $ADODB_EXTENSION = defined('ADODB_EXTENSION'); //********************************************************// /* Controls $ADODB_FORCE_TYPE mode. Default is ADODB_FORCE_VALUE (3). Used in GetUpdateSql and GetInsertSql functions. Thx to Niko, nuko#mbnet.fi 0 = ignore empty fields. All empty fields in array are ignored. 1 = force null. All empty, php null and string 'null' fields are changed to sql NULL values. 2 = force empty. All empty, php null and string 'null' fields are changed to sql empty '' or 0 values. 3 = force value. Value is left as it is. Php null and string 'null' are set to sql NULL values and empty fields '' are set to empty '' sql values. */ define('ADODB_FORCE_IGNORE',0); define('ADODB_FORCE_NULL',1); define('ADODB_FORCE_EMPTY',2); define('ADODB_FORCE_VALUE',3); //********************************************************// if (!$ADODB_EXTENSION || ADODB_EXTENSION < 4.0) { define('ADODB_BAD_RS','

Bad $rs in %s. Connection or SQL invalid. Try using $connection->debug=true;

'); // allow [ ] @ ` " and . in table names define('ADODB_TABLE_REGEX','([]0-9a-z_\"\`\.\@\[-]*)'); // prefetching used by oracle if (!defined('ADODB_PREFETCH_ROWS')) define('ADODB_PREFETCH_ROWS',10); /* Controls ADODB_FETCH_ASSOC field-name case. Default is 2, use native case-names. This currently works only with mssql, odbc, oci8po and ibase derived drivers. 0 = assoc lowercase field names. $rs->fields['orderid'] 1 = assoc uppercase field names. $rs->fields['ORDERID'] 2 = use native-case field names. $rs->fields['OrderID'] */ define('ADODB_FETCH_DEFAULT',0); define('ADODB_FETCH_NUM',1); define('ADODB_FETCH_ASSOC',2); define('ADODB_FETCH_BOTH',3); if (!defined('TIMESTAMP_FIRST_YEAR')) define('TIMESTAMP_FIRST_YEAR',100); // PHP's version scheme makes converting to numbers difficult - workaround $_adodb_ver = (float) PHP_VERSION; if ($_adodb_ver >= 5.0) { define('ADODB_PHPVER',0x5000); } else if ($_adodb_ver > 4.299999) { # 4.3 define('ADODB_PHPVER',0x4300); } else if ($_adodb_ver > 4.199999) { # 4.2 define('ADODB_PHPVER',0x4200); } else if (strnatcmp(PHP_VERSION,'4.0.5')>=0) { define('ADODB_PHPVER',0x4050); } else { define('ADODB_PHPVER',0x4000); } } //if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2); /** Accepts $src and $dest arrays, replacing string $data */ function ADODB_str_replace($src, $dest, $data) { if (ADODB_PHPVER >= 0x4050) return str_replace($src,$dest,$data); $s = reset($src); $d = reset($dest); while ($s !== false) { $data = str_replace($s,$d,$data); $s = next($src); $d = next($dest); } return $data; } function ADODB_Setup() { GLOBAL $ADODB_vers, // database version $ADODB_COUNTRECS, // count number of records returned - slows down query $ADODB_CACHE_DIR, // directory to cache recordsets $ADODB_FETCH_MODE, $ADODB_FORCE_TYPE; $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT; $ADODB_FORCE_TYPE = ADODB_FORCE_VALUE; if (!isset($ADODB_CACHE_DIR)) { $ADODB_CACHE_DIR = '/tmp'; //(isset($_ENV['TMP'])) ? $_ENV['TMP'] : '/tmp'; } else { // do not accept url based paths, eg. http:/ or ftp:/ if (strpos($ADODB_CACHE_DIR,'://') !== false) die("Illegal path http:// or ftp://"); } // Initialize random number generator for randomizing cache flushes srand(((double)microtime())*1000000); /** * ADODB version as a string. */ $ADODB_vers = 'V4.54 5 Nov 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved. Released BSD & LGPL.'; /** * Determines whether recordset->RecordCount() is used. * Set to false for highest performance -- RecordCount() will always return -1 then * for databases that provide "virtual" recordcounts... */ if (!isset($ADODB_COUNTRECS)) $ADODB_COUNTRECS = true; } //============================================================================================== // CHANGE NOTHING BELOW UNLESS YOU ARE DESIGNING ADODB //============================================================================================== ADODB_Setup(); //============================================================================================== // CLASS ADOFieldObject //============================================================================================== /** * Helper class for FetchFields -- holds info on a column */ class ADOFieldObject { var $name = ''; var $max_length=0; var $type=""; // additional fields by dannym... (danny_milo@yahoo.com) var $not_null = false; // actually, this has already been built-in in the postgres, fbsql AND mysql module? ^-^ // so we can as well make not_null standard (leaving it at "false" does not harm anyways) var $has_default = false; // this one I have done only in mysql and postgres for now ... // others to come (dannym) var $default_value; // default, if any, and supported. Check has_default first. } function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection) { //print "Errorno ($fn errno=$errno m=$errmsg) "; $thisConnection->_transOK = false; if ($thisConnection->_oldRaiseFn) { $fn = $thisConnection->_oldRaiseFn; $fn($dbms, $fn, $errno, $errmsg, $p1, $p2,$thisConnection); } } //============================================================================================== // CLASS ADOConnection //============================================================================================== /** * Connection object. For connecting to databases, and executing queries. */ class ADOConnection { // // PUBLIC VARS // var $dataProvider = 'native'; var $databaseType = ''; /// RDBMS currently in use, eg. odbc, mysql, mssql var $database = ''; /// Name of database to be used. var $host = ''; /// The hostname of the database server var $user = ''; /// The username which is used to connect to the database server. var $password = ''; /// Password for the username. For security, we no longer store it. var $debug = false; /// if set to true will output sql statements var $maxblobsize = 262144; /// maximum size of blobs or large text fields (262144 = 256K)-- some db's die otherwise like foxpro var $concat_operator = '+'; /// default concat operator -- change to || for Oracle/Interbase var $substr = 'substr'; /// substring operator var $length = 'length'; /// string length operator var $random = 'rand()'; /// random function var $upperCase = 'upper'; /// uppercase function var $fmtDate = "'Y-m-d'"; /// used by DBDate() as the default date format used by the database var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /// used by DBTimeStamp as the default timestamp fmt. var $true = '1'; /// string that represents TRUE for a database var $false = '0'; /// string that represents FALSE for a database var $replaceQuote = "\\'"; /// string to use to replace quotes var $nameQuote = '"'; /// string to use to quote identifiers and names var $charSet=false; /// character set to use - only for interbase, postgres and oci8 var $metaDatabasesSQL = ''; var $metaTablesSQL = ''; var $uniqueOrderBy = false; /// All order by columns have to be unique var $emptyDate = ' '; var $emptyTimeStamp = ' '; var $lastInsID = false; //-- var $hasInsertID = false; /// supports autoincrement ID? var $hasAffectedRows = false; /// supports affected rows for update/delete? var $hasTop = false; /// support mssql/access SELECT TOP 10 * FROM TABLE var $hasLimit = false; /// support pgsql/mysql SELECT * FROM TABLE LIMIT 10 var $readOnly = false; /// this is a readonly database - used by phpLens var $hasMoveFirst = false; /// has ability to run MoveFirst(), scrolling backwards var $hasGenID = false; /// can generate sequences using GenID(); var $hasTransactions = true; /// has transactions //-- var $genID = 0; /// sequence id used by GenID(); var $raiseErrorFn = false; /// error function to call var $isoDates = false; /// accepts dates in ISO format var $cacheSecs = 3600; /// cache for 1 hour var $sysDate = false; /// name of function that returns the current date var $sysTimeStamp = false; /// name of function that returns the current timestamp var $arrayClass = 'ADORecordSet_array'; /// name of class used to generate array recordsets, which are pre-downloaded recordsets var $noNullStrings = false; /// oracle specific stuff - if true ensures that '' is converted to ' ' var $numCacheHits = 0; var $numCacheMisses = 0; var $pageExecuteCountRows = true; var $uniqueSort = false; /// indicates that all fields in order by must be unique var $leftOuter = false; /// operator to use for left outer join in WHERE clause var $rightOuter = false; /// operator to use for right outer join in WHERE clause var $ansiOuter = false; /// whether ansi outer join syntax supported var $autoRollback = false; // autoRollback on PConnect(). var $poorAffectedRows = false; // affectedRows not working or unreliable var $fnExecute = false; var $fnCacheExecute = false; var $blobEncodeType = false; // false=not required, 'I'=encode to integer, 'C'=encode to char var $rsPrefix = "ADORecordSet_"; var $autoCommit = true; /// do not modify this yourself - actually private var $transOff = 0; /// temporarily disable transactions var $transCnt = 0; /// count of nested transactions var $fetchMode=false; // // PRIVATE VARS // var $_oldRaiseFn = false; var $_transOK = null; var $_connectionID = false; /// The returned link identifier whenever a successful database connection is made. var $_errorMsg = false; /// A variable which was used to keep the returned last error message. The value will /// then returned by the errorMsg() function var $_errorCode = false; /// Last error code, not guaranteed to be used - only by oci8 var $_queryID = false; /// This variable keeps the last created result link identifier var $_isPersistentConnection = false; /// A boolean variable to state whether its a persistent connection or normal connection. */ var $_bindInputArray = false; /// set to true if ADOConnection.Execute() permits binding of array parameters. var $_evalAll = false; var $_affected = false; var $_logsql = false; /** * Constructor */ function ADOConnection() { die('Virtual Class -- cannot instantiate'); } function Version() { global $ADODB_vers; return (float) substr($ADODB_vers,1); } /** Get server version info... @returns An array with 2 elements: $arr['string'] is the description string, and $arr[version] is the version (also a string). */ function ServerInfo() { return array('description' => '', 'version' => ''); } function IsConnected() { return !empty($this->_connectionID); } function _findvers($str) { if (preg_match('/([0-9]+\.([0-9\.])+)/',$str, $arr)) return $arr[1]; else return ''; } /** * All error messages go through this bottleneck function. * You can define your own handler by defining the function name in ADODB_OUTP. */ function outp($msg,$newline=true) { global $HTTP_SERVER_VARS,$ADODB_FLUSH,$ADODB_OUTP; if (defined('ADODB_OUTP')) { $fn = ADODB_OUTP; $fn($msg,$newline); return; } else if (isset($ADODB_OUTP)) { $fn = $ADODB_OUTP; $fn($msg,$newline); return; } if ($newline) $msg .= "
\n"; if (isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']) || !$newline) echo $msg; else echo strip_tags($msg); if (!empty($ADODB_FLUSH) && ob_get_length() !== false) flush(); // do not flush if output buffering enabled - useless - thx to Jesse Mullan } function Time() { $rs =& $this->_Execute("select $this->sysTimeStamp"); if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields)); return false; } /** * Connect to database * * @param [argHostname] Host to connect to * @param [argUsername] Userid to login * @param [argPassword] Associated password * @param [argDatabaseName] database * @param [forceNew] force new connection * * @return true or false */ function Connect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "", $forceNew = false) { if ($argHostname != "") $this->host = $argHostname; if ($argUsername != "") $this->user = $argUsername; if ($argPassword != "") $this->password = $argPassword; // not stored for security reasons if ($argDatabaseName != "") $this->database = $argDatabaseName; $this->_isPersistentConnection = false; if ($forceNew) { if ($this->_nconnect($this->host, $this->user, $this->password, $this->database)) return true; } else { if ($this->_connect($this->host, $this->user, $this->password, $this->database)) return true; } $err = $this->ErrorMsg(); if (empty($err)) $err = "Connection error to server '$argHostname' with user '$argUsername'"; if ($fn = $this->raiseErrorFn) $fn($this->databaseType,'CONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); $this->_connectionID = false; if ($this->debug) ADOConnection::outp( $this->host.': '.$err); return false; } function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName); } /** * Always force a new connection to database - currently only works with oracle * * @param [argHostname] Host to connect to * @param [argUsername] Userid to login * @param [argPassword] Associated password * @param [argDatabaseName] database * * @return true or false */ function NConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") { return $this->Connect($argHostname, $argUsername, $argPassword, $argDatabaseName, true); } /** * Establish persistent connect to database * * @param [argHostname] Host to connect to * @param [argUsername] Userid to login * @param [argPassword] Associated password * @param [argDatabaseName] database * * @return return true or false */ function PConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") { if (defined('ADODB_NEVER_PERSIST')) return $this->Connect($argHostname,$argUsername,$argPassword,$argDatabaseName); if ($argHostname != "") $this->host = $argHostname; if ($argUsername != "") $this->user = $argUsername; if ($argPassword != "") $this->password = $argPassword; if ($argDatabaseName != "") $this->database = $argDatabaseName; $this->_isPersistentConnection = true; if ($this->_pconnect($this->host, $this->user, $this->password, $this->database)) return true; $err = $this->ErrorMsg(); if (empty($err)) { $err = "Connection error to server '$argHostname' with user '$argUsername'"; } if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'PCONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); } $this->_connectionID = false; if ($this->debug) ADOConnection::outp( $this->host.': '.$err); return false; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysDate; return $col; // child class implement } /** * Should prepare the sql statement and return the stmt resource. * For databases that do not support this, we return the $sql. To ensure * compatibility with databases that do not support prepare: * * $stmt = $db->Prepare("insert into table (id, name) values (?,?)"); * $db->Execute($stmt,array(1,'Jill')) or die('insert failed'); * $db->Execute($stmt,array(2,'Joe')) or die('insert failed'); * * @param sql SQL to send to database * * @return return FALSE, or the prepared statement, or the original sql if * if the database does not support prepare. * */ function Prepare($sql) { return $sql; } /** * Some databases, eg. mssql require a different function for preparing * stored procedures. So we cannot use Prepare(). * * Should prepare the stored procedure and return the stmt resource. * For databases that do not support this, we return the $sql. To ensure * compatibility with databases that do not support prepare: * * @param sql SQL to send to database * * @return return FALSE, or the prepared statement, or the original sql if * if the database does not support prepare. * */ function PrepareSP($sql,$param=true) { return $this->Prepare($sql,$param); } /** * PEAR DB Compat */ function Quote($s) { return $this->qstr($s,false); } /** Requested by "Karsten Dambekalns" */ function QMagic($s) { return $this->qstr($s,get_magic_quotes_gpc()); } function q(&$s) { $s = $this->qstr($s,false); } /** * PEAR DB Compat - do not use internally. */ function ErrorNative() { return $this->ErrorNo(); } /** * PEAR DB Compat - do not use internally. */ function nextId($seq_name) { return $this->GenID($seq_name); } /** * Lock a row, will escalate and lock the table if row locking not supported * will normally free the lock at the end of the transaction * * @param $table name of table to lock * @param $where where clause to use, eg: "WHERE row=12". If left empty, will escalate to table lock */ function RowLock($table,$where) { return false; } function CommitLock($table) { return $this->CommitTrans(); } function RollbackLock($table) { return $this->RollbackTrans(); } /** * PEAR DB Compat - do not use internally. * * The fetch modes for NUMERIC and ASSOC for PEAR DB and ADODB are identical * for easy porting :-) * * @param mode The fetchmode ADODB_FETCH_ASSOC or ADODB_FETCH_NUM * @returns The previous fetch mode */ function SetFetchMode($mode) { $old = $this->fetchMode; $this->fetchMode = $mode; if ($old === false) { global $ADODB_FETCH_MODE; return $ADODB_FETCH_MODE; } return $old; } /** * PEAR DB Compat - do not use internally. */ function &Query($sql, $inputarr=false) { $rs = &$this->Execute($sql, $inputarr); if (!$rs && defined('ADODB_PEAR')) return ADODB_PEAR_Error(); return $rs; } /** * PEAR DB Compat - do not use internally */ function &LimitQuery($sql, $offset, $count, $params=false) { $rs = &$this->SelectLimit($sql, $count, $offset, $params); if (!$rs && defined('ADODB_PEAR')) return ADODB_PEAR_Error(); return $rs; } /** * PEAR DB Compat - do not use internally */ function Disconnect() { return $this->Close(); } /* Returns placeholder for parameter, eg. $DB->Param('a') will return ':a' for Oracle, and '?' for most other databases... For databases that require positioned params, eg $1, $2, $3 for postgresql, pass in Param(false) before setting the first parameter. */ function Param($name,$type='C') { return '?'; } /* InParameter and OutParameter are self-documenting versions of Parameter(). */ function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) { return $this->Parameter($stmt,$var,$name,false,$maxLen,$type); } /* */ function OutParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) { return $this->Parameter($stmt,$var,$name,true,$maxLen,$type); } /* Usage in oracle $stmt = $db->Prepare('select * from table where id =:myid and group=:group'); $db->Parameter($stmt,$id,'myid'); $db->Parameter($stmt,$group,'group',64); $db->Execute(); @param $stmt Statement returned by Prepare() or PrepareSP(). @param $var PHP variable to bind to @param $name Name of stored procedure variable name to bind to. @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. @param [$maxLen] Holds an maximum length of the variable. @param [$type] The data type of $var. Legal values depend on driver. */ function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false) { return false; } /** Improved method of initiating a transaction. Used together with CompleteTrans(). Advantages include: a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans. Only the outermost block is treated as a transaction.
b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.
c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block are disabled, making it backward compatible. */ function StartTrans($errfn = 'ADODB_TransMonitor') { if ($this->transOff > 0) { $this->transOff += 1; return; } $this->_oldRaiseFn = $this->raiseErrorFn; $this->raiseErrorFn = $errfn; $this->_transOK = true; if ($this->debug && $this->transCnt > 0) ADOConnection::outp("Bad Transaction: StartTrans called within BeginTrans"); $this->BeginTrans(); $this->transOff = 1; } /** Used together with StartTrans() to end a transaction. Monitors connection for sql errors, and will commit or rollback as appropriate. @autoComplete if true, monitor sql errors and commit and rollback as appropriate, and if set to false force rollback even if no SQL error detected. @returns true on commit, false on rollback. */ function CompleteTrans($autoComplete = true) { if ($this->transOff > 1) { $this->transOff -= 1; return true; } $this->raiseErrorFn = $this->_oldRaiseFn; $this->transOff = 0; if ($this->_transOK && $autoComplete) { if (!$this->CommitTrans()) { $this->_transOK = false; if ($this->debug) ADOConnection::outp("Smart Commit failed"); } else if ($this->debug) ADOConnection::outp("Smart Commit occurred"); } else { $this->RollbackTrans(); if ($this->debug) ADOCOnnection::outp("Smart Rollback occurred"); } return $this->_transOK; } /* At the end of a StartTrans/CompleteTrans block, perform a rollback. */ function FailTrans() { if ($this->debug) if ($this->transOff == 0) { ADOConnection::outp("FailTrans outside StartTrans/CompleteTrans"); } else { ADOConnection::outp("FailTrans was called"); adodb_backtrace(); } $this->_transOK = false; } /** Check if transaction has failed, only for Smart Transactions. */ function HasFailedTrans() { if ($this->transOff > 0) return $this->_transOK == false; return false; } /** * Execute SQL * * @param sql SQL statement to execute, or possibly an array holding prepared statement ($sql[0] will hold sql text) * @param [inputarr] holds the input data to bind to. Null elements will be set to null. * @return RecordSet or false */ function &Execute($sql,$inputarr=false) { if ($this->fnExecute) { $fn = $this->fnExecute; $ret =& $fn($this,$sql,$inputarr); if (isset($ret)) return $ret; } if ($inputarr) { if (!is_array($inputarr)) $inputarr = array($inputarr); $element0 = reset($inputarr); # is_object check because oci8 descriptors can be passed in $array_2d = is_array($element0) && !is_object(reset($element0)); if (!is_array($sql) && !$this->_bindInputArray) { $sqlarr = explode('?',$sql); if (!$array_2d) $inputarr = array($inputarr); foreach($inputarr as $arr) { $sql = ''; $i = 0; foreach($arr as $v) { $sql .= $sqlarr[$i]; // from Ron Baldwin // Only quote string types if (gettype($v) == 'string') $sql .= $this->qstr($v); else if ($v === null) $sql .= 'NULL'; else $sql .= $v; $i += 1; } $sql .= $sqlarr[$i]; if ($i+1 != sizeof($sqlarr)) ADOConnection::outp( "Input Array does not match ?: ".htmlspecialchars($sql)); $ret =& $this->_Execute($sql); if (!$ret) return $ret; } } else { if ($array_2d) { $stmt = $this->Prepare($sql); foreach($inputarr as $arr) { $ret =& $this->_Execute($stmt,$arr); if (!$ret) return $ret; } } else { $ret =& $this->_Execute($sql,$inputarr); } } } else { $ret =& $this->_Execute($sql,false); } return $ret; } function &_Execute($sql,$inputarr=false) { if ($this->debug) { global $ADODB_INCLUDED_LIB; if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); $this->_queryID = _adodb_debug_execute($this, $sql,$inputarr); } else { $this->_queryID = @$this->_query($sql,$inputarr); } /************************ // OK, query executed *************************/ if ($this->_queryID === false) { // error handling if query fails if ($this->debug == 99) adodb_backtrace(true,5); $fn = $this->raiseErrorFn; if ($fn) { $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr,$this); } $false = false; return $false; } if ($this->_queryID === true) { // return simplified recordset for inserts/updates/deletes with lower overhead $rs =& new ADORecordSet_empty(); return $rs; } // return real recordset from select statement $rsclass = $this->rsPrefix.$this->databaseType; $rs =& new $rsclass($this->_queryID,$this->fetchMode); $rs->connection = &$this; // Pablo suggestion $rs->Init(); if (is_array($sql)) $rs->sql = $sql[0]; else $rs->sql = $sql; if ($rs->_numOfRows <= 0) { global $ADODB_COUNTRECS; if ($ADODB_COUNTRECS) { if (!$rs->EOF) { $rs = &$this->_rs2rs($rs,-1,-1,!is_array($sql)); $rs->_queryID = $this->_queryID; } else $rs->_numOfRows = 0; } } return $rs; } function CreateSequence($seqname='adodbseq',$startID=1) { if (empty($this->_genSeqSQL)) return false; return $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID)); } function DropSequence($seqname) { if (empty($this->_dropSeqSQL)) return false; return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); } /** * Generates a sequence id and stores it in $this->genID; * GenID is only available if $this->hasGenID = true; * * @param seqname name of sequence to use * @param startID if sequence does not exist, start at this ID * @return 0 if not supported, otherwise a sequence id */ function GenID($seqname='adodbseq',$startID=1) { if (!$this->hasGenID) { return 0; // formerly returns false pre 1.60 } $getnext = sprintf($this->_genIDSQL,$seqname); $holdtransOK = $this->_transOK; @($rs = $this->Execute($getnext)); if (!$rs) { $this->_transOK = $holdtransOK; //if the status was ok before reset $createseq = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID)); $rs = $this->Execute($getnext); } if ($rs && !$rs->EOF) $this->genID = reset($rs->fields); else $this->genID = 0; // false if ($rs) $rs->Close(); return $this->genID; } /** * @param $table string name of the table, not needed by all databases (eg. mysql), default '' * @param $column string name of the column, not needed by all databases (eg. mysql), default '' * @return the last inserted ID. Not all databases support this. */ function Insert_ID($table='',$column='') { if ($this->_logsql && $this->lastInsID) return $this->lastInsID; if ($this->hasInsertID) return $this->_insertid($table,$column); if ($this->debug) { ADOConnection::outp( '

Insert_ID error

'); adodb_backtrace(); } return false; } /** * Portable Insert ID. Pablo Roca * * @return the last inserted ID. All databases support this. But aware possible * problems in multiuser environments. Heavy test this before deploying. */ function PO_Insert_ID($table="", $id="") { if ($this->hasInsertID){ return $this->Insert_ID($table,$id); } else { return $this->GetOne("SELECT MAX($id) FROM $table"); } } /** * @return # rows affected by UPDATE/DELETE */ function Affected_Rows() { if ($this->hasAffectedRows) { if ($this->fnExecute === 'adodb_log_sql') { if ($this->_logsql && $this->_affected !== false) return $this->_affected; } $val = $this->_affectedrows(); return ($val < 0) ? false : $val; } if ($this->debug) ADOConnection::outp( '

Affected_Rows error

',false); return false; } /** * @return the last error message */ function ErrorMsg() { return '!! '.strtoupper($this->dataProvider.' '.$this->databaseType).': '.$this->_errorMsg; } /** * @return the last error number. Normally 0 means no error. */ function ErrorNo() { return ($this->_errorMsg) ? -1 : 0; } function MetaError($err=false) { include_once(ADODB_DIR."/adodb-error.inc.php"); if ($err === false) $err = $this->ErrorNo(); return adodb_error($this->dataProvider,$this->databaseType,$err); } function MetaErrorMsg($errno) { include_once(ADODB_DIR."/adodb-error.inc.php"); return adodb_errormsg($errno); } /** * @returns an array with the primary key columns in it. */ function MetaPrimaryKeys($table, $owner=false) { // owner not used in base class - see oci8 $p = array(); $objs =& $this->MetaColumns($table); if ($objs) { foreach($objs as $v) { if (!empty($v->primary_key)) $p[] = $v->name; } } if (sizeof($p)) return $p; if (function_exists('ADODB_VIEW_PRIMARYKEYS')) return ADODB_VIEW_PRIMARYKEYS($this->databaseType, $this->database, $table, $owner); return false; } /** * @returns assoc array where keys are tables, and values are foreign keys */ function MetaForeignKeys($table, $owner=false, $upper=false) { return false; } /** * Choose a database to connect to. Many databases do not support this. * * @param dbName is the name of the database to select * @return true or false */ function SelectDB($dbName) {return false;} /** * Will select, getting rows from $offset (1-based), for $nrows. * This simulates the MySQL "select * from table limit $offset,$nrows" , and * the PostgreSQL "select * from table limit $nrows offset $offset". Note that * MySQL and PostgreSQL parameter ordering is the opposite of the other. * eg. * SelectLimit('select * from table',3); will return rows 1 to 3 (1-based) * SelectLimit('select * from table',3,2); will return rows 3 to 5 (1-based) * * Uses SELECT TOP for Microsoft databases (when $this->hasTop is set) * BUG: Currently SelectLimit fails with $sql with LIMIT or TOP clause already set * * @param sql * @param [offset] is the row to start calculations from (1-based) * @param [nrows] is the number of rows to get * @param [inputarr] array of bind variables * @param [secs2cache] is a private parameter only used by jlim * @return the recordset ($rs->databaseType == 'array') */ function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { if ($this->hasTop && $nrows > 0) { // suggested by Reinhard Balling. Access requires top after distinct // Informix requires first before distinct - F Riosa $ismssql = (strpos($this->databaseType,'mssql') !== false); if ($ismssql) $isaccess = false; else $isaccess = (strpos($this->databaseType,'access') !== false); if ($offset <= 0) { // access includes ties in result if ($isaccess) { $sql = preg_replace( '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql); if ($secs2cache>0) { $ret =& $this->CacheExecute($secs2cache, $sql,$inputarr); } else { $ret =& $this->Execute($sql,$inputarr); } return $ret; // PHP5 fix } else if ($ismssql){ $sql = preg_replace( '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql); } else { $sql = preg_replace( '/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql); } } else { $nn = $nrows + $offset; if ($isaccess || $ismssql) { $sql = preg_replace( '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql); } else { $sql = preg_replace( '/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql); } } } // if $offset>0, we want to skip rows, and $ADODB_COUNTRECS is set, we buffer rows // 0 to offset-1 which will be discarded anyway. So we disable $ADODB_COUNTRECS. global $ADODB_COUNTRECS; $savec = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; if ($offset>0){ if ($secs2cache>0) $rs = &$this->CacheExecute($secs2cache,$sql,$inputarr); else $rs = &$this->Execute($sql,$inputarr); } else { if ($secs2cache>0) $rs = &$this->CacheExecute($secs2cache,$sql,$inputarr); else $rs = &$this->Execute($sql,$inputarr); } $ADODB_COUNTRECS = $savec; if ($rs && !$rs->EOF) { $rs =& $this->_rs2rs($rs,$nrows,$offset); } //print_r($rs); return $rs; } /** * Create serializable recordset. Breaks rs link to connection. * * @param rs the recordset to serialize */ function &SerializableRS(&$rs) { $rs2 =& $this->_rs2rs($rs); $ignore = false; $rs2->connection =& $ignore; return $rs2; } /** * Convert database recordset to an array recordset * input recordset's cursor should be at beginning, and * old $rs will be closed. * * @param rs the recordset to copy * @param [nrows] number of rows to retrieve (optional) * @param [offset] offset by number of rows (optional) * @return the new recordset */ function &_rs2rs(&$rs,$nrows=-1,$offset=-1,$close=true) { if (! $rs) { $false = false; return $false; } $dbtype = $rs->databaseType; if (!$dbtype) { $rs = &$rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1 -- why ? return $rs; } if (($dbtype == 'array' || $dbtype == 'csv') && $nrows == -1 && $offset == -1) { $rs->MoveFirst(); $rs = &$rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1-- why ? return $rs; } $flds = array(); for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { $flds[] = $rs->FetchField($i); } $arr =& $rs->GetArrayLimit($nrows,$offset); //print_r($arr); if ($close) $rs->Close(); $arrayClass = $this->arrayClass; $rs2 =& new $arrayClass(); $rs2->connection = &$this; $rs2->sql = $rs->sql; $rs2->dataProvider = $this->dataProvider; $rs2->InitArrayFields($arr,$flds); $rs2->fetchMode = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode; return $rs2; } /* * Return all rows. Compat with PEAR DB */ function &GetAll($sql, $inputarr=false) { $arr =& $this->GetArray($sql,$inputarr); return $arr; } function &GetAssoc($sql, $inputarr=false,$force_array = false, $first2cols = false) { $rs =& $this->Execute($sql, $inputarr); if (!$rs) { $false = false; return $false; } $arr =& $rs->GetAssoc($force_array,$first2cols); return $arr; } function &CacheGetAssoc($secs2cache, $sql=false, $inputarr=false,$force_array = false, $first2cols = false) { if (!is_numeric($secs2cache)) { $first2cols = $force_array; $force_array = $inputarr; } $rs =& $this->CacheExecute($secs2cache, $sql, $inputarr); if (!$rs) { $false = false; return $false; } $arr =& $rs->GetAssoc($force_array,$first2cols); return $arr; } /** * Return first element of first row of sql statement. Recordset is disposed * for you. * * @param sql SQL statement * @param [inputarr] input bind array */ function GetOne($sql,$inputarr=false) { global $ADODB_COUNTRECS; $crecs = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; $ret = false; $rs = &$this->Execute($sql,$inputarr); if ($rs) { if (!$rs->EOF) $ret = reset($rs->fields); $rs->Close(); } $ADODB_COUNTRECS = $crecs; return $ret; } function CacheGetOne($secs2cache,$sql=false,$inputarr=false) { $ret = false; $rs = &$this->CacheExecute($secs2cache,$sql,$inputarr); if ($rs) { if (!$rs->EOF) $ret = reset($rs->fields); $rs->Close(); } return $ret; } function GetCol($sql, $inputarr = false, $trim = false) { $rv = false; $rs = &$this->Execute($sql, $inputarr); if ($rs) { $rv = array(); if ($trim) { while (!$rs->EOF) { $rv[] = trim(reset($rs->fields)); $rs->MoveNext(); } } else { while (!$rs->EOF) { $rv[] = reset($rs->fields); $rs->MoveNext(); } } $rs->Close(); } return $rv; } function CacheGetCol($secs, $sql = false, $inputarr = false,$trim=false) { $rv = false; $rs = &$this->CacheExecute($secs, $sql, $inputarr); if ($rs) { if ($trim) { while (!$rs->EOF) { $rv[] = trim(reset($rs->fields)); $rs->MoveNext(); } } else { while (!$rs->EOF) { $rv[] = reset($rs->fields); $rs->MoveNext(); } } $rs->Close(); } return $rv; } /* Calculate the offset of a date for a particular database and generate appropriate SQL. Useful for calculating future/past dates and storing in a database. If dayFraction=1.5 means 1.5 days from now, 1.0/24 for 1 hour. */ function OffsetDate($dayFraction,$date=false) { if (!$date) $date = $this->sysDate; return '('.$date.'+'.$dayFraction.')'; } /** * * @param sql SQL statement * @param [inputarr] input bind array */ function &GetArray($sql,$inputarr=false) { global $ADODB_COUNTRECS; $savec = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; $rs =& $this->Execute($sql,$inputarr); $ADODB_COUNTRECS = $savec; if (!$rs) if (defined('ADODB_PEAR')) return ADODB_PEAR_Error(); else { $false = false; return $false; } $arr =& $rs->GetArray(); $rs->Close(); return $arr; } function &CacheGetAll($secs2cache,$sql=false,$inputarr=false) { return $this->CacheGetArray($secs2cache,$sql,$inputarr); } function &CacheGetArray($secs2cache,$sql=false,$inputarr=false) { global $ADODB_COUNTRECS; $savec = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; $rs =& $this->CacheExecute($secs2cache,$sql,$inputarr); $ADODB_COUNTRECS = $savec; if (!$rs) if (defined('ADODB_PEAR')) return ADODB_PEAR_Error(); else { $false = false; return $false; } $arr =& $rs->GetArray(); $rs->Close(); return $arr; } /** * Return one row of sql statement. Recordset is disposed for you. * * @param sql SQL statement * @param [inputarr] input bind array */ function &GetRow($sql,$inputarr=false) { global $ADODB_COUNTRECS; $crecs = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; $rs =& $this->Execute($sql,$inputarr); $ADODB_COUNTRECS = $crecs; if ($rs) { if (!$rs->EOF) $arr = $rs->fields; else $arr = array(); $rs->Close(); return $arr; } $false = false; return $false; } function &CacheGetRow($secs2cache,$sql=false,$inputarr=false) { $rs =& $this->CacheExecute($secs2cache,$sql,$inputarr); if ($rs) { $arr = false; if (!$rs->EOF) $arr = $rs->fields; $rs->Close(); return $arr; } $false = false; return $false; } /** * Insert or replace a single record. Note: this is not the same as MySQL's replace. * ADOdb's Replace() uses update-insert semantics, not insert-delete-duplicates of MySQL. * Also note that no table locking is done currently, so it is possible that the * record be inserted twice by two programs... * * $this->Replace('products', array('prodname' =>"'Nails'","price" => 3.99), 'prodname'); * * $table table name * $fieldArray associative array of data (you must quote strings yourself). * $keyCol the primary key field name or if compound key, array of field names * autoQuote set to true to use a hueristic to quote strings. Works with nulls and numbers * but does not work with dates nor SQL functions. * has_autoinc the primary key is an auto-inc field, so skip in insert. * * Currently blob replace not supported * * returns 0 = fail, 1 = update, 2 = insert */ function Replace($table, $fieldArray, $keyCol, $autoQuote=false, $has_autoinc=false) { global $ADODB_INCLUDED_LIB; if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); return _adodb_replace($this, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc); } /** * Will select, getting rows from $offset (1-based), for $nrows. * This simulates the MySQL "select * from table limit $offset,$nrows" , and * the PostgreSQL "select * from table limit $nrows offset $offset". Note that * MySQL and PostgreSQL parameter ordering is the opposite of the other. * eg. * CacheSelectLimit(15,'select * from table',3); will return rows 1 to 3 (1-based) * CacheSelectLimit(15,'select * from table',3,2); will return rows 3 to 5 (1-based) * * BUG: Currently CacheSelectLimit fails with $sql with LIMIT or TOP clause already set * * @param [secs2cache] seconds to cache data, set to 0 to force query. This is optional * @param sql * @param [offset] is the row to start calculations from (1-based) * @param [nrows] is the number of rows to get * @param [inputarr] array of bind variables * @return the recordset ($rs->databaseType == 'array') */ function &CacheSelectLimit($secs2cache,$sql,$nrows=-1,$offset=-1,$inputarr=false) { if (!is_numeric($secs2cache)) { if ($sql === false) $sql = -1; if ($offset == -1) $offset = false; // sql, nrows, offset,inputarr $rs =& $this->SelectLimit($secs2cache,$sql,$nrows,$offset,$this->cacheSecs); } else { if ($sql === false) ADOConnection::outp( "Warning: \$sql missing from CacheSelectLimit()"); $rs =& $this->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); } return $rs; } /** * Flush cached recordsets that match a particular $sql statement. * If $sql == false, then we purge all files in the cache. */ function CacheFlush($sql=false,$inputarr=false) { global $ADODB_CACHE_DIR; if (strlen($ADODB_CACHE_DIR) > 1 && !$sql) { if (strncmp(PHP_OS,'WIN',3) === 0) { $cmd = 'del /s '.str_replace('/','\\',$ADODB_CACHE_DIR).'\adodb_*.cache'; } else { $cmd = 'rm -rf '.$ADODB_CACHE_DIR.'/??/adodb_*.cache'; // old version 'rm -f `find '.$ADODB_CACHE_DIR.' -name adodb_*.cache`'; } if ($this->debug) { ADOConnection::outp( "CacheFlush: $cmd
\n", system($cmd),"
"); } else { exec($cmd); } return; } global $ADODB_INCLUDED_CSV; if (empty($ADODB_INCLUDED_CSV)) include_once(ADODB_DIR.'/adodb-csvlib.inc.php'); $f = $this->_gencachename($sql.serialize($inputarr),false); adodb_write_file($f,''); // is adodb_write_file needed? if (!@unlink($f)) { if ($this->debug) ADOConnection::outp( "CacheFlush: failed for $f"); } } /** * Private function to generate filename for caching. * Filename is generated based on: * * - sql statement * - database type (oci8, ibase, ifx, etc) * - database name * - userid * - setFetchMode (adodb 4.23) * * When not in safe mode, we create 256 sub-directories in the cache directory ($ADODB_CACHE_DIR). * Assuming that we can have 50,000 files per directory with good performance, * then we can scale to 12.8 million unique cached recordsets. Wow! */ function _gencachename($sql,$createdir) { global $ADODB_CACHE_DIR; static $notSafeMode; if ($this->fetchMode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } else { $mode = $this->fetchMode; } $m = md5($sql.$this->databaseType.$this->database.$this->user.$mode); if (!isset($notSafeMode)) $notSafeMode = !ini_get('safe_mode'); $dir = ($notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($m,0,2) : $ADODB_CACHE_DIR; if ($createdir && $notSafeMode && !file_exists($dir)) { $oldu = umask(0); if (!mkdir($dir,0771)) if ($this->debug) ADOConnection::outp( "Unable to mkdir $dir for $sql"); umask($oldu); } return $dir.'/adodb_'.$m.'.cache'; } /** * Execute SQL, caching recordsets. * * @param [secs2cache] seconds to cache data, set to 0 to force query. * This is an optional parameter. * @param sql SQL statement to execute * @param [inputarr] holds the input data to bind to * @return RecordSet or false */ function &CacheExecute($secs2cache,$sql=false,$inputarr=false) { if (!is_numeric($secs2cache)) { $inputarr = $sql; $sql = $secs2cache; $secs2cache = $this->cacheSecs; } global $ADODB_INCLUDED_CSV; if (empty($ADODB_INCLUDED_CSV)) include_once(ADODB_DIR.'/adodb-csvlib.inc.php'); if (is_array($sql)) $sql = $sql[0]; $md5file = $this->_gencachename($sql.serialize($inputarr),true); $err = ''; if ($secs2cache > 0){ $rs = &csv2rs($md5file,$err,$secs2cache); $this->numCacheHits += 1; } else { $err='Timeout 1'; $rs = false; $this->numCacheMisses += 1; } if (!$rs) { // no cached rs found if ($this->debug) { if (get_magic_quotes_runtime()) { ADOConnection::outp("Please disable magic_quotes_runtime - it corrupts cache files :("); } if ($this->debug !== -1) ADOConnection::outp( " $md5file cache failure: $err (see sql below)"); } $rs = &$this->Execute($sql,$inputarr); if ($rs) { $eof = $rs->EOF; $rs = &$this->_rs2rs($rs); // read entire recordset into memory immediately $txt = _rs2serialize($rs,false,$sql); // serialize if (!adodb_write_file($md5file,$txt,$this->debug)) { if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'CacheExecute',-32000,"Cache write error",$md5file,$sql,$this); } if ($this->debug) ADOConnection::outp( " Cache write error"); } if ($rs->EOF && !$eof) { $rs->MoveFirst(); //$rs = &csv2rs($md5file,$err); $rs->connection = &$this; // Pablo suggestion } } else @unlink($md5file); } else { $this->_errorMsg = ''; $this->_errorCode = 0; if ($this->fnCacheExecute) { $fn = $this->fnCacheExecute; $fn($this, $secs2cache, $sql, $inputarr); } // ok, set cached object found $rs->connection = &$this; // Pablo suggestion if ($this->debug){ global $HTTP_SERVER_VARS; $inBrowser = isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']); $ttl = $rs->timeCreated + $secs2cache - time(); $s = is_array($sql) ? $sql[0] : $sql; if ($inBrowser) $s = ''.htmlspecialchars($s).''; ADOConnection::outp( " $md5file reloaded, ttl=$ttl [ $s ]"); } } return $rs; } /** * Generates an Update Query based on an existing recordset. * $arrFields is an associative array of fields with the value * that should be assigned. * * Note: This function should only be used on a recordset * that is run against a single table and sql should only * be a simple select stmt with no groupby/orderby/limit * * "Jonathan Younger" */ function GetUpdateSQL(&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=null) { global $ADODB_INCLUDED_LIB; //********************************************************// //This is here to maintain compatibility //with older adodb versions. Sets force type to force nulls if $forcenulls is set. if (!isset($force)) { global $ADODB_FORCE_TYPE; $force = $ADODB_FORCE_TYPE; } //********************************************************// if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); return _adodb_getupdatesql($this,$rs,$arrFields,$forceUpdate,$magicq,$force); } /** * Generates an Insert Query based on an existing recordset. * $arrFields is an associative array of fields with the value * that should be assigned. * * Note: This function should only be used on a recordset * that is run against a single table. */ function GetInsertSQL(&$rs, $arrFields,$magicq=false,$force=null) { global $ADODB_INCLUDED_LIB; if (!isset($force)) { global $ADODB_FORCE_TYPE; $force = $ADODB_FORCE_TYPE; } if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); return _adodb_getinsertsql($this,$rs,$arrFields,$magicq,$force); } /** * Update a blob column, given a where clause. There are more sophisticated * blob handling functions that we could have implemented, but all require * a very complex API. Instead we have chosen something that is extremely * simple to understand and use. * * Note: $blobtype supports 'BLOB' and 'CLOB', default is BLOB of course. * * Usage to update a $blobvalue which has a primary key blob_id=1 into a * field blobtable.blobcolumn: * * UpdateBlob('blobtable', 'blobcolumn', $blobvalue, 'blob_id=1'); * * Insert example: * * $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); * $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); */ function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false; } /** * Usage: * UpdateBlob('TABLE', 'COLUMN', '/path/to/file', 'ID=1'); * * $blobtype supports 'BLOB' and 'CLOB' * * $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); * $conn->UpdateBlob('blobtable','blobcol',$blobpath,'id=1'); */ function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') { $fd = fopen($path,'rb'); if ($fd === false) return false; $val = fread($fd,filesize($path)); fclose($fd); return $this->UpdateBlob($table,$column,$val,$where,$blobtype); } function BlobDecode($blob) { return $blob; } function BlobEncode($blob) { return $blob; } function SetCharSet($charset) { return false; } function IfNull( $field, $ifNull ) { return " CASE WHEN $field is null THEN $ifNull ELSE $field END "; } function LogSQL($enable=true) { include_once(ADODB_DIR.'/adodb-perf.inc.php'); if ($enable) $this->fnExecute = 'adodb_log_sql'; else $this->fnExecute = false; $old = $this->_logsql; $this->_logsql = $enable; if ($enable && !$old) $this->_affected = false; return $old; } function GetCharSet() { return false; } /** * Usage: * UpdateClob('TABLE', 'COLUMN', $var, 'ID=1', 'CLOB'); * * $conn->Execute('INSERT INTO clobtable (id, clobcol) VALUES (1, null)'); * $conn->UpdateClob('clobtable','clobcol',$clob,'id=1'); */ function UpdateClob($table,$column,$val,$where) { return $this->UpdateBlob($table,$column,$val,$where,'CLOB'); } /** * Change the SQL connection locale to a specified locale. * This is used to get the date formats written depending on the client locale. */ function SetDateLocale($locale = 'En') { $this->locale = $locale; switch ($locale) { default: case 'En': $this->fmtDate="'Y-m-d'"; $this->fmtTimeStamp = "'Y-m-d H:i:s'"; break; case 'Fr': case 'Ro': case 'It': $this->fmtDate="'d-m-Y'"; $this->fmtTimeStamp = "'d-m-Y H:i:s'"; break; case 'Ge': $this->fmtDate="'d.m.Y'"; $this->fmtTimeStamp = "'d.m.Y H:i:s'"; break; } } /** * Close Connection */ function Close() { $rez = $this->_close(); $this->_connectionID = false; return $rez; } /** * Begin a Transaction. Must be followed by CommitTrans() or RollbackTrans(). * * @return true if succeeded or false if database does not support transactions */ function BeginTrans() {return false;} /** * If database does not support transactions, always return true as data always commited * * @param $ok set to false to rollback transaction, true to commit * * @return true/false. */ function CommitTrans($ok=true) { return true;} /** * If database does not support transactions, rollbacks always fail, so return false * * @return true/false. */ function RollbackTrans() { return false;} /** * return the databases that the driver can connect to. * Some databases will return an empty array. * * @return an array of database names. */ function MetaDatabases() { global $ADODB_FETCH_MODE; if ($this->metaDatabasesSQL) { $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $arr = $this->GetCol($this->metaDatabasesSQL); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; return $arr; } return false; } /** * @param ttype can either be 'VIEW' or 'TABLE' or false. * If false, both views and tables are returned. * "VIEW" returns only views * "TABLE" returns only tables * @param showSchema returns the schema/user with the table name, eg. USER.TABLE * @param mask is the input mask - only supported by oci8 and postgresql * * @return array of tables for current database. */ function &MetaTables($ttype=false,$showSchema=false,$mask=false) { global $ADODB_FETCH_MODE; $false = false; if ($mask) { return $false; } if ($this->metaTablesSQL) { // complicated state saving by the need for backward compat $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs = $this->Execute($this->metaTablesSQL); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if ($rs === false) return $false; $arr =& $rs->GetArray(); $arr2 = array(); if ($hast = ($ttype && isset($arr[0][1]))) { $showt = strncmp($ttype,'T',1); } for ($i=0; $i < sizeof($arr); $i++) { if ($hast) { if ($showt == 0) { if (strncmp($arr[$i][1],'T',1) == 0) $arr2[] = trim($arr[$i][0]); } else { if (strncmp($arr[$i][1],'V',1) == 0) $arr2[] = trim($arr[$i][0]); } } else $arr2[] = trim($arr[$i][0]); } $rs->Close(); return $arr2; } return $false; } function _findschema(&$table,&$schema) { if (!$schema && ($at = strpos($table,'.')) !== false) { $schema = substr($table,0,$at); $table = substr($table,$at+1); } } /** * List columns in a database as an array of ADOFieldObjects. * See top of file for definition of object. * * @param table table name to query * @param upper uppercase table name (required by some databases) * @schema is optional database schema to use - not supported by all databases. * * @return array of ADOFieldObjects for current table. */ function &MetaColumns($table,$upper=true) { global $ADODB_FETCH_MODE; $false = false; if (!empty($this->metaColumnsSQL)) { $schema = false; $this->_findschema($table,$schema); $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs = $this->Execute(sprintf($this->metaColumnsSQL,($upper)?strtoupper($table):$table)); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if ($rs === false || $rs->EOF) return $false; $retarr = array(); while (!$rs->EOF) { //print_r($rs->fields); $fld =& new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; if (isset($rs->fields[3]) && $rs->fields[3]) { if ($rs->fields[3]>0) $fld->max_length = $rs->fields[3]; $fld->scale = $rs->fields[4]; if ($fld->scale>0) $fld->max_length += 1; } else $fld->max_length = $rs->fields[2]; if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; else $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } return $false; } /** * List indexes on a table as an array. * @param table table name to query * @param primary include primary keys. * * @return array of indexes on current table. */ function &MetaIndexes($table, $primary = false, $owner = false) { $false = false; return false; } /** * List columns names in a table as an array. * @param table table name to query * * @return array of column names for current table. */ function &MetaColumnNames($table, $numIndexes=false) { $objarr =& $this->MetaColumns($table); if (!is_array($objarr)) { $false = false; return $false; } $arr = array(); if ($numIndexes) { $i = 0; foreach($objarr as $v) $arr[$i++] = $v->name; } else foreach($objarr as $v) $arr[strtoupper($v->name)] = $v->name; return $arr; } /** * Different SQL databases used different methods to combine strings together. * This function provides a wrapper. * * param s variable number of string parameters * * Usage: $db->Concat($str1,$str2); * * @return concatenated string */ function Concat() { $arr = func_get_args(); return implode($this->concat_operator, $arr); } /** * Converts a date "d" to a string that the database can understand. * * @param d a date in Unix date time format. * * @return date string in database date format */ function DBDate($d) { if (empty($d) && $d !== 0) return 'null'; if (is_string($d) && !is_numeric($d)) { if ($d === 'null' || strncmp($d,"'",1) === 0) return $d; if ($this->isoDates) return "'$d'"; $d = ADOConnection::UnixDate($d); } return adodb_date($this->fmtDate,$d); } /** * Converts a timestamp "ts" to a string that the database can understand. * * @param ts a timestamp in Unix date time format. * * @return timestamp string in database timestamp format */ function DBTimeStamp($ts) { if (empty($ts) && $ts !== 0) return 'null'; # strlen(14) allows YYYYMMDDHHMMSS format if (!is_string($ts) || (is_numeric($ts) && strlen($ts)<14)) return adodb_date($this->fmtTimeStamp,$ts); if ($ts === 'null') return $ts; if ($this->isoDates && strlen($ts) !== 14) return "'$ts'"; $ts = ADOConnection::UnixTimeStamp($ts); return adodb_date($this->fmtTimeStamp,$ts); } /** * Also in ADORecordSet. * @param $v is a date string in YYYY-MM-DD format * * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format */ function UnixDate($v) { if (is_object($v)) { // odbtp support //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 ) return adodb_mktime($v->hour,$v->minute,$v->second,$v->month,$v->day, $v->year); } if (is_numeric($v) && strlen($v) !== 8) return $v; if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})|", ($v), $rr)) return false; if ($rr[1] <= TIMESTAMP_FIRST_YEAR) return 0; // h-m-s-MM-DD-YY return @adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); } /** * Also in ADORecordSet. * @param $v is a timestamp string in YYYY-MM-DD HH-NN-SS format * * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format */ function UnixTimeStamp($v) { if (is_object($v)) { // odbtp support //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 ) return adodb_mktime($v->hour,$v->minute,$v->second,$v->month,$v->day, $v->year); } if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ ,-]*(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", ($v), $rr)) return false; if ($rr[1] <= TIMESTAMP_FIRST_YEAR && $rr[2]<= 1) return 0; // h-m-s-MM-DD-YY if (!isset($rr[5])) return adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); return @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]); } /** * Also in ADORecordSet. * * Format database date based on user defined format. * * @param v is the character date in YYYY-MM-DD format, returned by database * @param fmt is the format to apply to it, using date() * * @return a date formated as user desires */ function UserDate($v,$fmt='Y-m-d',$gmt=false) { $tt = $this->UnixDate($v); // $tt == -1 if pre TIMESTAMP_FIRST_YEAR if (($tt === false || $tt == -1) && $v != false) return $v; else if ($tt == 0) return $this->emptyDate; else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR } return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt); } /** * * @param v is the character timestamp in YYYY-MM-DD hh:mm:ss format * @param fmt is the format to apply to it, using date() * * @return a timestamp formated as user desires */ function UserTimeStamp($v,$fmt='Y-m-d H:i:s',$gmt=false) { # strlen(14) allows YYYYMMDDHHMMSS format if (is_numeric($v) && strlen($v)<14) return ($gmt) ? adodb_gmdate($fmt,$v) : adodb_date($fmt,$v); $tt = $this->UnixTimeStamp($v); // $tt == -1 if pre TIMESTAMP_FIRST_YEAR if (($tt === false || $tt == -1) && $v != false) return $v; if ($tt == 0) return $this->emptyTimeStamp; return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt); } /** * Quotes a string, without prefixing nor appending quotes. */ function addq($s,$magic_quotes=false) { if (!$magic_quotes) { if ($this->replaceQuote[0] == '\\'){ // only since php 4.0.5 $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s)); } return str_replace("'",$this->replaceQuote,$s); } // undo magic quotes for " $s = str_replace('\\"','"',$s); if ($this->replaceQuote == "\\'") // ' already quoted, no need to change anything return $s; else {// change \' to '' for sybase/mssql $s = str_replace('\\\\','\\',$s); return str_replace("\\'",$this->replaceQuote,$s); } } /** * Correctly quotes a string so that all strings are escaped. We prefix and append * to the string single-quotes. * An example is $db->qstr("Don't bother",magic_quotes_runtime()); * * @param s the string to quote * @param [magic_quotes] if $s is GET/POST var, set to get_magic_quotes_gpc(). * This undoes the stupidity of magic quotes for GPC. * * @return quoted string to be sent back to database */ function qstr($s,$magic_quotes=false) { if (!$magic_quotes) { if ($this->replaceQuote[0] == '\\'){ // only since php 4.0.5 $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s)); } return "'".str_replace("'",$this->replaceQuote,$s)."'"; } // undo magic quotes for " $s = str_replace('\\"','"',$s); if ($this->replaceQuote == "\\'") // ' already quoted, no need to change anything return "'$s'"; else {// change \' to '' for sybase/mssql $s = str_replace('\\\\','\\',$s); return "'".str_replace("\\'",$this->replaceQuote,$s)."'"; } } /** * Will select the supplied $page number from a recordset, given that it is paginated in pages of * $nrows rows per page. It also saves two boolean values saying if the given page is the first * and/or last one of the recordset. Added by Ivn Oliva to provide recordset pagination. * * See readme.htm#ex8 for an example of usage. * * @param sql * @param nrows is the number of rows per page to get * @param page is the page number to get (1-based) * @param [inputarr] array of bind variables * @param [secs2cache] is a private parameter only used by jlim * @return the recordset ($rs->databaseType == 'array') * * NOTE: phpLens uses a different algorithm and does not use PageExecute(). * */ function &PageExecute($sql, $nrows, $page, $inputarr=false, $secs2cache=0) { global $ADODB_INCLUDED_LIB; if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); if ($this->pageExecuteCountRows) $rs =& _adodb_pageexecute_all_rows($this, $sql, $nrows, $page, $inputarr, $secs2cache); else $rs =& _adodb_pageexecute_no_last_page($this, $sql, $nrows, $page, $inputarr, $secs2cache); return $rs; } /** * Will select the supplied $page number from a recordset, given that it is paginated in pages of * $nrows rows per page. It also saves two boolean values saying if the given page is the first * and/or last one of the recordset. Added by Ivn Oliva to provide recordset pagination. * * @param secs2cache seconds to cache data, set to 0 to force query * @param sql * @param nrows is the number of rows per page to get * @param page is the page number to get (1-based) * @param [inputarr] array of bind variables * @return the recordset ($rs->databaseType == 'array') */ function &CachePageExecute($secs2cache, $sql, $nrows, $page,$inputarr=false) { /*switch($this->dataProvider) { case 'postgres': case 'mysql': break; default: $secs2cache = 0; break; }*/ $rs =& $this->PageExecute($sql,$nrows,$page,$inputarr,$secs2cache); return $rs; } } // end class ADOConnection //============================================================================================== // CLASS ADOFetchObj //============================================================================================== /** * Internal placeholder for record objects. Used by ADORecordSet->FetchObj(). */ class ADOFetchObj { }; //============================================================================================== // CLASS ADORecordSet_empty //============================================================================================== /** * Lightweight recordset when there are no records to be returned */ class ADORecordSet_empty { var $dataProvider = 'empty'; var $databaseType = false; var $EOF = true; var $_numOfRows = 0; var $fields = false; var $connection = false; function RowCount() {return 0;} function RecordCount() {return 0;} function PO_RecordCount(){return 0;} function Close(){return true;} function FetchRow() {return false;} function FieldCount(){ return 0;} function Init() {} } //============================================================================================== // DATE AND TIME FUNCTIONS //============================================================================================== include_once(ADODB_DIR.'/adodb-time.inc.php'); //============================================================================================== // CLASS ADORecordSet //============================================================================================== if (PHP_VERSION < 5) include_once(ADODB_DIR.'/adodb-php4.inc.php'); else include_once(ADODB_DIR.'/adodb-iterator.inc.php'); /** * RecordSet class that represents the dataset returned by the database. * To keep memory overhead low, this class holds only the current row in memory. * No prefetching of data is done, so the RecordCount() can return -1 ( which * means recordcount not known). */ class ADORecordSet extends ADODB_BASE_RS { /* * public variables */ var $dataProvider = "native"; var $fields = false; /// holds the current row data var $blobSize = 100; /// any varchar/char field this size or greater is treated as a blob /// in other words, we use a text area for editing. var $canSeek = false; /// indicates that seek is supported var $sql; /// sql text var $EOF = false; /// Indicates that the current record position is after the last record in a Recordset object. var $emptyTimeStamp = ' '; /// what to display when $time==0 var $emptyDate = ' '; /// what to display when $time==0 var $debug = false; var $timeCreated=0; /// datetime in Unix format rs created -- for cached recordsets var $bind = false; /// used by Fields() to hold array - should be private? var $fetchMode; /// default fetch mode var $connection = false; /// the parent connection /* * private variables */ var $_numOfRows = -1; /** number of rows, or -1 */ var $_numOfFields = -1; /** number of fields in recordset */ var $_queryID = -1; /** This variable keeps the result link identifier. */ var $_currentRow = -1; /** This variable keeps the current row in the Recordset. */ var $_closed = false; /** has recordset been closed */ var $_inited = false; /** Init() should only be called once */ var $_obj; /** Used by FetchObj */ var $_names; /** Used by FetchObj */ var $_currentPage = -1; /** Added by Ivn Oliva to implement recordset pagination */ var $_atFirstPage = false; /** Added by Ivn Oliva to implement recordset pagination */ var $_atLastPage = false; /** Added by Ivn Oliva to implement recordset pagination */ var $_lastPageNo = -1; var $_maxRecordCount = 0; var $datetime = false; /** * Constructor * * @param queryID this is the queryID returned by ADOConnection->_query() * */ function ADORecordSet($queryID) { $this->_queryID = $queryID; } function Init() { if ($this->_inited) return; $this->_inited = true; if ($this->_queryID) @$this->_initrs(); else { $this->_numOfRows = 0; $this->_numOfFields = 0; } if ($this->_numOfRows != 0 && $this->_numOfFields && $this->_currentRow == -1) { $this->_currentRow = 0; if ($this->EOF = ($this->_fetch() === false)) { $this->_numOfRows = 0; // _numOfRows could be -1 } } else { $this->EOF = true; } } /** * Generate a SELECT tag string from a recordset, and return the string. * If the recordset has 2 cols, we treat the 1st col as the containing * the text to display to the user, and 2nd col as the return value. Default * strings are compared with the FIRST column. * * @param name name of SELECT tag * @param [defstr] the value to hilite. Use an array for multiple hilites for listbox. * @param [blank1stItem] true to leave the 1st item in list empty * @param [multiple] true for listbox, false for popup * @param [size] #rows to show for listbox. not used by popup * @param [selectAttr] additional attributes to defined for SELECT tag. * useful for holding javascript onChange='...' handlers. & @param [compareFields0] when we have 2 cols in recordset, we compare the defstr with * column 0 (1st col) if this is true. This is not documented. * * @return HTML * * changes by glen.davies@cce.ac.nz to support multiple hilited items */ function GetMenu($name,$defstr='',$blank1stItem=true,$multiple=false, $size=0, $selectAttr='',$compareFields0=true) { global $ADODB_INCLUDED_LIB; if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); return _adodb_getmenu($this, $name,$defstr,$blank1stItem,$multiple, $size, $selectAttr,$compareFields0); } /** * Generate a SELECT tag string from a recordset, and return the string. * If the recordset has 2 cols, we treat the 1st col as the containing * the text to display to the user, and 2nd col as the return value. Default * strings are compared with the SECOND column. * */ function GetMenu2($name,$defstr='',$blank1stItem=true,$multiple=false,$size=0, $selectAttr='') { global $ADODB_INCLUDED_LIB; if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); return _adodb_getmenu($this,$name,$defstr,$blank1stItem,$multiple, $size, $selectAttr,false); } /** * return recordset as a 2-dimensional array. * * @param [nRows] is the number of rows to return. -1 means every row. * * @return an array indexed by the rows (0-based) from the recordset */ function &GetArray($nRows = -1) { global $ADODB_EXTENSION; if ($ADODB_EXTENSION) return adodb_getall($this,$nRows); $results = array(); $cnt = 0; while (!$this->EOF && $nRows != $cnt) { $results[] = $this->fields; $this->MoveNext(); $cnt++; } return $results; } function &GetAll($nRows = -1) { $arr =& $this->GetArray($nRows); return $arr; } /* * Some databases allow multiple recordsets to be returned. This function * will return true if there is a next recordset, or false if no more. */ function NextRecordSet() { return false; } /** * return recordset as a 2-dimensional array. * Helper function for ADOConnection->SelectLimit() * * @param offset is the row to start calculations from (1-based) * @param [nrows] is the number of rows to return * * @return an array indexed by the rows (0-based) from the recordset */ function &GetArrayLimit($nrows,$offset=-1) { if ($offset <= 0) { $arr =& $this->GetArray($nrows); return $arr; } $this->Move($offset); $results = array(); $cnt = 0; while (!$this->EOF && $nrows != $cnt) { $results[$cnt++] = $this->fields; $this->MoveNext(); } return $results; } /** * Synonym for GetArray() for compatibility with ADO. * * @param [nRows] is the number of rows to return. -1 means every row. * * @return an array indexed by the rows (0-based) from the recordset */ function &GetRows($nRows = -1) { $arr =& $this->GetArray($nRows); return $arr; } /** * return whole recordset as a 2-dimensional associative array if there are more than 2 columns. * The first column is treated as the key and is not included in the array. * If there is only 2 columns, it will return a 1 dimensional array of key-value pairs unless * $force_array == true. * * @param [force_array] has only meaning if we have 2 data columns. If false, a 1 dimensional * array is returned, otherwise a 2 dimensional array is returned. If this sounds confusing, * read the source. * * @param [first2cols] means if there are more than 2 cols, ignore the remaining cols and * instead of returning array[col0] => array(remaining cols), return array[col0] => col1 * * @return an associative array indexed by the first column of the array, * or false if the data has less than 2 cols. */ function &GetAssoc($force_array = false, $first2cols = false) { global $ADODB_EXTENSION; $cols = $this->_numOfFields; if ($cols < 2) { $false = false; return $false; } $numIndex = isset($this->fields[0]); $results = array(); if (!$first2cols && ($cols > 2 || $force_array)) { if ($ADODB_EXTENSION) { if ($numIndex) { while (!$this->EOF) { $results[trim($this->fields[0])] = array_slice($this->fields, 1); adodb_movenext($this); } } else { while (!$this->EOF) { $results[trim(reset($this->fields))] = array_slice($this->fields, 1); adodb_movenext($this); } } } else { if ($numIndex) { while (!$this->EOF) { $results[trim($this->fields[0])] = array_slice($this->fields, 1); $this->MoveNext(); } } else { while (!$this->EOF) { $results[trim(reset($this->fields))] = array_slice($this->fields, 1); $this->MoveNext(); } } } } else { if ($ADODB_EXTENSION) { // return scalar values if ($numIndex) { while (!$this->EOF) { // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string $results[trim(($this->fields[0]))] = $this->fields[1]; adodb_movenext($this); } } else { while (!$this->EOF) { // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string $v1 = trim(reset($this->fields)); $v2 = ''.next($this->fields); $results[$v1] = $v2; adodb_movenext($this); } } } else { if ($numIndex) { while (!$this->EOF) { // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string $results[trim(($this->fields[0]))] = $this->fields[1]; $this->MoveNext(); } } else { while (!$this->EOF) { // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string $v1 = trim(reset($this->fields)); $v2 = ''.next($this->fields); $results[$v1] = $v2; $this->MoveNext(); } } } } return $results; } /** * * @param v is the character timestamp in YYYY-MM-DD hh:mm:ss format * @param fmt is the format to apply to it, using date() * * @return a timestamp formated as user desires */ function UserTimeStamp($v,$fmt='Y-m-d H:i:s') { if (is_numeric($v) && strlen($v)<14) return adodb_date($fmt,$v); $tt = $this->UnixTimeStamp($v); // $tt == -1 if pre TIMESTAMP_FIRST_YEAR if (($tt === false || $tt == -1) && $v != false) return $v; if ($tt === 0) return $this->emptyTimeStamp; return adodb_date($fmt,$tt); } /** * @param v is the character date in YYYY-MM-DD format, returned by database * @param fmt is the format to apply to it, using date() * * @return a date formated as user desires */ function UserDate($v,$fmt='Y-m-d') { $tt = $this->UnixDate($v); // $tt == -1 if pre TIMESTAMP_FIRST_YEAR if (($tt === false || $tt == -1) && $v != false) return $v; else if ($tt == 0) return $this->emptyDate; else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR } return adodb_date($fmt,$tt); } /** * @param $v is a date string in YYYY-MM-DD format * * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format */ function UnixDate($v) { return ADOConnection::UnixDate($v); } /** * @param $v is a timestamp string in YYYY-MM-DD HH-NN-SS format * * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format */ function UnixTimeStamp($v) { return ADOConnection::UnixTimeStamp($v); } /** * PEAR DB Compat - do not use internally */ function Free() { return $this->Close(); } /** * PEAR DB compat, number of rows */ function NumRows() { return $this->_numOfRows; } /** * PEAR DB compat, number of cols */ function NumCols() { return $this->_numOfFields; } /** * Fetch a row, returning false if no more rows. * This is PEAR DB compat mode. * * @return false or array containing the current record */ function &FetchRow() { if ($this->EOF) { $false = false; return $false; } $arr = $this->fields; $this->_currentRow++; if (!$this->_fetch()) $this->EOF = true; return $arr; } /** * Fetch a row, returning PEAR_Error if no more rows. * This is PEAR DB compat mode. * * @return DB_OK or error object */ function FetchInto(&$arr) { if ($this->EOF) return (defined('PEAR_ERROR_RETURN')) ? new PEAR_Error('EOF',-1): false; $arr = $this->fields; $this->MoveNext(); return 1; // DB_OK } /** * Move to the first row in the recordset. Many databases do NOT support this. * * @return true or false */ function MoveFirst() { if ($this->_currentRow == 0) return true; return $this->Move(0); } /** * Move to the last row in the recordset. * * @return true or false */ function MoveLast() { if ($this->_numOfRows >= 0) return $this->Move($this->_numOfRows-1); if ($this->EOF) return false; while (!$this->EOF) { $f = $this->fields; $this->MoveNext(); } $this->fields = $f; $this->EOF = false; return true; } /** * Move to next record in the recordset. * * @return true if there still rows available, or false if there are no more rows (EOF). */ function MoveNext() { if (!$this->EOF) { $this->_currentRow++; if ($this->_fetch()) return true; } $this->EOF = true; /* -- tested error handling when scrolling cursor -- seems useless. $conn = $this->connection; if ($conn && $conn->raiseErrorFn && ($errno = $conn->ErrorNo())) { $fn = $conn->raiseErrorFn; $fn($conn->databaseType,'MOVENEXT',$errno,$conn->ErrorMsg().' ('.$this->sql.')',$conn->host,$conn->database); } */ return false; } /** * Random access to a specific row in the recordset. Some databases do not support * access to previous rows in the databases (no scrolling backwards). * * @param rowNumber is the row to move to (0-based) * * @return true if there still rows available, or false if there are no more rows (EOF). */ function Move($rowNumber = 0) { $this->EOF = false; if ($rowNumber == $this->_currentRow) return true; if ($rowNumber >= $this->_numOfRows) if ($this->_numOfRows != -1) $rowNumber = $this->_numOfRows-2; if ($this->canSeek) { if ($this->_seek($rowNumber)) { $this->_currentRow = $rowNumber; if ($this->_fetch()) { return true; } } else { $this->EOF = true; return false; } } else { if ($rowNumber < $this->_currentRow) return false; global $ADODB_EXTENSION; if ($ADODB_EXTENSION) { while (!$this->EOF && $this->_currentRow < $rowNumber) { adodb_movenext($this); } } else { while (! $this->EOF && $this->_currentRow < $rowNumber) { $this->_currentRow++; if (!$this->_fetch()) $this->EOF = true; } } return !($this->EOF); } $this->fields = false; $this->EOF = true; return false; } /** * Get the value of a field in the current row by column name. * Will not work if ADODB_FETCH_MODE is set to ADODB_FETCH_NUM. * * @param colname is the field to access * * @return the value of $colname column */ function Fields($colname) { return $this->fields[$colname]; } function GetAssocKeys($upper=true) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o =& $this->FetchField($i); if ($upper === 2) $this->bind[$o->name] = $i; else $this->bind[($upper) ? strtoupper($o->name) : strtolower($o->name)] = $i; } } /** * Use associative array to get fields array for databases that do not support * associative arrays. Submitted by Paolo S. Asioli paolo.asioli#libero.it * * If you don't want uppercase cols, set $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC * before you execute your SQL statement, and access $rs->fields['col'] directly. * * $upper 0 = lowercase, 1 = uppercase, 2 = whatever is returned by FetchField */ function &GetRowAssoc($upper=1) { $record = array(); // if (!$this->fields) return $record; if (!$this->bind) { $this->GetAssocKeys($upper); } foreach($this->bind as $k => $v) { $record[$k] = $this->fields[$v]; } return $record; } /** * Clean up recordset * * @return true or false */ function Close() { // free connection object - this seems to globally free the object // and not merely the reference, so don't do this... // $this->connection = false; if (!$this->_closed) { $this->_closed = true; return $this->_close(); } else return true; } /** * synonyms RecordCount and RowCount * * @return the number of rows or -1 if this is not supported */ function RecordCount() {return $this->_numOfRows;} /* * If we are using PageExecute(), this will return the maximum possible rows * that can be returned when paging a recordset. */ function MaxRecordCount() { return ($this->_maxRecordCount) ? $this->_maxRecordCount : $this->RecordCount(); } /** * synonyms RecordCount and RowCount * * @return the number of rows or -1 if this is not supported */ function RowCount() {return $this->_numOfRows;} /** * Portable RecordCount. Pablo Roca * * @return the number of records from a previous SELECT. All databases support this. * * But aware possible problems in multiuser environments. For better speed the table * must be indexed by the condition. Heavy test this before deploying. */ function PO_RecordCount($table="", $condition="") { $lnumrows = $this->_numOfRows; // the database doesn't support native recordcount, so we do a workaround if ($lnumrows == -1 && $this->connection) { IF ($table) { if ($condition) $condition = " WHERE " . $condition; $resultrows = &$this->connection->Execute("SELECT COUNT(*) FROM $table $condition"); if ($resultrows) $lnumrows = reset($resultrows->fields); } } return $lnumrows; } /** * @return the current row in the recordset. If at EOF, will return the last row. 0-based. */ function CurrentRow() {return $this->_currentRow;} /** * synonym for CurrentRow -- for ADO compat * * @return the current row in the recordset. If at EOF, will return the last row. 0-based. */ function AbsolutePosition() {return $this->_currentRow;} /** * @return the number of columns in the recordset. Some databases will set this to 0 * if no records are returned, others will return the number of columns in the query. */ function FieldCount() {return $this->_numOfFields;} /** * Get the ADOFieldObject of a specific column. * * @param fieldoffset is the column position to access(0-based). * * @return the ADOFieldObject for that column, or false. */ function &FetchField($fieldoffset) { // must be defined by child class } /** * Get the ADOFieldObjects of all columns in an array. * */ function& FieldTypesArray() { $arr = array(); for ($i=0, $max=$this->_numOfFields; $i < $max; $i++) $arr[] = $this->FetchField($i); return $arr; } /** * Return the fields array of the current row as an object for convenience. * The default case is lowercase field names. * * @return the object with the properties set to the fields of the current row */ function &FetchObj() { $o =& $this->FetchObject(false); return $o; } /** * Return the fields array of the current row as an object for convenience. * The default case is uppercase. * * @param $isupper to set the object property names to uppercase * * @return the object with the properties set to the fields of the current row */ function &FetchObject($isupper=true) { if (empty($this->_obj)) { $this->_obj =& new ADOFetchObj(); $this->_names = array(); for ($i=0; $i <$this->_numOfFields; $i++) { $f = $this->FetchField($i); $this->_names[] = $f->name; } } $i = 0; $o = &$this->_obj; for ($i=0; $i <$this->_numOfFields; $i++) { $name = $this->_names[$i]; if ($isupper) $n = strtoupper($name); else $n = $name; $o->$n = $this->Fields($name); } return $o; } /** * Return the fields array of the current row as an object for convenience. * The default is lower-case field names. * * @return the object with the properties set to the fields of the current row, * or false if EOF * * Fixed bug reported by tim@orotech.net */ function &FetchNextObj() { $o = $this->FetchNextObject(false); return $o; } /** * Return the fields array of the current row as an object for convenience. * The default is upper case field names. * * @param $isupper to set the object property names to uppercase * * @return the object with the properties set to the fields of the current row, * or false if EOF * * Fixed bug reported by tim@orotech.net */ function &FetchNextObject($isupper=true) { $o = false; if ($this->_numOfRows != 0 && !$this->EOF) { $o = $this->FetchObject($isupper); $this->_currentRow++; if ($this->_fetch()) return $o; } $this->EOF = true; return $o; } /** * Get the metatype of the column. This is used for formatting. This is because * many databases use different names for the same type, so we transform the original * type to our standardised version which uses 1 character codes: * * @param t is the type passed in. Normally is ADOFieldObject->type. * @param len is the maximum length of that field. This is because we treat character * fields bigger than a certain size as a 'B' (blob). * @param fieldobj is the field object returned by the database driver. Can hold * additional info (eg. primary_key for mysql). * * @return the general type of the data: * C for character < 250 chars * X for teXt (>= 250 chars) * B for Binary * N for numeric or floating point * D for date * T for timestamp * L for logical/Boolean * I for integer * R for autoincrement counter/integer * * */ function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } // changed in 2.32 to hashing instead of switch stmt for speed... static $typeMap = array( 'VARCHAR' => 'C', 'VARCHAR2' => 'C', 'CHAR' => 'C', 'C' => 'C', 'STRING' => 'C', 'NCHAR' => 'C', 'NVARCHAR' => 'C', 'VARYING' => 'C', 'BPCHAR' => 'C', 'CHARACTER' => 'C', 'INTERVAL' => 'C', # Postgres ## 'LONGCHAR' => 'X', 'TEXT' => 'X', 'NTEXT' => 'X', 'M' => 'X', 'X' => 'X', 'CLOB' => 'X', 'NCLOB' => 'X', 'LVARCHAR' => 'X', ## 'BLOB' => 'B', 'IMAGE' => 'B', 'BINARY' => 'B', 'VARBINARY' => 'B', 'LONGBINARY' => 'B', 'B' => 'B', ## 'YEAR' => 'D', // mysql 'DATE' => 'D', 'D' => 'D', ## 'TIME' => 'T', 'TIMESTAMP' => 'T', 'DATETIME' => 'T', 'TIMESTAMPTZ' => 'T', 'T' => 'T', ## 'BOOL' => 'L', 'BOOLEAN' => 'L', 'BIT' => 'L', 'L' => 'L', ## 'COUNTER' => 'R', 'R' => 'R', 'SERIAL' => 'R', // ifx 'INT IDENTITY' => 'R', ## 'INT' => 'I', 'INTEGER' => 'I', 'INTEGER UNSIGNED' => 'I', 'SHORT' => 'I', 'TINYINT' => 'I', 'SMALLINT' => 'I', 'I' => 'I', ## 'LONG' => 'N', // interbase is numeric, oci8 is blob 'BIGINT' => 'N', // this is bigger than PHP 32-bit integers 'DECIMAL' => 'N', 'DEC' => 'N', 'REAL' => 'N', 'DOUBLE' => 'N', 'DOUBLE PRECISION' => 'N', 'SMALLFLOAT' => 'N', 'FLOAT' => 'N', 'NUMBER' => 'N', 'NUM' => 'N', 'NUMERIC' => 'N', 'MONEY' => 'N', ## informix 9.2 'SQLINT' => 'I', 'SQLSERIAL' => 'I', 'SQLSMINT' => 'I', 'SQLSMFLOAT' => 'N', 'SQLFLOAT' => 'N', 'SQLMONEY' => 'N', 'SQLDECIMAL' => 'N', 'SQLDATE' => 'D', 'SQLVCHAR' => 'C', 'SQLCHAR' => 'C', 'SQLDTIME' => 'T', 'SQLINTERVAL' => 'N', 'SQLBYTES' => 'B', 'SQLTEXT' => 'X' ); $tmap = false; $t = strtoupper($t); $tmap = @$typeMap[$t]; switch ($tmap) { case 'C': // is the char field is too long, return as text field... if ($this->blobSize >= 0) { if ($len > $this->blobSize) return 'X'; } else if ($len > 250) { return 'X'; } return 'C'; case 'I': if (!empty($fieldobj->primary_key)) return 'R'; return 'I'; case false: return 'N'; case 'B': if (isset($fieldobj->binary)) return ($fieldobj->binary) ? 'B' : 'X'; return 'B'; case 'D': if (!empty($this->datetime)) return 'T'; return 'D'; default: if ($t == 'LONG' && $this->dataProvider == 'oci8') return 'B'; return $tmap; } } function _close() {} /** * set/returns the current recordset page when paginating */ function AbsolutePage($page=-1) { if ($page != -1) $this->_currentPage = $page; return $this->_currentPage; } /** * set/returns the status of the atFirstPage flag when paginating */ function AtFirstPage($status=false) { if ($status != false) $this->_atFirstPage = $status; return $this->_atFirstPage; } function LastPageNo($page = false) { if ($page != false) $this->_lastPageNo = $page; return $this->_lastPageNo; } /** * set/returns the status of the atLastPage flag when paginating */ function AtLastPage($status=false) { if ($status != false) $this->_atLastPage = $status; return $this->_atLastPage; } } // end class ADORecordSet //============================================================================================== // CLASS ADORecordSet_array //============================================================================================== /** * This class encapsulates the concept of a recordset created in memory * as an array. This is useful for the creation of cached recordsets. * * Note that the constructor is different from the standard ADORecordSet */ class ADORecordSet_array extends ADORecordSet { var $databaseType = 'array'; var $_array; // holds the 2-dimensional data array var $_types; // the array of types of each column (C B I L M) var $_colnames; // names of each column in array var $_skiprow1; // skip 1st row because it holds column names var $_fieldarr; // holds array of field objects var $canSeek = true; var $affectedrows = false; var $insertid = false; var $sql = ''; var $compat = false; /** * Constructor * */ function ADORecordSet_array($fakeid=1) { global $ADODB_FETCH_MODE,$ADODB_COMPAT_FETCH; // fetch() on EOF does not delete $this->fields $this->compat = !empty($ADODB_COMPAT_FETCH); $this->ADORecordSet($fakeid); // fake queryID $this->fetchMode = $ADODB_FETCH_MODE; } /** * Setup the array. * * @param array is a 2-dimensional array holding the data. * The first row should hold the column names * unless paramter $colnames is used. * @param typearr holds an array of types. These are the same types * used in MetaTypes (C,B,L,I,N). * @param [colnames] array of column names. If set, then the first row of * $array should not hold the column names. */ function InitArray($array,$typearr,$colnames=false) { $this->_array = $array; $this->_types = $typearr; if ($colnames) { $this->_skiprow1 = false; $this->_colnames = $colnames; } else { $this->_skiprow1 = true; $this->_colnames = $array[0]; } $this->Init(); } /** * Setup the Array and datatype file objects * * @param array is a 2-dimensional array holding the data. * The first row should hold the column names * unless paramter $colnames is used. * @param fieldarr holds an array of ADOFieldObject's. */ function InitArrayFields(&$array,&$fieldarr) { $this->_array =& $array; $this->_skiprow1= false; if ($fieldarr) { $this->_fieldobjects =& $fieldarr; } $this->Init(); } function &GetArray($nRows=-1) { if ($nRows == -1 && $this->_currentRow <= 0 && !$this->_skiprow1) { return $this->_array; } else { $arr =& ADORecordSet::GetArray($nRows); return $arr; } } function _initrs() { $this->_numOfRows = sizeof($this->_array); if ($this->_skiprow1) $this->_numOfRows -= 1; $this->_numOfFields =(isset($this->_fieldobjects)) ? sizeof($this->_fieldobjects):sizeof($this->_types); } /* Use associative array to get fields array */ function Fields($colname) { $mode = isset($this->adodbFetchMode) ? $this->adodbFetchMode : $this->fetchMode; if ($mode & ADODB_FETCH_ASSOC) { if (!isset($this->fields[$colname])) $colname = strtolower($colname); return $this->fields[$colname]; } if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function &FetchField($fieldOffset = -1) { if (isset($this->_fieldobjects)) { return $this->_fieldobjects[$fieldOffset]; } $o = new ADOFieldObject(); $o->name = $this->_colnames[$fieldOffset]; $o->type = $this->_types[$fieldOffset]; $o->max_length = -1; // length not known return $o; } function _seek($row) { if (sizeof($this->_array) && 0 <= $row && $row < $this->_numOfRows) { $this->_currentRow = $row; if ($this->_skiprow1) $row += 1; $this->fields = $this->_array[$row]; return true; } return false; } function MoveNext() { if (!$this->EOF) { $this->_currentRow++; $pos = $this->_currentRow; if ($this->_numOfRows <= $pos) { if (!$this->compat) $this->fields = false; } else { if ($this->_skiprow1) $pos += 1; $this->fields = $this->_array[$pos]; return true; } $this->EOF = true; } return false; } function _fetch() { $pos = $this->_currentRow; if ($this->_numOfRows <= $pos) { if (!$this->compat) $this->fields = false; return false; } if ($this->_skiprow1) $pos += 1; $this->fields = $this->_array[$pos]; return true; } function _close() { return true; } } // ADORecordSet_array //============================================================================================== // HELPER FUNCTIONS //============================================================================================== /** * Synonym for ADOLoadCode. Private function. Do not use. * * @deprecated */ function ADOLoadDB($dbType) { return ADOLoadCode($dbType); } /** * Load the code for a specific database driver. Private function. Do not use. */ function ADOLoadCode($dbType) { global $ADODB_LASTDB; if (!$dbType) return false; $db = strtolower($dbType); switch ($db) { case 'ifx': case 'maxsql': $db = 'mysqlt'; break; case 'postgres': case 'pgsql': $db = 'postgres7'; break; } @include_once(ADODB_DIR."/drivers/adodb-".$db.".inc.php"); $ADODB_LASTDB = $db; $ok = class_exists("ADODB_" . $db); if ($ok) return $db; print_r(get_declared_classes()); $file = ADODB_DIR."/drivers/adodb-".$db.".inc.php"; if (!file_exists($file)) ADOConnection::outp("Missing file: $file"); else ADOConnection::outp("Syntax error in file: $file"); return false; } /** * synonym for ADONewConnection for people like me who cannot remember the correct name */ function &NewADOConnection($db='') { $tmp =& ADONewConnection($db); return $tmp; } /** * Instantiate a new Connection class for a specific database driver. * * @param [db] is the database Connection object to create. If undefined, * use the last database driver that was loaded by ADOLoadCode(). * * @return the freshly created instance of the Connection class. */ function &ADONewConnection($db='') { GLOBAL $ADODB_NEWCONNECTION, $ADODB_LASTDB; if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2); $errorfn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false; $false = false; if (strpos($db,'://')) { $origdsn = $db; $dsna = @parse_url($db); if (!$dsna) { // special handling of oracle, which might not have host $db = str_replace('@/','@adodb-fakehost/',$db); $dsna = parse_url($db); if (!$dsna) return $false; $dsna['host'] = ''; } $db = @$dsna['scheme']; if (!$db) return $false; $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : ''; $dsna['user'] = isset($dsna['user']) ? rawurldecode($dsna['user']) : ''; $dsna['pass'] = isset($dsna['pass']) ? rawurldecode($dsna['pass']) : ''; $dsna['path'] = isset($dsna['path']) ? rawurldecode(substr($dsna['path'],1)) : ''; if (isset($dsna['query'])) { $opt1 = explode('&',$dsna['query']); foreach($opt1 as $k => $v) { $arr = explode('=',$v); $opt[$arr[0]] = isset($arr[1]) ? rawurldecode($arr[1]) : 1; } } else $opt = array(); } /* * phptype: Database backend used in PHP (mysql, odbc etc.) * dbsyntax: Database used with regards to SQL syntax etc. * protocol: Communication protocol to use (tcp, unix etc.) * hostspec: Host specification (hostname[:port]) * database: Database to use on the DBMS server * username: User name for login * password: Password for login */ if (!empty($ADODB_NEWCONNECTION)) { $obj = $ADODB_NEWCONNECTION($db); } else { if (!isset($ADODB_LASTDB)) $ADODB_LASTDB = ''; if (empty($db)) $db = $ADODB_LASTDB; if ($db != $ADODB_LASTDB) $db = ADOLoadCode($db); if (!$db) { if (isset($origdsn)) $db = $origdsn; if ($errorfn) { // raise an error $ignore = false; $errorfn('ADONewConnection', 'ADONewConnection', -998, "could not load the database driver for '$db'", $db,false,$ignore); } else ADOConnection::outp( "

ADONewConnection: Unable to load database driver '$db'

",false); return $false; } $cls = 'ADODB_'.$db; if (!class_exists($cls)) { adodb_backtrace(); return $false; } $obj =& new $cls(); } # constructor should not fail if ($obj) { if ($errorfn) $obj->raiseErrorFn = $errorfn; if (isset($dsna)) { foreach($opt as $k => $v) { switch(strtolower($k)) { case 'persist': case 'persistent': $persist = $v; break; case 'debug': $obj->debug = (integer) $v; break; #ibase case 'dialect': $obj->dialect = (integer) $v; break; case 'charset': $obj->charset = $v; break; case 'buffers': $obj->buffers = $v; break; case 'fetchmode': $obj->SetFetchMode($v); break; #ado case 'charpage': $obj->charPage = $v; break; #mysql, mysqli case 'clientflags': $obj->clientFlags = $v; break; #mysqli case 'port': $obj->port = $v; break; case 'socket': $obj->socket = $v; break; #oci8 case 'nls_date_format': $obj->NLS_DATE_FORMAT = $v; break; } } if (empty($persist)) $ok = $obj->Connect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); else $ok = $obj->PConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); if (!$ok) return $false; } } return $obj; } // $perf == true means called by NewPerfMonitor() function _adodb_getdriver($provider,$drivername,$perf=false) { switch ($provider) { case 'odbtp': if (strncmp('odbtp_',$drivername,6)==0) return substr($drivername,6); case 'odbc' : if (strncmp('odbc_',$drivername,5)==0) return substr($drivername,5); case 'ado' : if (strncmp('ado_',$drivername,4)==0) return substr($drivername,4); case 'native': break; default: return $provider; } switch($drivername) { case 'oracle': $drivername = 'oci8'; break; case 'access': if ($perf) $drivername = ''; break; case 'db2' : break; case 'sapdb' : break; default: $drivername = 'generic'; break; } return $drivername; } function &NewPerfMonitor(&$conn) { $false = false; $drivername = _adodb_getdriver($conn->dataProvider,$conn->databaseType,true); if (!$drivername || $drivername == 'generic') return $false; include_once(ADODB_DIR.'/adodb-perf.inc.php'); @include_once(ADODB_DIR."/perf/perf-$drivername.inc.php"); $class = "Perf_$drivername"; if (!class_exists($class)) return $false; $perf =& new $class($conn); return $perf; } function &NewDataDictionary(&$conn,$drivername=false) { $false = false; if (!$drivername) $drivername = _adodb_getdriver($conn->dataProvider,$conn->databaseType); include_once(ADODB_DIR.'/adodb-lib.inc.php'); include_once(ADODB_DIR.'/adodb-datadict.inc.php'); $path = ADODB_DIR."/datadict/datadict-$drivername.inc.php"; if (!file_exists($path)) { ADOConnection::outp("Database driver '$path' not available"); return $false; } include_once($path); $class = "ADODB2_$drivername"; $dict =& new $class(); $dict->dataProvider = $conn->dataProvider; $dict->connection = &$conn; $dict->upperName = strtoupper($drivername); $dict->quote = $conn->nameQuote; if (!empty($conn->_connectionID)) $dict->serverInfo = $conn->ServerInfo(); return $dict; } /* Perform a print_r, with pre tags for better formatting. */ function adodb_pr($var,$as_string=false) { if ($as_string) ob_start(); if (isset($_SERVER['HTTP_USER_AGENT'])) { echo "
\n";print_r($var);echo "
\n"; } else print_r($var); if ($as_string) { $s = ob_get_contents(); ob_end_clean(); return $s; } } /* Perform a stack-crawl and pretty print it. @param printOrArr Pass in a boolean to indicate print, or an $exception->trace array (assumes that print is true then). @param levels Number of levels to display */ function adodb_backtrace($printOrArr=true,$levels=9999) { global $ADODB_INCLUDED_LIB; if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php'); return _adodb_backtrace($printOrArr,$levels); } } // defined ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/ 777 0 0 0 10152641260 15634 5aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-access.inc.php 777 0 0 4300 10142745762 21520 0ADODB_odbc(); } function Time() { return time(); } function BeginTrans() { return false;} function IfNull( $field, $ifNull ) { return " IIF(IsNull($field), $ifNull, $field) "; // if Access } /* function &MetaTables() { global $ADODB_FETCH_MODE; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $qid = odbc_tables($this->_connectionID); $rs = new ADORecordSet_odbc($qid); $ADODB_FETCH_MODE = $savem; if (!$rs) return false; $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; $arr = &$rs->GetArray(); //print_pre($arr); $arr2 = array(); for ($i=0; $i < sizeof($arr); $i++) { if ($arr[$i][2] && $arr[$i][3] != 'SYSTEM TABLE') $arr2[] = $arr[$i][2]; } return $arr2; }*/ } class ADORecordSet_access extends ADORecordSet_odbc { var $databaseType = "access"; function ADORecordSet_access($id,$mode=false) { return $this->ADORecordSet_odbc($id,$mode); } }// class } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-ado.inc.php 777 0 0 37135 10142745762 21056 0_affectedRows = new VARIANT; } function ServerInfo() { if (!empty($this->_connectionID)) $desc = $this->_connectionID->provider; return array('description' => $desc, 'version' => ''); } function _affectedrows() { if (PHP_VERSION >= 5) return $this->_affectedRows; return $this->_affectedRows->value; } // you can also pass a connection string like this: // // $DB->Connect('USER ID=sa;PASSWORD=pwd;SERVER=mangrove;DATABASE=ai',false,false,'SQLOLEDB'); function _connect($argHostname, $argUsername, $argPassword, $argProvider= 'MSDASQL') { $u = 'UID'; $p = 'PWD'; if (!empty($this->charPage)) $dbc = new COM('ADODB.Connection',null,$this->charPage); else $dbc = new COM('ADODB.Connection'); if (! $dbc) return false; /* special support if provider is mssql or access */ if ($argProvider=='mssql') { $u = 'User Id'; //User parameter name for OLEDB $p = 'Password'; $argProvider = "SQLOLEDB"; // SQL Server Provider // not yet //if ($argDatabasename) $argHostname .= ";Initial Catalog=$argDatabasename"; //use trusted conection for SQL if username not specified if (!$argUsername) $argHostname .= ";Trusted_Connection=Yes"; } else if ($argProvider=='access') $argProvider = "Microsoft.Jet.OLEDB.4.0"; // Microsoft Jet Provider if ($argProvider) $dbc->Provider = $argProvider; if ($argUsername) $argHostname .= ";$u=$argUsername"; if ($argPassword)$argHostname .= ";$p=$argPassword"; if ($this->debug) ADOConnection::outp( "Host=".$argHostname."
\n version=$dbc->version"); // @ added below for php 4.0.1 and earlier @$dbc->Open((string) $argHostname); $this->_connectionID = $dbc; $dbc->CursorLocation = $this->_cursor_location; return $dbc->State > 0; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argProvider='MSDASQL') { return $this->_connect($argHostname,$argUsername,$argPassword,$argProvider); } /* adSchemaCatalogs = 1, adSchemaCharacterSets = 2, adSchemaCollations = 3, adSchemaColumns = 4, adSchemaCheckConstraints = 5, adSchemaConstraintColumnUsage = 6, adSchemaConstraintTableUsage = 7, adSchemaKeyColumnUsage = 8, adSchemaReferentialContraints = 9, adSchemaTableConstraints = 10, adSchemaColumnsDomainUsage = 11, adSchemaIndexes = 12, adSchemaColumnPrivileges = 13, adSchemaTablePrivileges = 14, adSchemaUsagePrivileges = 15, adSchemaProcedures = 16, adSchemaSchemata = 17, adSchemaSQLLanguages = 18, adSchemaStatistics = 19, adSchemaTables = 20, adSchemaTranslations = 21, adSchemaProviderTypes = 22, adSchemaViews = 23, adSchemaViewColumnUsage = 24, adSchemaViewTableUsage = 25, adSchemaProcedureParameters = 26, adSchemaForeignKeys = 27, adSchemaPrimaryKeys = 28, adSchemaProcedureColumns = 29, adSchemaDBInfoKeywords = 30, adSchemaDBInfoLiterals = 31, adSchemaCubes = 32, adSchemaDimensions = 33, adSchemaHierarchies = 34, adSchemaLevels = 35, adSchemaMeasures = 36, adSchemaProperties = 37, adSchemaMembers = 38 */ function &MetaTables() { $arr= array(); $dbc = $this->_connectionID; $adors=@$dbc->OpenSchema(20);//tables if ($adors){ $f = $adors->Fields(2);//table/view name $t = $adors->Fields(3);//table type while (!$adors->EOF){ $tt=substr($t->value,0,6); if ($tt!='SYSTEM' && $tt !='ACCESS') $arr[]=$f->value; //print $f->value . ' ' . $t->value.'
'; $adors->MoveNext(); } $adors->Close(); } return $arr; } function &MetaColumns($table) { $table = strtoupper($table); $arr = array(); $dbc = $this->_connectionID; $adors=@$dbc->OpenSchema(4);//tables if ($adors){ $t = $adors->Fields(2);//table/view name while (!$adors->EOF){ if (strtoupper($t->Value) == $table) { $fld = new ADOFieldObject(); $c = $adors->Fields(3); $fld->name = $c->Value; $fld->type = 'CHAR'; // cannot discover type in ADO! $fld->max_length = -1; $arr[strtoupper($fld->name)]=$fld; } $adors->MoveNext(); } $adors->Close(); } $false = false; return empty($arr) ? $false : $arr; } /* returns queryID or false */ function &_query($sql,$inputarr=false) { $dbc = $this->_connectionID; $false = false; // return rs if ($inputarr) { if (!empty($this->charPage)) $oCmd = new COM('ADODB.Command',null,$this->charPage); else $oCmd = new COM('ADODB.Command'); $oCmd->ActiveConnection = $dbc; $oCmd->CommandText = $sql; $oCmd->CommandType = 1; foreach($inputarr as $val) { // name, type, direction 1 = input, len, $this->adoParameterType = 130; $p = $oCmd->CreateParameter('name',$this->adoParameterType,1,strlen($val),$val); //print $p->Type.' '.$p->value; $oCmd->Parameters->Append($p); } $p = false; $rs = $oCmd->Execute(); $e = $dbc->Errors; if ($dbc->Errors->Count > 0) return $false; return $rs; } $rs = @$dbc->Execute($sql,$this->_affectedRows, $this->_execute_option); if ($dbc->Errors->Count > 0) return $false; if (! $rs) return $false; if ($rs->State == 0) { $true = true; return $true; // 0 = adStateClosed means no records returned } return $rs; } function BeginTrans() { if ($this->transOff) return true; if (isset($this->_thisTransactions)) if (!$this->_thisTransactions) return false; else { $o = $this->_connectionID->Properties("Transaction DDL"); $this->_thisTransactions = $o ? true : false; if (!$o) return false; } @$this->_connectionID->BeginTrans(); $this->transCnt += 1; return true; } function CommitTrans($ok=true) { if (!$ok) return $this->RollbackTrans(); if ($this->transOff) return true; @$this->_connectionID->CommitTrans(); if ($this->transCnt) @$this->transCnt -= 1; return true; } function RollbackTrans() { if ($this->transOff) return true; @$this->_connectionID->RollbackTrans(); if ($this->transCnt) @$this->transCnt -= 1; return true; } /* Returns: the last error message from previous database operation */ function ErrorMsg() { $errc = $this->_connectionID->Errors; if ($errc->Count == 0) return ''; $err = $errc->Item($errc->Count-1); return $err->Description; } function ErrorNo() { $errc = $this->_connectionID->Errors; if ($errc->Count == 0) return 0; $err = $errc->Item($errc->Count-1); return $err->NativeError; } // returns true or false function _close() { if ($this->_connectionID) $this->_connectionID->Close(); $this->_connectionID = false; return true; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_ado extends ADORecordSet { var $bind = false; var $databaseType = "ado"; var $dataProvider = "ado"; var $_tarr = false; // caches the types var $_flds; // and field objects var $canSeek = true; var $hideErrors = true; function ADORecordSet_ado($id,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; return $this->ADORecordSet($id,$mode); } // returns the field object function FetchField($fieldOffset = -1) { $off=$fieldOffset+1; // offsets begin at 1 $o= new ADOFieldObject(); $rs = $this->_queryID; $f = $rs->Fields($fieldOffset); $o->name = $f->Name; $t = $f->Type; $o->type = $this->MetaType($t); $o->max_length = $f->DefinedSize; $o->ado_type = $t; //print "off=$off name=$o->name type=$o->type len=$o->max_length
"; return $o; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _initrs() { $rs = $this->_queryID; $this->_numOfRows = $rs->RecordCount; $f = $rs->Fields; $this->_numOfFields = $f->Count; } // should only be used to move forward as we normally use forward-only cursors function _seek($row) { $rs = $this->_queryID; // absoluteposition doesn't work -- my maths is wrong ? // $rs->AbsolutePosition->$row-2; // return true; if ($this->_currentRow > $row) return false; @$rs->Move((integer)$row - $this->_currentRow-1); //adBookmarkFirst return true; } /* OLEDB types enum DBTYPEENUM { DBTYPE_EMPTY = 0, DBTYPE_NULL = 1, DBTYPE_I2 = 2, DBTYPE_I4 = 3, DBTYPE_R4 = 4, DBTYPE_R8 = 5, DBTYPE_CY = 6, DBTYPE_DATE = 7, DBTYPE_BSTR = 8, DBTYPE_IDISPATCH = 9, DBTYPE_ERROR = 10, DBTYPE_BOOL = 11, DBTYPE_VARIANT = 12, DBTYPE_IUNKNOWN = 13, DBTYPE_DECIMAL = 14, DBTYPE_UI1 = 17, DBTYPE_ARRAY = 0x2000, DBTYPE_BYREF = 0x4000, DBTYPE_I1 = 16, DBTYPE_UI2 = 18, DBTYPE_UI4 = 19, DBTYPE_I8 = 20, DBTYPE_UI8 = 21, DBTYPE_GUID = 72, DBTYPE_VECTOR = 0x1000, DBTYPE_RESERVED = 0x8000, DBTYPE_BYTES = 128, DBTYPE_STR = 129, DBTYPE_WSTR = 130, DBTYPE_NUMERIC = 131, DBTYPE_UDT = 132, DBTYPE_DBDATE = 133, DBTYPE_DBTIME = 134, DBTYPE_DBTIMESTAMP = 135 ADO Types adEmpty = 0, adTinyInt = 16, adSmallInt = 2, adInteger = 3, adBigInt = 20, adUnsignedTinyInt = 17, adUnsignedSmallInt = 18, adUnsignedInt = 19, adUnsignedBigInt = 21, adSingle = 4, adDouble = 5, adCurrency = 6, adDecimal = 14, adNumeric = 131, adBoolean = 11, adError = 10, adUserDefined = 132, adVariant = 12, adIDispatch = 9, adIUnknown = 13, adGUID = 72, adDate = 7, adDBDate = 133, adDBTime = 134, adDBTimeStamp = 135, adBSTR = 8, adChar = 129, adVarChar = 200, adLongVarChar = 201, adWChar = 130, adVarWChar = 202, adLongVarWChar = 203, adBinary = 128, adVarBinary = 204, adLongVarBinary = 205, adChapter = 136, adFileTime = 64, adDBFileTime = 137, adPropVariant = 138, adVarNumeric = 139 */ function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } if (!is_numeric($t)) return $t; switch ($t) { case 0: case 12: // variant case 8: // bstr case 129: //char case 130: //wc case 200: // varc case 202:// varWC case 128: // bin case 204: // varBin case 72: // guid if ($len <= $this->blobSize) return 'C'; case 201: case 203: return 'X'; case 128: case 204: case 205: return 'B'; case 7: case 133: return 'D'; case 134: case 135: return 'T'; case 11: return 'L'; case 16:// adTinyInt = 16, case 2://adSmallInt = 2, case 3://adInteger = 3, case 4://adBigInt = 20, case 17://adUnsignedTinyInt = 17, case 18://adUnsignedSmallInt = 18, case 19://adUnsignedInt = 19, case 20://adUnsignedBigInt = 21, return 'I'; default: return 'N'; } } // time stamp not supported yet function _fetch() { $rs = $this->_queryID; if (!$rs or $rs->EOF) { $this->fields = false; return false; } $this->fields = array(); if (!$this->_tarr) { $tarr = array(); $flds = array(); for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { $f = $rs->Fields($i); $flds[] = $f; $tarr[] = $f->Type; } // bind types and flds only once $this->_tarr = $tarr; $this->_flds = $flds; } $t = reset($this->_tarr); $f = reset($this->_flds); if ($this->hideErrors) $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { //echo "

",$t,' ';var_dump($f->value); echo '

'; switch($t) { case 135: // timestamp if (!strlen((string)$f->value)) $this->fields[] = false; else { if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); else $val = $f->value; $this->fields[] = adodb_date('Y-m-d H:i:s',$val); } break; case 133:// A date value (yyyymmdd) if ($val = $f->value) { $this->fields[] = substr($val,0,4).'-'.substr($val,4,2).'-'.substr($val,6,2); } else $this->fields[] = false; break; case 7: // adDate if (!strlen((string)$f->value)) $this->fields[] = false; else { if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); else $val = $f->value; if (($val % 86400) == 0) $this->fields[] = adodb_date('Y-m-d',$val); else $this->fields[] = adodb_date('Y-m-d H:i:s',$val); } break; case 1: // null $this->fields[] = false; break; case 6: // currency is not supported properly; ADOConnection::outp( ''.$f->Name.': currency type not supported by PHP'); $this->fields[] = (float) $f->value; break; default: $this->fields[] = $f->value; break; } //print " $f->value $t, "; $f = next($this->_flds); $t = next($this->_tarr); } // for if ($this->hideErrors) error_reporting($olde); @$rs->MoveNext(); // @ needed for some versions of PHP! if ($this->fetchMode & ADODB_FETCH_ASSOC) { $this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE); } return true; } function NextRecordSet() { $rs = $this->_queryID; $this->_queryID = $rs->NextRecordSet(); //$this->_queryID = $this->_QueryId->NextRecordSet(); if ($this->_queryID == null) return false; $this->_currentRow = -1; $this->_currentPage = -1; $this->bind = false; $this->fields = false; $this->_flds = false; $this->_tarr = false; $this->_inited = false; $this->Init(); return true; } function _close() { $this->_flds = false; @$this->_queryID->Close();// by Pete Dishman (peterd@telephonetics.co.uk) $this->_queryID = false; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-ado_access.inc.php 777 0 0 2706 10142745762 22353 0= 5) include(ADODB_DIR."/drivers/adodb-ado5.inc.php"); else include(ADODB_DIR."/drivers/adodb-ado.inc.php"); } class ADODB_ado_access extends ADODB_ado { var $databaseType = 'ado_access'; var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE var $fmtDate = "#Y-m-d#"; var $fmtTimeStamp = "#Y-m-d h:i:sA#";// note no comma var $sysDate = "FORMAT(NOW,'yyyy-mm-dd')"; var $sysTimeStamp = 'NOW'; var $hasTransactions = false; function ADODB_ado_access() { $this->ADODB_ado(); } function BeginTrans() { return false;} function CommitTrans() { return false;} function RollbackTrans() { return false;} } class ADORecordSet_ado_access extends ADORecordSet_ado { var $databaseType = "ado_access"; function ADORecordSet_ado_access($id,$mode=false) { return $this->ADORecordSet_ado($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-ado_mssql.inc.php 777 0 0 5404 10142745762 22247 0= 5) include(ADODB_DIR."/drivers/adodb-ado5.inc.php"); else include(ADODB_DIR."/drivers/adodb-ado.inc.php"); } class ADODB_ado_mssql extends ADODB_ado { var $databaseType = 'ado_mssql'; var $hasTop = 'top'; var $hasInsertID = true; var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; var $sysTimeStamp = 'GetDate()'; var $leftOuter = '*='; var $rightOuter = '=*'; var $ansiOuter = true; // for mssql7 or later var $substr = "substring"; var $length = 'len'; //var $_inTransaction = 1; // always open recordsets, so no transaction problems. function ADODB_ado_mssql() { $this->ADODB_ado(); } function _insertid() { return $this->GetOne('select @@identity'); } function _affectedrows() { return $this->GetOne('select @@rowcount'); } function MetaColumns($table) { $table = strtoupper($table); $arr= array(); $dbc = $this->_connectionID; $osoptions = array(); $osoptions[0] = null; $osoptions[1] = null; $osoptions[2] = $table; $osoptions[3] = null; $adors=@$dbc->OpenSchema(4, $osoptions);//tables if ($adors){ while (!$adors->EOF){ $fld = new ADOFieldObject(); $c = $adors->Fields(3); $fld->name = $c->Value; $fld->type = 'CHAR'; // cannot discover type in ADO! $fld->max_length = -1; $arr[strtoupper($fld->name)]=$fld; $adors->MoveNext(); } $adors->Close(); } $false = false; return empty($arr) ? $false : $arr; } } // end class class ADORecordSet_ado_mssql extends ADORecordSet_ado { var $databaseType = 'ado_mssql'; function ADORecordSet_ado_mssql($id,$mode=false) { return $this->ADORecordSet_ado($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-ado5.inc.php 777 0 0 37323 10142745762 21142 0_affectedRows = new VARIANT; } function ServerInfo() { if (!empty($this->_connectionID)) $desc = $this->_connectionID->provider; return array('description' => $desc, 'version' => ''); } function _affectedrows() { if (PHP_VERSION >= 5) return $this->_affectedRows; return $this->_affectedRows->value; } // you can also pass a connection string like this: // // $DB->Connect('USER ID=sa;PASSWORD=pwd;SERVER=mangrove;DATABASE=ai',false,false,'SQLOLEDB'); function _connect($argHostname, $argUsername, $argPassword, $argProvider= 'MSDASQL') { try { $u = 'UID'; $p = 'PWD'; if (!empty($this->charPage)) $dbc = new COM('ADODB.Connection',null,$this->charPage); else $dbc = new COM('ADODB.Connection'); if (! $dbc) return false; /* special support if provider is mssql or access */ if ($argProvider=='mssql') { $u = 'User Id'; //User parameter name for OLEDB $p = 'Password'; $argProvider = "SQLOLEDB"; // SQL Server Provider // not yet //if ($argDatabasename) $argHostname .= ";Initial Catalog=$argDatabasename"; //use trusted conection for SQL if username not specified if (!$argUsername) $argHostname .= ";Trusted_Connection=Yes"; } else if ($argProvider=='access') $argProvider = "Microsoft.Jet.OLEDB.4.0"; // Microsoft Jet Provider if ($argProvider) $dbc->Provider = $argProvider; if ($argUsername) $argHostname .= ";$u=$argUsername"; if ($argPassword)$argHostname .= ";$p=$argPassword"; if ($this->debug) ADOConnection::outp( "Host=".$argHostname."
\n version=$dbc->version"); // @ added below for php 4.0.1 and earlier @$dbc->Open((string) $argHostname); $this->_connectionID = $dbc; $dbc->CursorLocation = $this->_cursor_location; return $dbc->State > 0; } catch (exception $e) { } return false; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argProvider='MSDASQL') { return $this->_connect($argHostname,$argUsername,$argPassword,$argProvider); } /* adSchemaCatalogs = 1, adSchemaCharacterSets = 2, adSchemaCollations = 3, adSchemaColumns = 4, adSchemaCheckConstraints = 5, adSchemaConstraintColumnUsage = 6, adSchemaConstraintTableUsage = 7, adSchemaKeyColumnUsage = 8, adSchemaReferentialContraints = 9, adSchemaTableConstraints = 10, adSchemaColumnsDomainUsage = 11, adSchemaIndexes = 12, adSchemaColumnPrivileges = 13, adSchemaTablePrivileges = 14, adSchemaUsagePrivileges = 15, adSchemaProcedures = 16, adSchemaSchemata = 17, adSchemaSQLLanguages = 18, adSchemaStatistics = 19, adSchemaTables = 20, adSchemaTranslations = 21, adSchemaProviderTypes = 22, adSchemaViews = 23, adSchemaViewColumnUsage = 24, adSchemaViewTableUsage = 25, adSchemaProcedureParameters = 26, adSchemaForeignKeys = 27, adSchemaPrimaryKeys = 28, adSchemaProcedureColumns = 29, adSchemaDBInfoKeywords = 30, adSchemaDBInfoLiterals = 31, adSchemaCubes = 32, adSchemaDimensions = 33, adSchemaHierarchies = 34, adSchemaLevels = 35, adSchemaMeasures = 36, adSchemaProperties = 37, adSchemaMembers = 38 */ function &MetaTables() { $arr= array(); $dbc = $this->_connectionID; $adors=@$dbc->OpenSchema(20);//tables if ($adors){ $f = $adors->Fields(2);//table/view name $t = $adors->Fields(3);//table type while (!$adors->EOF){ $tt=substr($t->value,0,6); if ($tt!='SYSTEM' && $tt !='ACCESS') $arr[]=$f->value; //print $f->value . ' ' . $t->value.'
'; $adors->MoveNext(); } $adors->Close(); } return $arr; } function &MetaColumns($table) { $table = strtoupper($table); $arr= array(); $dbc = $this->_connectionID; $adors=@$dbc->OpenSchema(4);//tables if ($adors){ $t = $adors->Fields(2);//table/view name while (!$adors->EOF){ if (strtoupper($t->Value) == $table) { $fld = new ADOFieldObject(); $c = $adors->Fields(3); $fld->name = $c->Value; $fld->type = 'CHAR'; // cannot discover type in ADO! $fld->max_length = -1; $arr[strtoupper($fld->name)]=$fld; } $adors->MoveNext(); } $adors->Close(); } return $arr; } /* returns queryID or false */ function &_query($sql,$inputarr=false) { try { // In PHP5, all COM errors are exceptions, so to maintain old behaviour... $dbc = $this->_connectionID; // return rs if ($inputarr) { if (!empty($this->charPage)) $oCmd = new COM('ADODB.Command',null,$this->charPage); else $oCmd = new COM('ADODB.Command'); $oCmd->ActiveConnection = $dbc; $oCmd->CommandText = $sql; $oCmd->CommandType = 1; foreach($inputarr as $val) { // name, type, direction 1 = input, len, $this->adoParameterType = 130; $p = $oCmd->CreateParameter('name',$this->adoParameterType,1,strlen($val),$val); //print $p->Type.' '.$p->value; $oCmd->Parameters->Append($p); } $p = false; $rs = $oCmd->Execute(); $e = $dbc->Errors; if ($dbc->Errors->Count > 0) return false; return $rs; } $rs = @$dbc->Execute($sql,$this->_affectedRows, $this->_execute_option); if ($dbc->Errors->Count > 0) return false; if (! $rs) return false; if ($rs->State == 0) return true; // 0 = adStateClosed means no records returned return $rs; } catch (exception $e) { } return false; } function BeginTrans() { if ($this->transOff) return true; if (isset($this->_thisTransactions)) if (!$this->_thisTransactions) return false; else { $o = $this->_connectionID->Properties("Transaction DDL"); $this->_thisTransactions = $o ? true : false; if (!$o) return false; } @$this->_connectionID->BeginTrans(); $this->transCnt += 1; return true; } function CommitTrans($ok=true) { if (!$ok) return $this->RollbackTrans(); if ($this->transOff) return true; @$this->_connectionID->CommitTrans(); if ($this->transCnt) @$this->transCnt -= 1; return true; } function RollbackTrans() { if ($this->transOff) return true; @$this->_connectionID->RollbackTrans(); if ($this->transCnt) @$this->transCnt -= 1; return true; } /* Returns: the last error message from previous database operation */ function ErrorMsg() { $errc = $this->_connectionID->Errors; if ($errc->Count == 0) return ''; $err = $errc->Item($errc->Count-1); return $err->Description; } function ErrorNo() { $errc = $this->_connectionID->Errors; if ($errc->Count == 0) return 0; $err = $errc->Item($errc->Count-1); return $err->NativeError; } // returns true or false function _close() { if ($this->_connectionID) $this->_connectionID->Close(); $this->_connectionID = false; return true; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_ado extends ADORecordSet { var $bind = false; var $databaseType = "ado"; var $dataProvider = "ado"; var $_tarr = false; // caches the types var $_flds; // and field objects var $canSeek = true; var $hideErrors = true; function ADORecordSet_ado($id,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; return $this->ADORecordSet($id,$mode); } // returns the field object function FetchField($fieldOffset = -1) { $off=$fieldOffset+1; // offsets begin at 1 $o= new ADOFieldObject(); $rs = $this->_queryID; $f = $rs->Fields($fieldOffset); $o->name = $f->Name; $t = $f->Type; $o->type = $this->MetaType($t); $o->max_length = $f->DefinedSize; $o->ado_type = $t; //print "off=$off name=$o->name type=$o->type len=$o->max_length
"; return $o; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _initrs() { $rs = $this->_queryID; $this->_numOfRows = $rs->RecordCount; $f = $rs->Fields; $this->_numOfFields = $f->Count; } // should only be used to move forward as we normally use forward-only cursors function _seek($row) { $rs = $this->_queryID; // absoluteposition doesn't work -- my maths is wrong ? // $rs->AbsolutePosition->$row-2; // return true; if ($this->_currentRow > $row) return false; @$rs->Move((integer)$row - $this->_currentRow-1); //adBookmarkFirst return true; } /* OLEDB types enum DBTYPEENUM { DBTYPE_EMPTY = 0, DBTYPE_NULL = 1, DBTYPE_I2 = 2, DBTYPE_I4 = 3, DBTYPE_R4 = 4, DBTYPE_R8 = 5, DBTYPE_CY = 6, DBTYPE_DATE = 7, DBTYPE_BSTR = 8, DBTYPE_IDISPATCH = 9, DBTYPE_ERROR = 10, DBTYPE_BOOL = 11, DBTYPE_VARIANT = 12, DBTYPE_IUNKNOWN = 13, DBTYPE_DECIMAL = 14, DBTYPE_UI1 = 17, DBTYPE_ARRAY = 0x2000, DBTYPE_BYREF = 0x4000, DBTYPE_I1 = 16, DBTYPE_UI2 = 18, DBTYPE_UI4 = 19, DBTYPE_I8 = 20, DBTYPE_UI8 = 21, DBTYPE_GUID = 72, DBTYPE_VECTOR = 0x1000, DBTYPE_RESERVED = 0x8000, DBTYPE_BYTES = 128, DBTYPE_STR = 129, DBTYPE_WSTR = 130, DBTYPE_NUMERIC = 131, DBTYPE_UDT = 132, DBTYPE_DBDATE = 133, DBTYPE_DBTIME = 134, DBTYPE_DBTIMESTAMP = 135 ADO Types adEmpty = 0, adTinyInt = 16, adSmallInt = 2, adInteger = 3, adBigInt = 20, adUnsignedTinyInt = 17, adUnsignedSmallInt = 18, adUnsignedInt = 19, adUnsignedBigInt = 21, adSingle = 4, adDouble = 5, adCurrency = 6, adDecimal = 14, adNumeric = 131, adBoolean = 11, adError = 10, adUserDefined = 132, adVariant = 12, adIDispatch = 9, adIUnknown = 13, adGUID = 72, adDate = 7, adDBDate = 133, adDBTime = 134, adDBTimeStamp = 135, adBSTR = 8, adChar = 129, adVarChar = 200, adLongVarChar = 201, adWChar = 130, adVarWChar = 202, adLongVarWChar = 203, adBinary = 128, adVarBinary = 204, adLongVarBinary = 205, adChapter = 136, adFileTime = 64, adDBFileTime = 137, adPropVariant = 138, adVarNumeric = 139 */ function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } if (!is_numeric($t)) return $t; switch ($t) { case 0: case 12: // variant case 8: // bstr case 129: //char case 130: //wc case 200: // varc case 202:// varWC case 128: // bin case 204: // varBin case 72: // guid if ($len <= $this->blobSize) return 'C'; case 201: case 203: return 'X'; case 128: case 204: case 205: return 'B'; case 7: case 133: return 'D'; case 134: case 135: return 'T'; case 11: return 'L'; case 16:// adTinyInt = 16, case 2://adSmallInt = 2, case 3://adInteger = 3, case 4://adBigInt = 20, case 17://adUnsignedTinyInt = 17, case 18://adUnsignedSmallInt = 18, case 19://adUnsignedInt = 19, case 20://adUnsignedBigInt = 21, return 'I'; default: return 'N'; } } // time stamp not supported yet function _fetch() { $rs = $this->_queryID; if (!$rs or $rs->EOF) { $this->fields = false; return false; } $this->fields = array(); if (!$this->_tarr) { $tarr = array(); $flds = array(); for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { $f = $rs->Fields($i); $flds[] = $f; $tarr[] = $f->Type; } // bind types and flds only once $this->_tarr = $tarr; $this->_flds = $flds; } $t = reset($this->_tarr); $f = reset($this->_flds); if ($this->hideErrors) $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { //echo "

",$t,' ';var_dump($f->value); echo '

'; switch($t) { case 135: // timestamp if (!strlen((string)$f->value)) $this->fields[] = false; else { if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); else $val = $f->value; $this->fields[] = adodb_date('Y-m-d H:i:s',$val); } break; case 133:// A date value (yyyymmdd) if ($val = $f->value) { $this->fields[] = substr($val,0,4).'-'.substr($val,4,2).'-'.substr($val,6,2); } else $this->fields[] = false; break; case 7: // adDate if (!strlen((string)$f->value)) $this->fields[] = false; else { if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); else $val = $f->value; if (($val % 86400) == 0) $this->fields[] = adodb_date('Y-m-d',$val); else $this->fields[] = adodb_date('Y-m-d H:i:s',$val); } break; case 1: // null $this->fields[] = false; break; case 6: // currency is not supported properly; ADOConnection::outp( ''.$f->Name.': currency type not supported by PHP'); $this->fields[] = (float) $f->value; break; default: $this->fields[] = $f->value; break; } //print " $f->value $t, "; $f = next($this->_flds); $t = next($this->_tarr); } // for if ($this->hideErrors) error_reporting($olde); @$rs->MoveNext(); // @ needed for some versions of PHP! if ($this->fetchMode & ADODB_FETCH_ASSOC) { $this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE); } return true; } function NextRecordSet() { $rs = $this->_queryID; $this->_queryID = $rs->NextRecordSet(); //$this->_queryID = $this->_QueryId->NextRecordSet(); if ($this->_queryID == null) return false; $this->_currentRow = -1; $this->_currentPage = -1; $this->bind = false; $this->fields = false; $this->_flds = false; $this->_tarr = false; $this->_inited = false; $this->Init(); return true; } function _close() { $this->_flds = false; @$this->_queryID->Close();// by Pete Dishman (peterd@telephonetics.co.uk) $this->_queryID = false; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-borland_ibase.inc.php 777 0 0 4440 10142745762 23050 0ADODB_ibase(); } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->autoCommit = false; $this->_transactionID = ibase_trans($this->ibasetrans, $this->_connectionID); return $this->_transactionID; } function ServerInfo() { $arr['dialect'] = $this->dialect; switch($arr['dialect']) { case '': case '1': $s = 'Interbase 6.5, Dialect 1'; break; case '2': $s = 'Interbase 6.5, Dialect 2'; break; default: case '3': $s = 'Interbase 6.5, Dialect 3'; break; } $arr['version'] = '6.5'; $arr['description'] = $s; return $arr; } // Note that Interbase 6.5 uses ROWS instead - don't you love forking wars! // SELECT col1, col2 FROM table ROWS 5 -- get 5 rows // SELECT col1, col2 FROM TABLE ORDER BY col1 ROWS 3 TO 7 -- first 5 skip 2 // Firebird uses // SELECT FIRST 5 SKIP 2 col1, col2 FROM TABLE function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) { if ($nrows > 0) { if ($offset <= 0) $str = " ROWS $nrows "; else { $a = $offset+1; $b = $offset+$nrows; $str = " ROWS $a TO $b"; } } else { // ok, skip $a = $offset + 1; $str = " ROWS $a TO 999999999"; // 999 million } $sql .= $str; return ($secs2cache) ? $this->CacheExecute($secs2cache,$sql,$inputarr) : $this->Execute($sql,$inputarr); } }; class ADORecordSet_borland_ibase extends ADORecordSet_ibase { var $databaseType = "borland_ibase"; function ADORecordSet_borland_ibase($id,$mode=false) { $this->ADORecordSet_ibase($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-csv.inc.php 777 0 0 11456 10142745762 21104 0_insertid; } function _affectedrows() { return $this->_affectedrows; } function &MetaDatabases() { return false; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (strtolower(substr($argHostname,0,7)) !== 'http://') return false; $this->_url = $argHostname; return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (strtolower(substr($argHostname,0,7)) !== 'http://') return false; $this->_url = $argHostname; return true; } function &MetaColumns($table) { return false; } // parameters use PostgreSQL convention, not MySQL function &SelectLimit($sql,$nrows=-1,$offset=-1) { global $ADODB_FETCH_MODE; $url = $this->_url.'?sql='.urlencode($sql)."&nrows=$nrows&fetch=". (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE). "&offset=$offset"; $err = false; $rs = csv2rs($url,$err,false); if ($this->debug) print "$url
$err
"; $at = strpos($err,'::::'); if ($at === false) { $this->_errorMsg = $err; $this->_errorNo = (integer)$err; } else { $this->_errorMsg = substr($err,$at+4,1024); $this->_errorNo = -9999; } if ($this->_errorNo) if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,''); } if (is_object($rs)) { $rs->databaseType='csv'; $rs->fetchMode = ($this->fetchMode !== false) ? $this->fetchMode : $ADODB_FETCH_MODE; $rs->connection = &$this; } return $rs; } // returns queryID or false function &_Execute($sql,$inputarr=false) { global $ADODB_FETCH_MODE; if (!$this->_bindInputArray && $inputarr) { $sqlarr = explode('?',$sql); $sql = ''; $i = 0; foreach($inputarr as $v) { $sql .= $sqlarr[$i]; if (gettype($v) == 'string') $sql .= $this->qstr($v); else if ($v === null) $sql .= 'NULL'; else $sql .= $v; $i += 1; } $sql .= $sqlarr[$i]; if ($i+1 != sizeof($sqlarr)) print "Input Array does not match ?: ".htmlspecialchars($sql); $inputarr = false; } $url = $this->_url.'?sql='.urlencode($sql)."&fetch=". (($this->fetchMode !== false)?$this->fetchMode : $ADODB_FETCH_MODE); $err = false; $rs = csv2rs($url,$err,false); if ($this->debug) print urldecode($url)."
$err
"; $at = strpos($err,'::::'); if ($at === false) { $this->_errorMsg = $err; $this->_errorNo = (integer)$err; } else { $this->_errorMsg = substr($err,$at+4,1024); $this->_errorNo = -9999; } if ($this->_errorNo) if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr); } if (is_object($rs)) { $rs->fetchMode = ($this->fetchMode !== false) ? $this->fetchMode : $ADODB_FETCH_MODE; $this->_affectedrows = $rs->affectedrows; $this->_insertid = $rs->insertid; $rs->databaseType='csv'; $rs->connection = &$this; } return $rs; } /* Returns: the last error message from previous database operation */ function ErrorMsg() { return $this->_errorMsg; } /* Returns: the last error number from previous database operation */ function ErrorNo() { return $this->_errorNo; } // returns true or false function _close() { return true; } } // class class ADORecordset_csv extends ADORecordset { function ADORecordset_csv($id,$mode=false) { $this->ADORecordset($id,$mode); } function _close() { return true; } } } // define ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-db2.inc.php 777 0 0 17724 10142745762 20764 0curMode = SQL_CUR_USE_ODBC; $db->Connect($dsn, $userid, $pwd); USING CLI INTERFACE =================== I have had reports that the $host and $database params have to be reversed in Connect() when using the CLI interface. From Halmai Csongor csongor.halmai#nexum.hu: > The symptom is that if I change the database engine from postgres or any other to DB2 then the following > connection command becomes wrong despite being described this version to be correct in the docs. > > $connection_object->Connect( $DATABASE_HOST, $DATABASE_AUTH_USER_NAME, $DATABASE_AUTH_PASSWORD, $DATABASE_NAME ) > > In case of DB2 I had to swap the first and last arguments in order to connect properly. */ // security - hide paths if (!defined('ADODB_DIR')) die(); if (!defined('_ADODB_ODBC_LAYER')) { include(ADODB_DIR."/drivers/adodb-odbc.inc.php"); } if (!defined('ADODB_DB2')){ define('ADODB_DB2',1); class ADODB_DB2 extends ADODB_odbc { var $databaseType = "db2"; var $concat_operator = '||'; var $sysDate = 'CURRENT_DATE'; var $sysTimeStamp = 'CURRENT TIMESTAMP'; // The complete string representation of a timestamp has the form // yyyy-mm-dd-hh.mm.ss.nnnnnn. var $fmtTimeStamp = "'Y-m-d-H.i.s'"; var $ansiOuter = true; var $identitySQL = 'values IDENTITY_VAL_LOCAL()'; var $_bindInputArray = true; var $hasInsertID = true; function ADODB_DB2() { if (strncmp(PHP_OS,'WIN',3) === 0) $this->curmode = SQL_CUR_USE_ODBC; $this->ADODB_odbc(); } function IfNull( $field, $ifNull ) { return " COALESCE($field, $ifNull) "; // if DB2 UDB } function ServerInfo() { //odbc_setoption($this->_connectionID,1,101 /*SQL_ATTR_ACCESS_MODE*/, 1 /*SQL_MODE_READ_ONLY*/); $vers = $this->GetOne('select versionnumber from sysibm.sysversions'); //odbc_setoption($this->_connectionID,1,101, 0 /*SQL_MODE_READ_WRITE*/); return array('description'=>'DB2 ODBC driver', 'version'=>$vers); } function _insertid() { return $this->GetOne($this->identitySQL); } function RowLock($tables,$where) { if ($this->_autocommit) $this->BeginTrans(); return $this->GetOne("select 1 as ignore from $tables where $where for update"); } function &MetaTables($ttype=false,$showSchema=false, $qtable="%", $qschema="%") { global $ADODB_FETCH_MODE; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $qid = odbc_tables($this->_connectionID, "", $qschema, $qtable, ""); $rs = new ADORecordSet_odbc($qid); $ADODB_FETCH_MODE = $savem; if (!$rs) { $false = false; return $false; } $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; $arr =& $rs->GetArray(); //print_r($arr); $rs->Close(); $arr2 = array(); if ($ttype) { $isview = strncmp($ttype,'V',1) === 0; } for ($i=0; $i < sizeof($arr); $i++) { if (!$arr[$i][2]) continue; if (strncmp($arr[$i][1],'SYS',3) === 0) continue; $type = $arr[$i][3]; if ($showSchema) $arr[$i][2] = $arr[$i][1].'.'.$arr[$i][2]; if ($ttype) { if ($isview) { if (strncmp($type,'V',1) === 0) $arr2[] = $arr[$i][2]; } else if (strncmp($type,'T',1) === 0) $arr2[] = $arr[$i][2]; } else if (strncmp($type,'S',1) !== 0) $arr2[] = $arr[$i][2]; } return $arr2; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { // use right() and replace() ? if (!$col) $col = $this->sysDate; $s = ''; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { if ($s) $s .= '||'; $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= "char(year($col))"; break; case 'M': $s .= "substr(monthname($col),1,3)"; break; case 'm': $s .= "right(digits(month($col)),2)"; break; case 'D': case 'd': $s .= "right(digits(day($col)),2)"; break; case 'H': case 'h': if ($col != $this->sysDate) $s .= "right(digits(hour($col)),2)"; else $s .= "''"; break; case 'i': case 'I': if ($col != $this->sysDate) $s .= "right(digits(minute($col)),2)"; else $s .= "''"; break; case 'S': case 's': if ($col != $this->sysDate) $s .= "right(digits(second($col)),2)"; else $s .= "''"; break; default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } $s .= $this->qstr($ch); } } return $s; } function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputArr=false) { if ($offset <= 0) { // could also use " OPTIMIZE FOR $nrows ROWS " if ($nrows >= 0) $sql .= " FETCH FIRST $nrows ROWS ONLY "; $rs =& $this->Execute($sql,$inputArr); } else { if ($offset > 0 && $nrows < 0); else { $nrows += $offset; $sql .= " FETCH FIRST $nrows ROWS ONLY "; } $rs =& ADOConnection::SelectLimit($sql,-1,$offset,$inputArr); } return $rs; } }; class ADORecordSet_db2 extends ADORecordSet_odbc { var $databaseType = "db2"; function ADORecordSet_db2($id,$mode=false) { $this->ADORecordSet_odbc($id,$mode); } function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } switch (strtoupper($t)) { case 'VARCHAR': case 'CHAR': case 'CHARACTER': case 'C': if ($len <= $this->blobSize) return 'C'; case 'LONGCHAR': case 'TEXT': case 'CLOB': case 'DBCLOB': // double-byte case 'X': return 'X'; case 'BLOB': case 'GRAPHIC': case 'VARGRAPHIC': return 'B'; case 'DATE': case 'D': return 'D'; case 'TIME': case 'TIMESTAMP': case 'T': return 'T'; //case 'BOOLEAN': //case 'BIT': // return 'L'; //case 'COUNTER': // return 'R'; case 'INT': case 'INTEGER': case 'BIGINT': case 'SMALLINT': case 'I': return 'I'; default: return 'N'; } } } } //define ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-fbsql.inc.php 777 0 0 15167 10142745762 21423 0. Set tabs to 8. */ // security - hide paths if (!defined('ADODB_DIR')) die(); if (! defined("_ADODB_FBSQL_LAYER")) { define("_ADODB_FBSQL_LAYER", 1 ); class ADODB_fbsql extends ADOConnection { var $databaseType = 'fbsql'; var $hasInsertID = true; var $hasAffectedRows = true; var $metaTablesSQL = "SHOW TABLES"; var $metaColumnsSQL = "SHOW COLUMNS FROM %s"; var $fmtTimeStamp = "'Y-m-d H:i:s'"; var $hasLimit = false; function ADODB_fbsql() { } function _insertid() { return fbsql_insert_id($this->_connectionID); } function _affectedrows() { return fbsql_affected_rows($this->_connectionID); } function &MetaDatabases() { $qid = fbsql_list_dbs($this->_connectionID); $arr = array(); $i = 0; $max = fbsql_num_rows($qid); while ($i < $max) { $arr[] = fbsql_tablename($qid,$i); $i += 1; } return $arr; } // returns concatenated string function Concat() { $s = ""; $arr = func_get_args(); $first = true; $s = implode(',',$arr); if (sizeof($arr) > 0) return "CONCAT($s)"; else return ''; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { $this->_connectionID = fbsql_connect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { $this->_connectionID = fbsql_pconnect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } function &MetaColumns($table) { if ($this->metaColumnsSQL) { $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); if ($rs === false) return false; $retarr = array(); while (!$rs->EOF){ $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; // split type into type(length): if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = $query_array[2]; } else { $fld->max_length = -1; } $fld->not_null = ($rs->fields[2] != 'YES'); $fld->primary_key = ($rs->fields[3] == 'PRI'); $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); $fld->binary = (strpos($fld->type,'blob') !== false); $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } return false; } // returns true or false function SelectDB($dbName) { $this->databaseName = $dbName; if ($this->_connectionID) { return @fbsql_select_db($dbName,$this->_connectionID); } else return false; } // returns queryID or false function _query($sql,$inputarr) { return fbsql_query("$sql;",$this->_connectionID); } /* Returns: the last error message from previous database operation */ function ErrorMsg() { $this->_errorMsg = @fbsql_error($this->_connectionID); return $this->_errorMsg; } /* Returns: the last error number from previous database operation */ function ErrorNo() { return @fbsql_errno($this->_connectionID); } // returns true or false function _close() { return @fbsql_close($this->_connectionID); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_fbsql extends ADORecordSet{ var $databaseType = "fbsql"; var $canSeek = true; function ADORecordSet_fbsql($queryID,$mode=false) { if (!$mode) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = FBSQL_NUM; break; default: case ADODB_FETCH_BOTH: $this->fetchMode = FBSQL_BOTH; break; case ADODB_FETCH_ASSOC: $this->fetchMode = FBSQL_ASSOC; break; } return $this->ADORecordSet($queryID); } function _initrs() { GLOBAL $ADODB_COUNTRECS; $this->_numOfRows = ($ADODB_COUNTRECS) ? @fbsql_num_rows($this->_queryID):-1; $this->_numOfFields = @fbsql_num_fields($this->_queryID); } function &FetchField($fieldOffset = -1) { if ($fieldOffset != -1) { $o = @fbsql_fetch_field($this->_queryID, $fieldOffset); //$o->max_length = -1; // fbsql returns the max length less spaces -- so it is unrealiable $f = @fbsql_field_flags($this->_queryID,$fieldOffset); $o->binary = (strpos($f,'binary')!== false); } else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ $o = @fbsql_fetch_field($this->_queryID);// fbsql returns the max length less spaces -- so it is unrealiable //$o->max_length = -1; } return $o; } function _seek($row) { return @fbsql_data_seek($this->_queryID,$row); } function _fetch($ignore_fields=false) { $this->fields = @fbsql_fetch_array($this->_queryID,$this->fetchMode); return ($this->fields == true); } function _close() { return @fbsql_free_result($this->_queryID); } function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } $len = -1; // fbsql max_length is not accurate switch (strtoupper($t)) { case 'CHARACTER': case 'CHARACTER VARYING': case 'BLOB': case 'CLOB': case 'BIT': case 'BIT VARYING': if ($len <= $this->blobSize) return 'C'; // so we have to check whether binary... case 'IMAGE': case 'LONGBLOB': case 'BLOB': case 'MEDIUMBLOB': return !empty($fieldobj->binary) ? 'B' : 'X'; case 'DATE': return 'D'; case 'TIME': case 'TIME WITH TIME ZONE': case 'TIMESTAMP': case 'TIMESTAMP WITH TIME ZONE': return 'T'; case 'PRIMARY_KEY': return 'R'; case 'INTEGER': case 'SMALLINT': case 'BOOLEAN': if (!empty($fieldobj->primary_key)) return 'R'; else return 'I'; default: return 'N'; } } } //class } // defined ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-firebird.inc.php 777 0 0 3607 10142745762 22056 0ADODB_ibase(); } function ServerInfo() { $arr['dialect'] = $this->dialect; switch($arr['dialect']) { case '': case '1': $s = 'Firebird Dialect 1'; break; case '2': $s = 'Firebird Dialect 2'; break; default: case '3': $s = 'Firebird Dialect 3'; break; } $arr['version'] = ADOConnection::_findvers($s); $arr['description'] = $s; return $arr; } // Note that Interbase 6.5 uses this ROWS instead - don't you love forking wars! // SELECT col1, col2 FROM table ROWS 5 -- get 5 rows // SELECT col1, col2 FROM TABLE ORDER BY col1 ROWS 3 TO 7 -- first 5 skip 2 function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false, $secs=0) { $str = 'SELECT '; if ($nrows >= 0) $str .= "FIRST $nrows "; $str .=($offset>=0) ? "SKIP $offset " : ''; $sql = preg_replace('/^[ \t]*select/i',$str,$sql); if ($secs) $rs =& $this->CacheExecute($secs,$sql,$inputarr); else $rs =& $this->Execute($sql,$inputarr); return $rs; } }; class ADORecordSet_firebird extends ADORecordSet_ibase { var $databaseType = "firebird"; function ADORecordSet_firebird($id,$mode=false) { $this->ADORecordSet_ibase($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-ibase.inc.php 777 0 0 61151 10142752042 21356 0 changed transaction handling and added experimental blob stuff Docs to interbase at the website http://www.synectics.co.za/php3/tutorial/IB_PHP3_API.html To use gen_id(), see http://www.volny.cz/iprenosil/interbase/ip_ib_code.htm#_code_creategen $rs = $conn->Execute('select gen_id(adodb,1) from rdb$database'); $id = $rs->fields[0]; $conn->Execute("insert into table (id, col1,...) values ($id, $val1,...)"); */ // security - hide paths if (!defined('ADODB_DIR')) die(); class ADODB_ibase extends ADOConnection { var $databaseType = "ibase"; var $dataProvider = "ibase"; var $replaceQuote = "''"; // string to use to replace quotes var $ibase_datefmt = '%Y-%m-%d'; // For hours,mins,secs change to '%Y-%m-%d %H:%M:%S'; var $fmtDate = "'Y-m-d'"; var $ibase_timestampfmt = "%Y-%m-%d %H:%M:%S"; var $ibase_timefmt = "%H:%M:%S"; var $fmtTimeStamp = "'Y-m-d, H:i:s'"; var $concat_operator='||'; var $_transactionID; var $metaTablesSQL = "select rdb\$relation_name from rdb\$relations where rdb\$relation_name not like 'RDB\$%'"; //OPN STUFF start var $metaColumnsSQL = "select a.rdb\$field_name, a.rdb\$null_flag, a.rdb\$default_source, b.rdb\$field_length, b.rdb\$field_scale, b.rdb\$field_sub_type, b.rdb\$field_precision, b.rdb\$field_type from rdb\$relation_fields a, rdb\$fields b where a.rdb\$field_source = b.rdb\$field_name and a.rdb\$relation_name = '%s' order by a.rdb\$field_position asc"; //OPN STUFF end var $ibasetrans; var $hasGenID = true; var $_bindInputArray = true; var $buffers = 0; var $dialect = 1; var $sysDate = "cast('TODAY' as timestamp)"; var $sysTimeStamp = "cast('NOW' as timestamp)"; var $ansiOuter = true; var $hasAffectedRows = false; var $poorAffectedRows = true; var $blobEncodeType = 'C'; function ADODB_ibase() { if (defined('IBASE_DEFAULT')) $this->ibasetrans = IBASE_DEFAULT; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$persist=false) { if (!function_exists('ibase_pconnect')) return null; if ($argDatabasename) $argHostname .= ':'.$argDatabasename; $fn = ($persist) ? 'ibase_pconnect':'ibase_connect'; $this->_connectionID = $fn($argHostname,$argUsername,$argPassword, $this->charSet,$this->buffers,$this->dialect); if ($this->dialect != 1) { // http://www.ibphoenix.com/ibp_60_del_id_ds.html $this->replaceQuote = "''"; } if ($this->_connectionID === false) { $this->_handleerror(); return false; } // PHP5 change. if (function_exists('ibase_timefmt')) { ibase_timefmt($this->ibase_datefmt,IBASE_DATE ); if ($this->dialect == 1) ibase_timefmt($this->ibase_datefmt,IBASE_TIMESTAMP ); else ibase_timefmt($this->ibase_timestampfmt,IBASE_TIMESTAMP ); ibase_timefmt($this->ibase_timefmt,IBASE_TIME ); } else { ini_set("ibase.timestampformat", $this->ibase_timestampfmt); ini_set("ibase.dateformat", $this->ibase_datefmt); ini_set("ibase.timeformat", $this->ibase_timefmt); } return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,true); } function MetaPrimaryKeys($table,$owner_notused=false,$internalKey=false) { if ($internalKey) return array('RDB$DB_KEY'); $table = strtoupper($table); $sql = 'SELECT S.RDB$FIELD_NAME AFIELDNAME FROM RDB$INDICES I JOIN RDB$INDEX_SEGMENTS S ON I.RDB$INDEX_NAME=S.RDB$INDEX_NAME WHERE I.RDB$RELATION_NAME=\''.$table.'\' and I.RDB$INDEX_NAME like \'RDB$PRIMARY%\' ORDER BY I.RDB$INDEX_NAME,S.RDB$FIELD_POSITION'; $a = $this->GetCol($sql,false,true); if ($a && sizeof($a)>0) return $a; return false; } function ServerInfo() { $arr['dialect'] = $this->dialect; switch($arr['dialect']) { case '': case '1': $s = 'Interbase 5.5 or earlier'; break; case '2': $s = 'Interbase 5.6'; break; default: case '3': $s = 'Interbase 6.0'; break; } $arr['version'] = ADOConnection::_findvers($s); $arr['description'] = $s; return $arr; } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->autoCommit = false; $this->_transactionID = $this->_connectionID;//ibase_trans($this->ibasetrans, $this->_connectionID); return $this->_transactionID; } function CommitTrans($ok=true) { if (!$ok) return $this->RollbackTrans(); if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $ret = false; $this->autoCommit = true; if ($this->_transactionID) { //print ' commit '; $ret = ibase_commit($this->_transactionID); } $this->_transactionID = false; return $ret; } // there are some compat problems with ADODB_COUNTRECS=false and $this->_logsql currently. // it appears that ibase extension cannot support multiple concurrent queryid's function &_Execute($sql,$inputarr=false) { global $ADODB_COUNTRECS; if ($this->_logsql) { $savecrecs = $ADODB_COUNTRECS; $ADODB_COUNTRECS = true; // force countrecs $ret =& ADOConnection::_Execute($sql,$inputarr); $ADODB_COUNTRECS = $savecrecs; } else { $ret =& ADOConnection::_Execute($sql,$inputarr); } return $ret; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $ret = false; $this->autoCommit = true; if ($this->_transactionID) $ret = ibase_rollback($this->_transactionID); $this->_transactionID = false; return $ret; } function &MetaIndexes ($table, $primary = FALSE, $owner=false) { // save old fetch mode global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } $table = strtoupper($table); $sql = "SELECT * FROM RDB\$INDICES WHERE RDB\$RELATION_NAME = '".$table."'"; if (!$primary) { $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$%'"; } else { $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$FOREIGN%'"; } // get index details $rs = $this->Execute($sql); if (!is_object($rs)) { // restore fetchmode if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; return FALSE; } $indexes = array (); while ($row = $rs->FetchRow()) { $index = $row[0]; if (!isset($indexes[$index])) { if (is_null($row[3])) {$row[3] = 0;} $indexes[$index] = array( 'unique' => ($row[3] == 1), 'columns' => array() ); } $sql = "SELECT * FROM RDB\$INDEX_SEGMENTS WHERE RDB\$INDEX_NAME = '".$name."' ORDER BY RDB\$FIELD_POSITION ASC"; $rs1 = $this->Execute($sql); while ($row1 = $rs1->FetchRow()) { $indexes[$index]['columns'][$row1[2]] = $row1[1]; } } // restore fetchmode if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; return $indexes; } // See http://community.borland.com/article/0,1410,25844,00.html function RowLock($tables,$where,$col) { if ($this->autoCommit) $this->BeginTrans(); $this->Execute("UPDATE $table SET $col=$col WHERE $where "); // is this correct - jlim? return 1; } function CreateSequence($seqname,$startID=1) { $ok = $this->Execute(("INSERT INTO RDB\$GENERATORS (RDB\$GENERATOR_NAME) VALUES (UPPER('$seqname'))" )); if (!$ok) return false; return $this->Execute("SET GENERATOR $seqname TO ".($startID-1).';'); } function DropSequence($seqname) { $seqname = strtoupper($seqname); $this->Execute("delete from RDB\$GENERATORS where RDB\$GENERATOR_NAME='$seqname'"); } function GenID($seqname='adodbseq',$startID=1) { $getnext = ("SELECT Gen_ID($seqname,1) FROM RDB\$DATABASE"); $rs = @$this->Execute($getnext); if (!$rs) { $this->Execute(("INSERT INTO RDB\$GENERATORS (RDB\$GENERATOR_NAME) VALUES (UPPER('$seqname'))" )); $this->Execute("SET GENERATOR $seqname TO ".($startID-1).';'); $rs = $this->Execute($getnext); } if ($rs && !$rs->EOF) $this->genID = (integer) reset($rs->fields); else $this->genID = 0; // false if ($rs) $rs->Close(); return $this->genID; } function SelectDB($dbName) { return false; } function _handleerror() { $this->_errorMsg = ibase_errmsg(); } function ErrorNo() { if (preg_match('/error code = ([\-0-9]*)/i', $this->_errorMsg,$arr)) return (integer) $arr[1]; else return 0; } function ErrorMsg() { return $this->_errorMsg; } function Prepare($sql) { $stmt = ibase_prepare($this->_connectionID,$sql); if (!$stmt) return false; return array($sql,$stmt); } // returns query ID if successful, otherwise false // there have been reports of problems with nested queries - the code is probably not re-entrant? function _query($sql,$iarr=false) { if (!$this->autoCommit && $this->_transactionID) { $conn = $this->_transactionID; $docommit = false; } else { $conn = $this->_connectionID; $docommit = true; } if (is_array($sql)) { $fn = 'ibase_execute'; $sql = $sql[1]; if (is_array($iarr)) { if (ADODB_PHPVER >= 0x4050) { // actually 4.0.4 if ( !isset($iarr[0]) ) $iarr[0] = ''; // PHP5 compat hack $fnarr =& array_merge( array($sql) , $iarr); $ret = call_user_func_array($fn,$fnarr); } else { switch(sizeof($iarr)) { case 1: $ret = $fn($sql,$iarr[0]); break; case 2: $ret = $fn($sql,$iarr[0],$iarr[1]); break; case 3: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2]); break; case 4: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3]); break; case 5: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4]); break; case 6: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5]); break; case 7: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6]); break; default: ADOConnection::outp( "Too many parameters to ibase query $sql"); case 8: $ret = $fn($sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6],$iarr[7]); break; } } } else $ret = $fn($sql); } else { $fn = 'ibase_query'; if (is_array($iarr)) { if (ADODB_PHPVER >= 0x4050) { // actually 4.0.4 if (sizeof($iarr) == 0) $iarr[0] = ''; // PHP5 compat hack $fnarr =& array_merge( array($conn,$sql) , $iarr); $ret = call_user_func_array($fn,$fnarr); } else { switch(sizeof($iarr)) { case 1: $ret = $fn($conn,$sql,$iarr[0]); break; case 2: $ret = $fn($conn,$sql,$iarr[0],$iarr[1]); break; case 3: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2]); break; case 4: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3]); break; case 5: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4]); break; case 6: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5]); break; case 7: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6]); break; default: ADOConnection::outp( "Too many parameters to ibase query $sql"); case 8: $ret = $fn($conn,$sql,$iarr[0],$iarr[1],$iarr[2],$iarr[3],$iarr[4],$iarr[5],$iarr[6],$iarr[7]); break; } } } else $ret = $fn($conn,$sql); } if ($docommit && $ret === true) ibase_commit($this->_connectionID); $this->_handleerror(); return $ret; } // returns true or false function _close() { if (!$this->autoCommit) @ibase_rollback($this->_connectionID); return @ibase_close($this->_connectionID); } //OPN STUFF start function _ConvertFieldType(&$fld, $ftype, $flen, $fscale, $fsubtype, $fprecision, $dialect3) { $fscale = abs($fscale); $fld->max_length = $flen; $fld->scale = null; switch($ftype){ case 7: case 8: if ($dialect3) { switch($fsubtype){ case 0: $fld->type = ($ftype == 7 ? 'smallint' : 'integer'); break; case 1: $fld->type = 'numeric'; $fld->max_length = $fprecision; $fld->scale = $fscale; break; case 2: $fld->type = 'decimal'; $fld->max_length = $fprecision; $fld->scale = $fscale; break; } // switch } else { if ($fscale !=0) { $fld->type = 'decimal'; $fld->scale = $fscale; $fld->max_length = ($ftype == 7 ? 4 : 9); } else { $fld->type = ($ftype == 7 ? 'smallint' : 'integer'); } } break; case 16: if ($dialect3) { switch($fsubtype){ case 0: $fld->type = 'decimal'; $fld->max_length = 18; $fld->scale = 0; break; case 1: $fld->type = 'numeric'; $fld->max_length = $fprecision; $fld->scale = $fscale; break; case 2: $fld->type = 'decimal'; $fld->max_length = $fprecision; $fld->scale = $fscale; break; } // switch } break; case 10: $fld->type = 'float'; break; case 14: $fld->type = 'char'; break; case 27: if ($fscale !=0) { $fld->type = 'decimal'; $fld->max_length = 15; $fld->scale = 5; } else { $fld->type = 'double'; } break; case 35: if ($dialect3) { $fld->type = 'timestamp'; } else { $fld->type = 'date'; } break; case 12: $fld->type = 'date'; break; case 13: $fld->type = 'time'; break; case 37: $fld->type = 'varchar'; break; case 40: $fld->type = 'cstring'; break; case 261: $fld->type = 'blob'; $fld->max_length = -1; break; } // switch } //OPN STUFF end // returns array of ADOFieldObjects for current table function &MetaColumns($table) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); $ADODB_FETCH_MODE = $save; if ($rs === false) { $false = false; return $false; } $retarr = array(); //OPN STUFF start $dialect3 = ($this->dialect==3 ? true : false); //OPN STUFF end while (!$rs->EOF) { //print_r($rs->fields); $fld = new ADOFieldObject(); $fld->name = trim($rs->fields[0]); //OPN STUFF start $this->_ConvertFieldType($fld, $rs->fields[7], $rs->fields[3], $rs->fields[4], $rs->fields[5], $rs->fields[6], $dialect3); if (isset($rs->fields[1]) && $rs->fields[1]) { $fld->not_null = true; } if (isset($rs->fields[2])) { $fld->has_default = true; $d = substr($rs->fields[2],strlen('default ')); switch ($fld->type) { case 'smallint': case 'integer': $fld->default_value = (int) $d; break; case 'char': case 'blob': case 'text': case 'varchar': $fld->default_value = (string) substr($d,1,strlen($d)-2); break; case 'double': case 'float': $fld->default_value = (float) $d; break; default: $fld->default_value = $d; break; } // case 35:$tt = 'TIMESTAMP'; break; } if ((isset($rs->fields[5])) && ($fld->type == 'blob')) { $fld->sub_type = $rs->fields[5]; } else { $fld->sub_type = null; } //OPN STUFF end if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; else $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } $rs->Close(); return empty($retarr) ? false : $retarr; } function BlobEncode( $blob ) { $blobid = ibase_blob_create( $this->_connectionID); ibase_blob_add( $blobid, $blob ); return ibase_blob_close( $blobid ); } // since we auto-decode all blob's since 2.42, // BlobDecode should not do any transforms function BlobDecode($blob) { return $blob; } // old blobdecode function // still used to auto-decode all blob's function _BlobDecode( $blob ) { $blobid = ibase_blob_open( $blob ); $realblob = ibase_blob_get( $blobid,$this->maxblobsize); // 2nd param is max size of blob -- Kevin Boillet while($string = ibase_blob_get($blobid, 8192)){ $realblob .= $string; } ibase_blob_close( $blobid ); return( $realblob ); } function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') { $fd = fopen($path,'rb'); if ($fd === false) return false; $blob_id = ibase_blob_create($this->_connectionID); /* fill with data */ while ($val = fread($fd,32768)){ ibase_blob_add($blob_id, $val); } /* close and get $blob_id_str for inserting into table */ $blob_id_str = ibase_blob_close($blob_id); fclose($fd); return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false; } /* Insert a null into the blob field of the table first. Then use UpdateBlob to store the blob. Usage: $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); */ function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { $blob_id = ibase_blob_create($this->_connectionID); // ibase_blob_add($blob_id, $val); // replacement that solves the problem by which only the first modulus 64K / // of $val are stored at the blob field //////////////////////////////////// // Thx Abel Berenstein aberenstein#afip.gov.ar $len = strlen($val); $chunk_size = 32768; $tail_size = $len % $chunk_size; $n_chunks = ($len - $tail_size) / $chunk_size; for ($n = 0; $n < $n_chunks; $n++) { $start = $n * $chunk_size; $data = substr($val, $start, $chunk_size); ibase_blob_add($blob_id, $data); } if ($tail_size) { $start = $n_chunks * $chunk_size; $data = substr($val, $start, $tail_size); ibase_blob_add($blob_id, $data); } // end replacement ///////////////////////////////////////////////////////// $blob_id_str = ibase_blob_close($blob_id); return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false; } function OldUpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { $blob_id = ibase_blob_create($this->_connectionID); ibase_blob_add($blob_id, $val); $blob_id_str = ibase_blob_close($blob_id); return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false; } // Format date column in sql string given an input format that understands Y M D // Only since Interbase 6.0 - uses EXTRACT // problem - does not zero-fill the day and month yet function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysDate; $s = ''; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { if ($s) $s .= '||'; $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= "extract(year from $col)"; break; case 'M': case 'm': $s .= "extract(month from $col)"; break; case 'Q': case 'q': $s .= "cast(((extract(month from $col)+2) / 3) as integer)"; break; case 'D': case 'd': $s .= "(extract(day from $col))"; break; case 'H': case 'h': $s .= "(extract(hour from $col))"; break; case 'I': case 'i': $s .= "(extract(minute from $col))"; break; case 'S': case 's': $s .= "CAST((extract(second from $col)) AS INTEGER)"; break; default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } $s .= $this->qstr($ch); break; } } return $s; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_ibase extends ADORecordSet { var $databaseType = "ibase"; var $bind=false; var $_cacheType; function ADORecordset_ibase($id,$mode=false) { global $ADODB_FETCH_MODE; $this->fetchMode = ($mode === false) ? $ADODB_FETCH_MODE : $mode; $this->ADORecordSet($id); } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by fetchField() is retrieved. */ function &FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; $ibf = ibase_field_info($this->_queryID,$fieldOffset); switch (ADODB_ASSOC_CASE) { case 2: // the default $fld->name = ($ibf['alias']); if (empty($fld->name)) $fld->name = ($ibf['name']); break; case 0: $fld->name = strtoupper($ibf['alias']); if (empty($fld->name)) $fld->name = strtoupper($ibf['name']); break; case 1: $fld->name = strtolower($ibf['alias']); if (empty($fld->name)) $fld->name = strtolower($ibf['name']); break; } $fld->type = $ibf['type']; $fld->max_length = $ibf['length']; /* This needs to be populated from the metadata */ $fld->not_null = false; $fld->has_default = false; $fld->default_value = 'null'; return $fld; } function _initrs() { $this->_numOfRows = -1; $this->_numOfFields = @ibase_num_fields($this->_queryID); // cache types for blob decode check for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { $f1 = $this->FetchField($i); $this->_cacheType[] = $f1->type; } } function _seek($row) { return false; } function _fetch() { $f = @ibase_fetch_row($this->_queryID); if ($f === false) { $this->fields = false; return false; } // OPN stuff start - optimized // fix missing nulls and decode blobs automatically global $ADODB_ANSI_PADDING_OFF; //$ADODB_ANSI_PADDING_OFF=1; $rtrim = !empty($ADODB_ANSI_PADDING_OFF); for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { if ($this->_cacheType[$i]=="BLOB") { if (isset($f[$i])) { $f[$i] = $this->connection->_BlobDecode($f[$i]); } else { $f[$i] = null; } } else { if (!isset($f[$i])) { $f[$i] = null; } else if ($rtrim && is_string($f[$i])) { $f[$i] = rtrim($f[$i]); } } } // OPN stuff end $this->fields = $f; if ($this->fetchMode == ADODB_FETCH_ASSOC) { $this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE); } else if ($this->fetchMode == ADODB_FETCH_BOTH) { $this->fields =& array_merge($this->fields,$this->GetRowAssoc(ADODB_ASSOC_CASE)); } return true; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _close() { return @ibase_free_result($this->_queryID); } function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } switch (strtoupper($t)) { case 'CHAR': return 'C'; case 'TEXT': case 'VARCHAR': case 'VARYING': if ($len <= $this->blobSize) return 'C'; return 'X'; case 'BLOB': return 'B'; case 'TIMESTAMP': case 'DATE': return 'D'; case 'TIME': return 'T'; //case 'T': return 'T'; //case 'L': return 'L'; case 'INT': case 'SHORT': case 'INTEGER': return 'I'; default: return 'N'; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-informix.inc.php 777 0 0 1617 10142745762 22122 0ADORecordset_informix72($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-informix72.inc.php 777 0 0 26613 10142745762 22316 0 */ // security - hide paths if (!defined('ADODB_DIR')) die(); if (!defined('IFX_SCROLL')) define('IFX_SCROLL',1); class ADODB_informix72 extends ADOConnection { var $databaseType = "informix72"; var $dataProvider = "informix"; var $replaceQuote = "''"; // string to use to replace quotes var $fmtDate = "'Y-m-d'"; var $fmtTimeStamp = "'Y-m-d H:i:s'"; var $hasInsertID = true; var $hasAffectedRows = true; var $substr = 'substr'; var $metaTablesSQL="select tabname from systables where tabtype!=' ' and owner!='informix'"; //Don't get informix tables and pseudo-tables var $metaColumnsSQL = "select c.colname, c.coltype, c.collength, d.default,c.colno from syscolumns c, systables t,outer sysdefaults d where c.tabid=t.tabid and d.tabid=t.tabid and d.colno=c.colno and tabname='%s' order by c.colno"; var $metaPrimaryKeySQL = "select part1,part2,part3,part4,part5,part6,part7,part8 from systables t,sysconstraints s,sysindexes i where t.tabname='%s' and s.tabid=t.tabid and s.constrtype='P' and i.idxname=s.idxname"; var $concat_operator = '||'; var $lastQuery = false; var $has_insertid = true; var $_autocommit = true; var $_bindInputArray = true; // set to true if ADOConnection.Execute() permits binding of array parameters. var $sysDate = 'TODAY'; var $sysTimeStamp = 'CURRENT'; var $cursorType = IFX_SCROLL; // IFX_SCROLL or IFX_HOLD or 0 function ADODB_informix72() { // alternatively, use older method: //putenv("DBDATE=Y4MD-"); // force ISO date format putenv('GL_DATE=%Y-%m-%d'); if (function_exists('ifx_byteasvarchar')) { ifx_byteasvarchar(1); // Mode "0" will return a blob id, and mode "1" will return a varchar with text content. ifx_textasvarchar(1); // Mode "0" will return a blob id, and mode "1" will return a varchar with text content. ifx_blobinfile_mode(0); // Mode "0" means save Byte-Blobs in memory, and mode "1" means save Byte-Blobs in a file. } } function ServerInfo() { if (isset($this->version)) return $this->version; $arr['description'] = $this->GetOne("select DBINFO('version','full') from systables where tabid = 1"); $arr['version'] = $this->GetOne("select DBINFO('version','major') || DBINFO('version','minor') from systables where tabid = 1"); $this->version = $arr; return $arr; } function _insertid() { $sqlca =ifx_getsqlca($this->lastQuery); return @$sqlca["sqlerrd1"]; } function _affectedrows() { if ($this->lastQuery) { return @ifx_affected_rows ($this->lastQuery); } return 0; } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->Execute('BEGIN'); $this->_autocommit = false; return true; } function CommitTrans($ok=true) { if (!$ok) return $this->RollbackTrans(); if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->Execute('COMMIT'); $this->_autocommit = true; return true; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->Execute('ROLLBACK'); $this->_autocommit = true; return true; } function RowLock($tables,$where) { if ($this->_autocommit) $this->BeginTrans(); return $this->GetOne("select 1 as ignore from $tables where $where for update"); } /* Returns: the last error message from previous database operation Note: This function is NOT available for Microsoft SQL Server. */ function ErrorMsg() { if (!empty($this->_logsql)) return $this->_errorMsg; $this->_errorMsg = ifx_errormsg(); return $this->_errorMsg; } function ErrorNo() { preg_match("/.*SQLCODE=([^\]]*)/",ifx_error(),$parse); //!EOS if (is_array($parse) && isset($parse[1])) return (int)$parse[1]; return 0; } function &MetaColumns($table) { global $ADODB_FETCH_MODE; if (!empty($this->metaColumnsSQL)) { $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if ($rs === false) return false; $rspkey = $this->Execute(sprintf($this->metaPrimaryKeySQL,$table)); //Added to get primary key colno items $retarr = array(); while (!$rs->EOF) { //print_r($rs->fields); $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; $fld->primary_key=$rspkey->fields && array_search($rs->fields[4],$rspkey->fields); //Added to set primary key flag $fld->max_length = $rs->fields[2]; if (trim($rs->fields[3]) != "AAAAAA 0") { $fld->has_default = 1; $fld->default_value = $rs->fields[3]; } else { $fld->has_default = 0; } $retarr[strtolower($fld->name)] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } return false; } function &xMetaColumns($table) { return ADOConnection::MetaColumns($table,false); } function UpdateBlob($table, $column, $val, $where, $blobtype = 'BLOB') { $type = ($blobtype == 'TEXT') ? 1 : 0; $blobid = ifx_create_blob($type,0,$val); return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blobid)); } function BlobDecode($blobid) { return function_exists('ifx_byteasvarchar') ? $blobid : @ifx_get_blob($blobid); } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('ifx_connect')) return null; $dbs = $argDatabasename . "@" . $argHostname; if ($argHostname) putenv("INFORMIXSERVER=$argHostname"); putenv("INFORMIXSERVER=".trim($argHostname)); $this->_connectionID = ifx_connect($dbs,$argUsername,$argPassword); if ($this->_connectionID === false) return false; #if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('ifx_connect')) return null; $dbs = $argDatabasename . "@" . $argHostname; putenv("INFORMIXSERVER=".trim($argHostname)); $this->_connectionID = ifx_pconnect($dbs,$argUsername,$argPassword); if ($this->_connectionID === false) return false; #if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } /* // ifx_do does not accept bind parameters - weird ??? function Prepare($sql) { $stmt = ifx_prepare($sql); if (!$stmt) return $sql; else return array($sql,$stmt); } */ // returns query ID if successful, otherwise false function _query($sql,$inputarr) { global $ADODB_COUNTRECS; // String parameters have to be converted using ifx_create_char if ($inputarr) { foreach($inputarr as $v) { if (gettype($v) == 'string') { $tab[] = ifx_create_char($v); } else { $tab[] = $v; } } } // In case of select statement, we use a scroll cursor in order // to be able to call "move", or "movefirst" statements if (!$ADODB_COUNTRECS && preg_match("/^\s*select/is", $sql)) { if ($inputarr) { $this->lastQuery = ifx_query($sql,$this->_connectionID, $this->cursorType, $tab); } else { $this->lastQuery = ifx_query($sql,$this->_connectionID, $this->cursorType); } } else { if ($inputarr) { $this->lastQuery = ifx_query($sql,$this->_connectionID, $tab); } else { $this->lastQuery = ifx_query($sql,$this->_connectionID); } } // Following line have been commented because autocommit mode is // not supported by informix SE 7.2 //if ($this->_autocommit) ifx_query('COMMIT',$this->_connectionID); return $this->lastQuery; } // returns true or false function _close() { $this->lastQuery = false; return ifx_close($this->_connectionID); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_informix72 extends ADORecordSet { var $databaseType = "informix72"; var $canSeek = true; var $_fieldprops = false; function ADORecordset_informix72($id,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; return $this->ADORecordSet($id); } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by fetchField() is retrieved. */ function &FetchField($fieldOffset = -1) { if (empty($this->_fieldprops)) { $fp = ifx_fieldproperties($this->_queryID); foreach($fp as $k => $v) { $o = new ADOFieldObject; $o->name = $k; $arr = split(';',$v); //"SQLTYPE;length;precision;scale;ISNULLABLE" $o->type = $arr[0]; $o->max_length = $arr[1]; $this->_fieldprops[] = $o; $o->not_null = $arr[4]=="N"; } } return $this->_fieldprops[$fieldOffset]; } function _initrs() { $this->_numOfRows = -1; // ifx_affected_rows not reliable, only returns estimate -- ($ADODB_COUNTRECS)? ifx_affected_rows($this->_queryID):-1; $this->_numOfFields = ifx_num_fields($this->_queryID); } function _seek($row) { return @ifx_fetch_row($this->_queryID, (int) $row); } function MoveLast() { $this->fields = @ifx_fetch_row($this->_queryID, "LAST"); if ($this->fields) $this->EOF = false; $this->_currentRow = -1; if ($this->fetchMode == ADODB_FETCH_NUM) { foreach($this->fields as $v) { $arr[] = $v; } $this->fields = $arr; } return true; } function MoveFirst() { $this->fields = @ifx_fetch_row($this->_queryID, "FIRST"); if ($this->fields) $this->EOF = false; $this->_currentRow = 0; if ($this->fetchMode == ADODB_FETCH_NUM) { foreach($this->fields as $v) { $arr[] = $v; } $this->fields = $arr; } return true; } function _fetch($ignore_fields=false) { $this->fields = @ifx_fetch_row($this->_queryID); if (!is_array($this->fields)) return false; if ($this->fetchMode == ADODB_FETCH_NUM) { foreach($this->fields as $v) { $arr[] = $v; } $this->fields = $arr; } return true; } /* close() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed. */ function _close() { return ifx_free_result($this->_queryID); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-ldap.inc.php 777 0 0 23222 10142745762 21223 0_connectionID = ldap_connect( $conn_info[0], $conn_info[1] ) or die( 'Could not connect to ' . $this->_connectionID ); if ($username && $password) { $bind = ldap_bind( $this->_connectionID, $username, $password ) or die( 'Could not bind to ' . $this->_connectionID . ' with $username & $password'); } else { $bind = ldap_bind( $this->_connectionID ) or die( 'Could not bind anonymously to ' . $this->_connectionID ); } return $this->_connectionID; } /* returns _queryID or false */ function _query($sql,$inputarr) { $rs = ldap_search( $this->_connectionID, $this->database, $sql ); return $rs; } /* closes the LDAP connection */ function _close() { @ldap_close( $this->_connectionID ); $this->_connectionID = false; } function ServerInfo() { if( is_array( $this->version ) ) return $this->version; $version = array(); /* Determines how aliases are handled during search. LDAP_DEREF_NEVER (0x00) LDAP_DEREF_SEARCHING (0x01) LDAP_DEREF_FINDING (0x02) LDAP_DEREF_ALWAYS (0x03) The LDAP_DEREF_SEARCHING value means aliases are dereferenced during the search but not when locating the base object of the search. The LDAP_DEREF_FINDING value means aliases are dereferenced when locating the base object but not during the search. Default: LDAP_DEREF_NEVER */ ldap_get_option( $this->_connectionID, LDAP_OPT_DEREF, $version['LDAP_OPT_DEREF'] ) ; switch ( $version['LDAP_OPT_DEREF'] ) { case 0: $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_NEVER'; case 1: $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_SEARCHING'; case 2: $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_FINDING'; case 3: $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_ALWAYS'; } /* A limit on the number of entries to return from a search. LDAP_NO_LIMIT (0) means no limit. Default: LDAP_NO_LIMIT */ ldap_get_option( $this->_connectionID, LDAP_OPT_SIZELIMIT, $version['LDAP_OPT_SIZELIMIT'] ); if ( $version['LDAP_OPT_SIZELIMIT'] == 0 ) { $version['LDAP_OPT_SIZELIMIT'] = 'LDAP_NO_LIMIT'; } /* A limit on the number of seconds to spend on a search. LDAP_NO_LIMIT (0) means no limit. Default: LDAP_NO_LIMIT */ ldap_get_option( $this->_connectionID, LDAP_OPT_TIMELIMIT, $version['LDAP_OPT_TIMELIMIT'] ); if ( $version['LDAP_OPT_TIMELIMIT'] == 0 ) { $version['LDAP_OPT_TIMELIMIT'] = 'LDAP_NO_LIMIT'; } /* Determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. LDAP_OPT_ON LDAP_OPT_OFF Default: ON */ ldap_get_option( $this->_connectionID, LDAP_OPT_REFERRALS, $version['LDAP_OPT_REFERRALS'] ); if ( $version['LDAP_OPT_REFERRALS'] == 0 ) { $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_OFF'; } else { $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_ON'; } /* Determines whether LDAP I/O operations are automatically restarted if they abort prematurely. LDAP_OPT_ON LDAP_OPT_OFF Default: OFF */ ldap_get_option( $this->_connectionID, LDAP_OPT_RESTART, $version['LDAP_OPT_RESTART'] ); if ( $version['LDAP_OPT_RESTART'] == 0 ) { $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_OFF'; } else { $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_ON'; } /* This option indicates the version of the LDAP protocol used when communicating with the primary LDAP server. LDAP_VERSION2 (2) LDAP_VERSION3 (3) Default: LDAP_VERSION2 (2) */ ldap_get_option( $this->_connectionID, LDAP_OPT_PROTOCOL_VERSION, $version['LDAP_OPT_PROTOCOL_VERSION'] ); if ( $version['LDAP_OPT_PROTOCOL_VERSION'] == 2 ) { $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION2'; } else { $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION3'; } /* The host name (or list of hosts) for the primary LDAP server. */ ldap_get_option( $this->_connectionID, LDAP_OPT_HOST_NAME, $version['LDAP_OPT_HOST_NAME'] ); ldap_get_option( $this->_connectionID, OPT_ERROR_NUMBER, $version['OPT_ERROR_NUMBER'] ); ldap_get_option( $this->_connectionID, OPT_ERROR_STRING, $version['OPT_ERROR_STRING'] ); ldap_get_option( $this->_connectionID, LDAP_OPT_MATCHED_DN, $version['LDAP_OPT_MATCHED_DN'] ); return $this->version = $version; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_ldap extends ADORecordSet{ var $databaseType = "ldap"; var $canSeek = false; var $_entryID; /* keeps track of the entry resource identifier */ function ADORecordSet_ldap($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = LDAP_NUM; break; case ADODB_FETCH_ASSOC: $this->fetchMode = LDAP_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH: $this->fetchMode = LDAP_BOTH; break; } $this->ADORecordSet($queryID); } function _initrs() { /* This could be teaked to respect the $COUNTRECS directive from ADODB It's currently being used in the _fetch() function and the GetAssoc() function */ $this->_numOfRows = ldap_count_entries( $this->connection->_connectionID, $this->_queryID ); } /* Return whole recordset as a multi-dimensional associative array */ function &GetAssoc($force_array = false, $first2cols = false) { $records = $this->_numOfRows; $results = array(); for ( $i=0; $i < $records; $i++ ) { foreach ( $this->fields as $k=>$v ) { if ( is_array( $v ) ) { if ( $v['count'] == 1 ) { $results[$i][$k] = $v[0]; } else { array_shift( $v ); $results[$i][$k] = $v; } } } } return $results; } function &GetRowAssoc() { $results = array(); foreach ( $this->fields as $k=>$v ) { if ( is_array( $v ) ) { if ( $v['count'] == 1 ) { $results[$k] = $v[0]; } else { array_shift( $v ); $results[$k] = $v; } } } return $results; } function GetRowNums() { $results = array(); foreach ( $this->fields as $k=>$v ) { static $i = 0; if (is_array( $v )) { if ( $v['count'] == 1 ) { $results[$i] = $v[0]; } else { array_shift( $v ); $results[$i] = $v; } $i++; } } return $results; } function _fetch() { if ( $this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0 ) return false; if ( $this->_currentRow == 0 ) { $this->_entryID = ldap_first_entry( $this->connection->_connectionID, $this->_queryID ); } else { $this->_entryID = ldap_next_entry( $this->connection->_connectionID, $this->_entryID ); } $this->fields = ldap_get_attributes( $this->connection->_connectionID, $this->_entryID ); $this->_numOfFields = $this->fields['count']; switch ( $this->fetchMode ) { case LDAP_ASSOC: $this->fields = $this->GetRowAssoc(); break; case LDAP_NUM: $this->fields = $this->GetRowNums(); break; case LDAP_BOTH: default: break; } return ( is_array( $this->fields ) ); } function _close() { @ldap_free_result( $this->_queryID ); $this->_queryID = false; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-mssql.inc.php 777 0 0 72666 10142745762 21462 0= 0x4300) { // docs say 4.2.0, but testing shows only since 4.3.0 does it work! ini_set('mssql.datetimeconvert',0); } else { global $ADODB_mssql_mths; // array, months must be upper-case $ADODB_mssql_date_order = 'mdy'; $ADODB_mssql_mths = array( 'JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6, 'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); } //--------------------------------------------------------------------------- // Call this to autoset $ADODB_mssql_date_order at the beginning of your code, // just after you connect to the database. Supports mdy and dmy only. // Not required for PHP 4.2.0 and above. function AutoDetect_MSSQL_Date_Order($conn) { global $ADODB_mssql_date_order; $adate = $conn->GetOne('select getdate()'); if ($adate) { $anum = (int) $adate; if ($anum > 0) { if ($anum > 31) { //ADOConnection::outp( "MSSQL: YYYY-MM-DD date format not supported currently"); } else $ADODB_mssql_date_order = 'dmy'; } else $ADODB_mssql_date_order = 'mdy'; } } class ADODB_mssql extends ADOConnection { var $databaseType = "mssql"; var $dataProvider = "mssql"; var $replaceQuote = "''"; // string to use to replace quotes var $fmtDate = "'Y-m-d'"; var $fmtTimeStamp = "'Y-m-d h:i:sA'"; var $hasInsertID = true; var $substr = "substring"; var $length = 'len'; var $hasAffectedRows = true; var $metaDatabasesSQL = "select name from sysdatabases where name <> 'master'"; var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))"; var $metaColumnsSQL = # xtype==61 is datetime "select c.name,t.name,c.length, (case when c.xusertype=61 then 0 else c.xprec end), (case when c.xusertype=61 then 0 else c.xscale end) from syscolumns c join systypes t on t.xusertype=c.xusertype join sysobjects o on o.id=c.id where o.name='%s'"; var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE var $hasGenID = true; var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; var $sysTimeStamp = 'GetDate()'; var $_has_mssql_init; var $maxParameterLen = 4000; var $arrayClass = 'ADORecordSet_array_mssql'; var $uniqueSort = true; var $leftOuter = '*='; var $rightOuter = '=*'; var $ansiOuter = true; // for mssql7 or later var $poorAffectedRows = true; var $identitySQL = 'select @@IDENTITY'; // 'select SCOPE_IDENTITY'; # for mssql 2000 var $uniqueOrderBy = true; var $_bindInputArray = true; function ADODB_mssql() { $this->_has_mssql_init = (strnatcmp(PHP_VERSION,'4.1.0')>=0); } function ServerInfo() { global $ADODB_FETCH_MODE; $stmt = $this->PrepareSP('sp_server_info'); $val = 2; if ($this->fetchMode === false) { $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; } else $savem = $this->SetFetchMode(ADODB_FETCH_NUM); $this->Parameter($stmt,$val,'attribute_id'); $row = $this->GetRow($stmt); //$row = $this->GetRow("execute sp_server_info 2"); if ($this->fetchMode === false) { $ADODB_FETCH_MODE = $savem; } else $this->SetFetchMode($savem); $arr['description'] = $row[2]; $arr['version'] = ADOConnection::_findvers($arr['description']); return $arr; } function IfNull( $field, $ifNull ) { return " ISNULL($field, $ifNull) "; // if MS SQL Server } function _insertid() { // SCOPE_IDENTITY() // Returns the last IDENTITY value inserted into an IDENTITY column in // the same scope. A scope is a module -- a stored procedure, trigger, // function, or batch. Thus, two statements are in the same scope if // they are in the same stored procedure, function, or batch. return $this->GetOne($this->identitySQL); } function _affectedrows() { return $this->GetOne('select @@rowcount'); } var $_dropSeqSQL = "drop table %s"; function CreateSequence($seq='adodbseq',$start=1) { $start -= 1; $this->Execute("create table $seq (id float(53))"); $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); if (!$ok) { $this->Execute('ROLLBACK TRANSACTION adodbseq'); return false; } $this->Execute('COMMIT TRANSACTION adodbseq'); return true; } function GenID($seq='adodbseq',$start=1) { //$this->debug=1; $this->Execute('BEGIN TRANSACTION adodbseq'); $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1"); if (!$ok) { $this->Execute("create table $seq (id float(53))"); $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); if (!$ok) { $this->Execute('ROLLBACK TRANSACTION adodbseq'); return false; } $this->Execute('COMMIT TRANSACTION adodbseq'); return $start; } $num = $this->GetOne("select id from $seq"); $this->Execute('COMMIT TRANSACTION adodbseq'); return $num; // in old implementation, pre 1.90, we returned GUID... //return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'"); } function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { if ($nrows > 0 && $offset <= 0) { $sql = preg_replace( '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql); $rs =& $this->Execute($sql,$inputarr); } else $rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); return $rs; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = ''; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { if ($s) $s .= '+'; $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= "datename(yyyy,$col)"; break; case 'M': $s .= "convert(char(3),$col,0)"; break; case 'm': $s .= "replace(str(month($col),2),' ','0')"; break; case 'Q': case 'q': $s .= "datename(quarter,$col)"; break; case 'D': case 'd': $s .= "replace(str(day($col),2),' ','0')"; break; case 'h': $s .= "substring(convert(char(14),$col,0),13,2)"; break; case 'H': $s .= "replace(str(datepart(hh,$col),2),' ','0')"; break; case 'i': $s .= "replace(str(datepart(mi,$col),2),' ','0')"; break; case 's': $s .= "replace(str(datepart(ss,$col),2),' ','0')"; break; case 'a': case 'A': $s .= "substring(convert(char(19),$col,0),18,2)"; break; default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } $s .= $this->qstr($ch); break; } } return $s; } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->Execute('BEGIN TRAN'); return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $this->Execute('COMMIT TRAN'); return true; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->Execute('ROLLBACK TRAN'); return true; } /* Usage: $this->BeginTrans(); $this->RowLock('table1,table2','table1.id=33 and table2.id=table1.id'); # lock row 33 for both tables # some operation on both tables table1 and table2 $this->CommitTrans(); See http://www.swynk.com/friends/achigrik/SQL70Locks.asp */ function RowLock($tables,$where) { if (!$this->transCnt) $this->BeginTrans(); return $this->GetOne("select top 1 null as ignore from $tables with (ROWLOCK,HOLDLOCK) where $where"); } function &MetaIndexes($table,$primary=false) { $table = $this->qstr($table); $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK, CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table ORDER BY O.name, I.Name, K.keyno"; global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } $rs = $this->Execute($sql); if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; if (!is_object($rs)) { return FALSE; } $indexes = array(); while ($row = $rs->FetchRow()) { if (!$primary && $row[5]) continue; $indexes[$row[0]]['unique'] = $row[6]; $indexes[$row[0]]['columns'][] = $row[1]; } return $indexes; } function MetaForeignKeys($table, $owner=false, $upper=false) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $table = $this->qstr(strtoupper($table)); $sql = "select object_name(constid) as constraint_name, col_name(fkeyid, fkey) as column_name, object_name(rkeyid) as referenced_table_name, col_name(rkeyid, rkey) as referenced_column_name from sysforeignkeys where upper(object_name(fkeyid)) = $table order by constraint_name, referenced_table_name, keyno"; $constraints =& $this->GetArray($sql); $ADODB_FETCH_MODE = $save; $arr = false; foreach($constraints as $constr) { //print_r($constr); $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3]; } if (!$arr) return false; $arr2 = false; foreach($arr as $k => $v) { foreach($v as $a => $b) { if ($upper) $a = strtoupper($a); $arr2[$a] = $b; } } return $arr2; } //From: Fernando Moreira function MetaDatabases() { if(@mssql_select_db("master")) { $qry=$this->metaDatabasesSQL; if($rs=@mssql_query($qry)){ $tmpAr=$ar=array(); while($tmpAr=@mssql_fetch_row($rs)) $ar[]=$tmpAr[0]; @mssql_select_db($this->databaseName); if(sizeof($ar)) return($ar); else return(false); } else { @mssql_select_db($this->databaseName); return(false); } } return(false); } // "Stein-Aksel Basma" // tested with MSSQL 2000 function &MetaPrimaryKeys($table) { global $ADODB_FETCH_MODE; $schema = ''; $this->_findschema($table,$schema); if (!$schema) $schema = $this->database; if ($schema) $schema = "and k.table_catalog like '$schema%'"; $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k, information_schema.table_constraints tc where tc.constraint_name = k.constraint_name and tc.constraint_type = 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position "; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $a = $this->GetCol($sql); $ADODB_FETCH_MODE = $savem; if ($a && sizeof($a)>0) return $a; return false; } function &MetaTables($ttype=false,$showSchema=false,$mask=false) { if ($mask) { $save = $this->metaTablesSQL; $mask = $this->qstr(($mask)); $this->metaTablesSQL .= " AND name like $mask"; } $ret =& ADOConnection::MetaTables($ttype,$showSchema); if ($mask) { $this->metaTablesSQL = $save; } return $ret; } function SelectDB($dbName) { $this->databaseName = $dbName; if ($this->_connectionID) { return @mssql_select_db($dbName); } else return false; } function ErrorMsg() { if (empty($this->_errorMsg)){ $this->_errorMsg = mssql_get_last_message(); } return $this->_errorMsg; } function ErrorNo() { if ($this->_logsql && $this->_errorCode !== false) return $this->_errorCode; if (empty($this->_errorMsg)) { $this->_errorMsg = mssql_get_last_message(); } $id = @mssql_query("select @@ERROR",$this->_connectionID); if (!$id) return false; $arr = mssql_fetch_array($id); @mssql_free_result($id); if (is_array($arr)) return $arr[0]; else return -1; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('mssql_pconnect')) return null; $this->_connectionID = mssql_connect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('mssql_pconnect')) return null; $this->_connectionID = mssql_pconnect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; // persistent connections can forget to rollback on crash, so we do it here. if ($this->autoRollback) { $cnt = $this->GetOne('select @@TRANCOUNT'); while (--$cnt >= 0) $this->Execute('ROLLBACK TRAN'); } if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } function Prepare($sql) { $sqlarr = explode('?',$sql); if (sizeof($sqlarr) <= 1) return $sql; $sql2 = $sqlarr[0]; for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) { $sql2 .= '@P'.($i-1) . $sqlarr[$i]; } return array($sql,$this->qstr($sql2),$max); } function PrepareSP($sql) { if (!$this->_has_mssql_init) { ADOConnection::outp( "PrepareSP: mssql_init only available since PHP 4.1.0"); return $sql; } $stmt = mssql_init($sql,$this->_connectionID); if (!$stmt) return $sql; return array($sql,$stmt); } /* Usage: $stmt = $db->PrepareSP('SP_RUNSOMETHING'); -- takes 2 params, @myid and @group # note that the parameter does not have @ in front! $db->Parameter($stmt,$id,'myid'); $db->Parameter($stmt,$group,'group',false,64); $db->Execute($stmt); @param $stmt Statement returned by Prepare() or PrepareSP(). @param $var PHP variable to bind to. Can set to null (for isNull support). @param $name Name of stored procedure variable name to bind to. @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. @param [$maxLen] Holds an maximum length of the variable. @param [$type] The data type of $var. Legal values depend on driver. See mssql_bind documentation at php.net. */ function Parameter(&$stmt, &$var, $name, $isOutput=false, $maxLen=4000, $type=false) { if (!$this->_has_mssql_init) { ADOConnection::outp( "Parameter: mssql_bind only available since PHP 4.1.0"); return $sql; } $isNull = is_null($var); // php 4.0.4 and above... if ($type === false) switch(gettype($var)) { default: case 'string': $type = SQLCHAR; break; case 'double': $type = SQLFLT8; break; case 'integer': $type = SQLINT4; break; case 'boolean': $type = SQLINT1; break; # SQLBIT not supported in 4.1.0 } if ($this->debug) { $prefix = ($isOutput) ? 'Out' : 'In'; $ztype = (empty($type)) ? 'false' : $type; ADOConnection::outp( "{$prefix}Parameter(\$stmt, \$php_var='$var', \$name='$name', \$maxLen=$maxLen, \$type=$ztype);"); } /* See http://phplens.com/lens/lensforum/msgs.php?id=7231 RETVAL is HARD CODED into php_mssql extension: The return value (a long integer value) is treated like a special OUTPUT parameter, called "RETVAL" (without the @). See the example at mssql_execute to see how it works. - type: one of this new supported PHP constants. SQLTEXT, SQLVARCHAR,SQLCHAR, SQLINT1,SQLINT2, SQLINT4, SQLBIT,SQLFLT8 */ if ($name !== 'RETVAL') $name = '@'.$name; return mssql_bind($stmt[1], $name, $var, $type, $isOutput, $isNull, $maxLen); } /* Unfortunately, it appears that mssql cannot handle varbinary > 255 chars So all your blobs must be of type "image". Remember to set in php.ini the following... ; Valid range 0 - 2147483647. Default = 4096. mssql.textlimit = 0 ; zero to pass through ; Valid range 0 - 2147483647. Default = 4096. mssql.textsize = 0 ; zero to pass through */ function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { if (strtoupper($blobtype) == 'CLOB') { $sql = "UPDATE $table SET $column='" . $val . "' WHERE $where"; return $this->Execute($sql) != false; } $sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where"; return $this->Execute($sql) != false; } // returns query ID if successful, otherwise false function _query($sql,$inputarr) { $this->_errorMsg = false; if (is_array($inputarr)) { # bind input params with sp_executesql: # see http://www.quest-pipelines.com/newsletter-v3/0402_F.htm # works only with sql server 7 and newer if (!is_array($sql)) $sql = $this->Prepare($sql); $params = ''; $decl = ''; $i = 0; foreach($inputarr as $v) { if ($decl) { $decl .= ', '; $params .= ', '; } if (is_string($v)) { $len = strlen($v); if ($len == 0) $len = 1; if ($len > 4000 ) { // NVARCHAR is max 4000 chars. Let's use NTEXT $decl .= "@P$i NTEXT"; } else { $decl .= "@P$i NVARCHAR($len)"; } $params .= "@P$i=N". (strncmp($v,"'",1)==0? $v : $this->qstr($v)); } else if (is_integer($v)) { $decl .= "@P$i INT"; $params .= "@P$i=".$v; } else if (is_float($v)) { $decl .= "@P$i FLOAT"; $params .= "@P$i=".$v; } else if (is_bool($v)) { $decl .= "@P$i INT"; # Used INT just in case BIT in not supported on the user's MSSQL version. It will cast appropriately. $params .= "@P$i=".(($v)?'1':'0'); # True == 1 in MSSQL BIT fields and acceptable for storing logical true in an int field } else { $decl .= "@P$i CHAR"; # Used char because a type is required even when the value is to be NULL. $params .= "@P$i=NULL"; } $i += 1; } $decl = $this->qstr($decl); if ($this->debug) ADOConnection::outp("sp_executesql N{$sql[1]},N$decl,$params"); $rez = mssql_query("sp_executesql N{$sql[1]},N$decl,$params"); } else if (is_array($sql)) { # PrepareSP() $rez = mssql_execute($sql[1]); } else { $rez = mssql_query($sql,$this->_connectionID); } return $rez; } // returns true or false function _close() { if ($this->transCnt) $this->RollbackTrans(); $rez = @mssql_close($this->_connectionID); $this->_connectionID = false; return $rez; } // mssql uses a default date like Dec 30 2000 12:00AM function UnixDate($v) { return ADORecordSet_array_mssql::UnixDate($v); } function UnixTimeStamp($v) { return ADORecordSet_array_mssql::UnixTimeStamp($v); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_mssql extends ADORecordSet { var $databaseType = "mssql"; var $canSeek = true; var $hasFetchAssoc; // see http://phplens.com/lens/lensforum/msgs.php?id=6083 // _mths works only in non-localised system function ADORecordset_mssql($id,$mode=false) { // freedts check... $this->hasFetchAssoc = function_exists('mssql_fetch_assoc'); if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; return $this->ADORecordSet($id,$mode); } function _initrs() { GLOBAL $ADODB_COUNTRECS; $this->_numOfRows = ($ADODB_COUNTRECS)? @mssql_num_rows($this->_queryID):-1; $this->_numOfFields = @mssql_num_fields($this->_queryID); } //Contributed by "Sven Axelsson" // get next resultset - requires PHP 4.0.5 or later function NextRecordSet() { if (!mssql_next_result($this->_queryID)) return false; $this->_inited = false; $this->bind = false; $this->_currentRow = -1; $this->Init(); return true; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode != ADODB_FETCH_NUM) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by fetchField() is retrieved. */ function FetchField($fieldOffset = -1) { if ($fieldOffset != -1) { return @mssql_fetch_field($this->_queryID, $fieldOffset); } else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ return @mssql_fetch_field($this->_queryID); } return null; } function _seek($row) { return @mssql_data_seek($this->_queryID, $row); } // speedup function MoveNext() { if ($this->EOF) return false; $this->_currentRow++; if ($this->fetchMode & ADODB_FETCH_ASSOC) { if ($this->fetchMode & ADODB_FETCH_NUM) { //ADODB_FETCH_BOTH mode $this->fields = @mssql_fetch_array($this->_queryID); } else { if ($this->hasFetchAssoc) {// only for PHP 4.2.0 or later $this->fields = @mssql_fetch_assoc($this->_queryID); } else { $flds = @mssql_fetch_array($this->_queryID); if (is_array($flds)) { $fassoc = array(); foreach($flds as $k => $v) { if (is_numeric($k)) continue; $fassoc[$k] = $v; } $this->fields = $fassoc; } else $this->fields = false; } } if (is_array($this->fields)) { if (ADODB_ASSOC_CASE == 0) { foreach($this->fields as $k=>$v) { $this->fields[strtolower($k)] = $v; } } else if (ADODB_ASSOC_CASE == 1) { foreach($this->fields as $k=>$v) { $this->fields[strtoupper($k)] = $v; } } } } else { $this->fields = @mssql_fetch_row($this->_queryID); } if ($this->fields) return true; $this->EOF = true; return false; } // INSERT UPDATE DELETE returns false even if no error occurs in 4.0.4 // also the date format has been changed from YYYY-mm-dd to dd MMM YYYY in 4.0.4. Idiot! function _fetch($ignore_fields=false) { if ($this->fetchMode & ADODB_FETCH_ASSOC) { if ($this->fetchMode & ADODB_FETCH_NUM) { //ADODB_FETCH_BOTH mode $this->fields = @mssql_fetch_array($this->_queryID); } else { if ($this->hasFetchAssoc) // only for PHP 4.2.0 or later $this->fields = @mssql_fetch_assoc($this->_queryID); else { $this->fields = @mssql_fetch_array($this->_queryID); if (@is_array($$this->fields)) { $fassoc = array(); foreach($$this->fields as $k => $v) { if (is_integer($k)) continue; $fassoc[$k] = $v; } $this->fields = $fassoc; } } } if (!$this->fields) { } else if (ADODB_ASSOC_CASE == 0) { foreach($this->fields as $k=>$v) { $this->fields[strtolower($k)] = $v; } } else if (ADODB_ASSOC_CASE == 1) { foreach($this->fields as $k=>$v) { $this->fields[strtoupper($k)] = $v; } } } else { $this->fields = @mssql_fetch_row($this->_queryID); } return $this->fields; } /* close() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed. */ function _close() { $rez = mssql_free_result($this->_queryID); $this->_queryID = false; return $rez; } // mssql uses a default date like Dec 30 2000 12:00AM function UnixDate($v) { return ADORecordSet_array_mssql::UnixDate($v); } function UnixTimeStamp($v) { return ADORecordSet_array_mssql::UnixTimeStamp($v); } } class ADORecordSet_array_mssql extends ADORecordSet_array { function ADORecordSet_array_mssql($id=-1,$mode=false) { $this->ADORecordSet_array($id,$mode); } // mssql uses a default date like Dec 30 2000 12:00AM function UnixDate($v) { if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixDate($v); global $ADODB_mssql_mths,$ADODB_mssql_date_order; //Dec 30 2000 12:00AM if ($ADODB_mssql_date_order == 'dmy') { if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4})|" ,$v, $rr)) { return parent::UnixDate($v); } if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; $theday = $rr[1]; $themth = substr(strtoupper($rr[2]),0,3); } else { if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})|" ,$v, $rr)) { return parent::UnixDate($v); } if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; $theday = $rr[2]; $themth = substr(strtoupper($rr[1]),0,3); } $themth = $ADODB_mssql_mths[$themth]; if ($themth <= 0) return false; // h-m-s-MM-DD-YY return mktime(0,0,0,$themth,$theday,$rr[3]); } function UnixTimeStamp($v) { if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixTimeStamp($v); global $ADODB_mssql_mths,$ADODB_mssql_date_order; //Dec 30 2000 12:00AM if ($ADODB_mssql_date_order == 'dmy') { if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|" ,$v, $rr)) return parent::UnixTimeStamp($v); if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; $theday = $rr[1]; $themth = substr(strtoupper($rr[2]),0,3); } else { if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|" ,$v, $rr)) return parent::UnixTimeStamp($v); if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; $theday = $rr[2]; $themth = substr(strtoupper($rr[1]),0,3); } $themth = $ADODB_mssql_mths[$themth]; if ($themth <= 0) return false; switch (strtoupper($rr[6])) { case 'P': if ($rr[4]<12) $rr[4] += 12; break; case 'A': if ($rr[4]==12) $rr[4] = 0; break; default: break; } // h-m-s-MM-DD-YY return mktime($rr[4],$rr[5],0,$themth,$theday,$rr[3]); } } /* Code Example 1: select object_name(constid) as constraint_name, object_name(fkeyid) as table_name, col_name(fkeyid, fkey) as column_name, object_name(rkeyid) as referenced_table_name, col_name(rkeyid, rkey) as referenced_column_name from sysforeignkeys where object_name(fkeyid) = x order by constraint_name, table_name, referenced_table_name, keyno Code Example 2: select constraint_name, column_name, ordinal_position from information_schema.key_column_usage where constraint_catalog = db_name() and table_name = x order by constraint_name, ordinal_position http://www.databasejournal.com/scripts/article.php/1440551 */ ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-mssqlpo.inc.php 777 0 0 3062 10142745762 21761 0_has_mssql_init) { ADOConnection::outp( "PrepareSP: mssql_init only available since PHP 4.1.0"); return $sql; } if (is_string($sql)) $sql = str_replace('||','+',$sql); $stmt = mssql_init($sql,$this->_connectionID); if (!$stmt) return $sql; return array($sql,$stmt); } function _query($sql,$inputarr) { if (is_string($sql)) $sql = str_replace('||','+',$sql); return ADODB_mssql::_query($sql,$inputarr); } } class ADORecordset_mssqlpo extends ADORecordset_mssql { var $databaseType = "mssqlpo"; function ADORecordset_mssqlpo($id,$mode=false) { $this->ADORecordset_mssql($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-mysql.inc.php 777 0 0 44376 10142745762 21465 0rsPrefix .= 'ext_'; } function ServerInfo() { $arr['description'] = ADOConnection::GetOne("select version()"); $arr['version'] = ADOConnection::_findvers($arr['description']); return $arr; } function IfNull( $field, $ifNull ) { return " IFNULL($field, $ifNull) "; // if MySQL } function &MetaTables($ttype=false,$showSchema=false,$mask=false) { $save = $this->metaTablesSQL; if ($showSchema && is_string($showSchema)) { $this->metaTablesSQL .= " from $showSchema"; } if ($mask) { $mask = $this->qstr($mask); $this->metaTablesSQL .= " like $mask"; } $ret =& ADOConnection::MetaTables($ttype,$showSchema); $this->metaTablesSQL = $save; return $ret; } function &MetaIndexes ($table, $primary = FALSE, $owner=false) { // save old fetch mode global $ADODB_FETCH_MODE; $false = false; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } // get index details $rs = $this->Execute(sprintf('SHOW INDEX FROM %s',$table)); // restore fetchmode if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; if (!is_object($rs)) { return $false; } $indexes = array (); // parse index data into array while ($row = $rs->FetchRow()) { if ($primary == FALSE AND $row[2] == 'PRIMARY') { continue; } if (!isset($indexes[$row[2]])) { $indexes[$row[2]] = array( 'unique' => ($row[1] == 0), 'columns' => array() ); } $indexes[$row[2]]['columns'][$row[3] - 1] = $row[4]; } // sort columns by order in the index foreach ( array_keys ($indexes) as $index ) { ksort ($indexes[$index]['columns']); } return $indexes; } // if magic quotes disabled, use mysql_real_escape_string() function qstr($s,$magic_quotes=false) { if (!$magic_quotes) { if (ADODB_PHPVER >= 0x4300) { if (is_resource($this->_connectionID)) return "'".mysql_real_escape_string($s,$this->_connectionID)."'"; } if ($this->replaceQuote[0] == '\\'){ $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); } return "'".str_replace("'",$this->replaceQuote,$s)."'"; } // undo magic quotes for " $s = str_replace('\\"','"',$s); return "'$s'"; } function _insertid() { return mysql_insert_id($this->_connectionID); } function GetOne($sql,$inputarr=false) { if (strncasecmp($sql,'sele',4) == 0) { $rs =& $this->SelectLimit($sql,1,-1,$inputarr); if ($rs) { $rs->Close(); if ($rs->EOF) return false; return reset($rs->fields); } } else { return ADOConnection::GetOne($sql,$inputarr); } return false; } function BeginTrans() { if ($this->debug) ADOConnection::outp("Transactions not supported in 'mysql' driver. Use 'mysqlt' or 'mysqli' driver"); } function _affectedrows() { return mysql_affected_rows($this->_connectionID); } // See http://www.mysql.com/doc/M/i/Miscellaneous_functions.html // Reference on Last_Insert_ID on the recommended way to simulate sequences var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);"; var $_genSeqSQL = "create table %s (id int not null)"; var $_genSeq2SQL = "insert into %s values (%s)"; var $_dropSeqSQL = "drop table %s"; function CreateSequence($seqname='adodbseq',$startID=1) { if (empty($this->_genSeqSQL)) return false; $u = strtoupper($seqname); $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); if (!$ok) return false; return $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1)); } function GenID($seqname='adodbseq',$startID=1) { // post-nuke sets hasGenID to false if (!$this->hasGenID) return false; $savelog = $this->_logsql; $this->_logsql = false; $getnext = sprintf($this->_genIDSQL,$seqname); $holdtransOK = $this->_transOK; // save the current status $rs = @$this->Execute($getnext); if (!$rs) { if ($holdtransOK) $this->_transOK = true; //if the status was ok before reset $u = strtoupper($seqname); $this->Execute(sprintf($this->_genSeqSQL,$seqname)); $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1)); $rs = $this->Execute($getnext); } $this->genID = mysql_insert_id($this->_connectionID); if ($rs) $rs->Close(); $this->_logsql = $savelog; return $this->genID; } function &MetaDatabases() { $qid = mysql_list_dbs($this->_connectionID); $arr = array(); $i = 0; $max = mysql_num_rows($qid); while ($i < $max) { $db = mysql_tablename($qid,$i); if ($db != 'mysql') $arr[] = $db; $i += 1; } return $arr; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = 'DATE_FORMAT('.$col.",'"; $concat = false; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { $ch = $fmt[$i]; switch($ch) { default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } /** FALL THROUGH */ case '-': case '/': $s .= $ch; break; case 'Y': case 'y': $s .= '%Y'; break; case 'M': $s .= '%b'; break; case 'm': $s .= '%m'; break; case 'D': case 'd': $s .= '%d'; break; case 'Q': case 'q': $s .= "'),Quarter($col)"; if ($len > $i+1) $s .= ",DATE_FORMAT($col,'"; else $s .= ",('"; $concat = true; break; case 'H': $s .= '%H'; break; case 'h': $s .= '%I'; break; case 'i': $s .= '%i'; break; case 's': $s .= '%s'; break; case 'a': case 'A': $s .= '%p'; break; } } $s.="')"; if ($concat) $s = "CONCAT($s)"; return $s; } // returns concatenated string // much easier to run "mysqld --ansi" or "mysqld --sql-mode=PIPES_AS_CONCAT" and use || operator function Concat() { $s = ""; $arr = func_get_args(); // suggestion by andrew005@mnogo.ru $s = implode(',',$arr); if (strlen($s) > 0) return "CONCAT($s)"; else return ''; } function OffsetDate($dayFraction,$date=false) { if (!$date) $date = $this->sysDate; return "from_unixtime(unix_timestamp($date)+($dayFraction)*24*3600)"; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (ADODB_PHPVER >= 0x4300) $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword, $this->forceNewConnect,$this->clientFlags); else if (ADODB_PHPVER >= 0x4200) $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword, $this->forceNewConnect); else $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (ADODB_PHPVER >= 0x4300) $this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword,$this->clientFlags); else $this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($this->autoRollback) $this->RollbackTrans(); if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { $this->forceNewConnect = true; return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename); } function &MetaColumns($table) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if (!is_object($rs)) { $false = false; return $false; } $retarr = array(); while (!$rs->EOF){ $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $type = $rs->fields[1]; // split type into type(length): $fld->scale = null; if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1; } elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; } else { $fld->type = $type; $fld->max_length = -1; } $fld->not_null = ($rs->fields[2] != 'YES'); $fld->primary_key = ($rs->fields[3] == 'PRI'); $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); $fld->binary = (strpos($type,'blob') !== false); $fld->unsigned = (strpos($type,'unsigned') !== false); if (!$fld->binary) { $d = $rs->fields[4]; if ($d != '' && $d != 'NULL') { $fld->has_default = true; $fld->default_value = $d; } else { $fld->has_default = false; } } if ($save == ADODB_FETCH_NUM) { $retarr[] = $fld; } else { $retarr[strtoupper($fld->name)] = $fld; } $rs->MoveNext(); } $rs->Close(); return $retarr; } // returns true or false function SelectDB($dbName) { $this->databaseName = $dbName; if ($this->_connectionID) { return @mysql_select_db($dbName,$this->_connectionID); } else return false; } // parameters use PostgreSQL convention, not MySQL function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0) { $offsetStr =($offset>=0) ? "$offset," : ''; // jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220 if ($nrows < 0) $nrows = '18446744073709551615'; if ($secs) $rs =& $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows",$inputarr); else $rs =& $this->Execute($sql." LIMIT $offsetStr$nrows",$inputarr); return $rs; } // returns queryID or false function _query($sql,$inputarr) { //global $ADODB_COUNTRECS; //if($ADODB_COUNTRECS) return mysql_query($sql,$this->_connectionID); //else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6 } /* Returns: the last error message from previous database operation */ function ErrorMsg() { if ($this->_logsql) return $this->_errorMsg; if (empty($this->_connectionID)) $this->_errorMsg = @mysql_error(); else $this->_errorMsg = @mysql_error($this->_connectionID); return $this->_errorMsg; } /* Returns: the last error number from previous database operation */ function ErrorNo() { if ($this->_logsql) return $this->_errorCode; if (empty($this->_connectionID)) return @mysql_errno(); else return @mysql_errno($this->_connectionID); } // returns true or false function _close() { @mysql_close($this->_connectionID); $this->_connectionID = false; } /* * Maximum size of C field */ function CharMax() { return 255; } /* * Maximum size of X field */ function TextMax() { return 4294967295; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_mysql extends ADORecordSet{ var $databaseType = "mysql"; var $canSeek = true; function ADORecordSet_mysql($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break; case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break; } $this->adodbFetchMode = $mode; $this->ADORecordSet($queryID); } function _initrs() { //GLOBAL $ADODB_COUNTRECS; // $this->_numOfRows = ($ADODB_COUNTRECS) ? @mysql_num_rows($this->_queryID):-1; $this->_numOfRows = @mysql_num_rows($this->_queryID); $this->_numOfFields = @mysql_num_fields($this->_queryID); } function &FetchField($fieldOffset = -1) { if ($fieldOffset != -1) { $o = @mysql_fetch_field($this->_queryID, $fieldOffset); $f = @mysql_field_flags($this->_queryID,$fieldOffset); $o->max_length = @mysql_field_len($this->_queryID,$fieldOffset); // suggested by: Jim Nicholson (jnich@att.com) //$o->max_length = -1; // mysql returns the max length less spaces -- so it is unrealiable $o->binary = (strpos($f,'binary')!== false); } else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ $o = @mysql_fetch_field($this->_queryID); $o->max_length = @mysql_field_len($this->_queryID); // suggested by: Jim Nicholson (jnich@att.com) //$o->max_length = -1; // mysql returns the max length less spaces -- so it is unrealiable } return $o; } function &GetRowAssoc($upper=true) { if ($this->fetchMode == MYSQL_ASSOC && !$upper) return $this->fields; $row =& ADORecordSet::GetRowAssoc($upper); return $row; } /* Use associative array to get fields array */ function Fields($colname) { // added @ by "Michael William Miller" if ($this->fetchMode != MYSQL_NUM) return @$this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _seek($row) { if ($this->_numOfRows == 0) return false; return @mysql_data_seek($this->_queryID,$row); } function MoveNext() { //return adodb_movenext($this); //if (defined('ADODB_EXTENSION')) return adodb_movenext($this); if (@$this->fields =& mysql_fetch_array($this->_queryID,$this->fetchMode)) { $this->_currentRow += 1; return true; } if (!$this->EOF) { $this->_currentRow += 1; $this->EOF = true; } return false; } function _fetch() { $this->fields = @mysql_fetch_array($this->_queryID,$this->fetchMode); return is_array($this->fields); } function _close() { @mysql_free_result($this->_queryID); $this->_queryID = false; } function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } $len = -1; // mysql max_length is not accurate switch (strtoupper($t)) { case 'STRING': case 'CHAR': case 'VARCHAR': case 'TINYBLOB': case 'TINYTEXT': case 'ENUM': case 'SET': if ($len <= $this->blobSize) return 'C'; case 'TEXT': case 'LONGTEXT': case 'MEDIUMTEXT': return 'X'; // php_mysql extension always returns 'blob' even if 'text' // so we have to check whether binary... case 'IMAGE': case 'LONGBLOB': case 'BLOB': case 'MEDIUMBLOB': return !empty($fieldobj->binary) ? 'B' : 'X'; case 'YEAR': case 'DATE': return 'D'; case 'TIME': case 'DATETIME': case 'TIMESTAMP': return 'T'; case 'INT': case 'INTEGER': case 'BIGINT': case 'TINYINT': case 'MEDIUMINT': case 'SMALLINT': if (!empty($fieldobj->primary_key)) return 'R'; else return 'I'; default: return 'N'; } } } class ADORecordSet_ext_mysql extends ADORecordSet_mysql { function ADORecordSet_ext_mysql($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break; case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break; } $this->adodbFetchMode = $mode; $this->ADORecordSet($queryID); } function MoveNext() { return @adodb_movenext($this); } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-mysqli.inc.php 777 0 0 50342 10142745764 21626 0_connectionID = @mysqli_init(); if (is_null($this->_connectionID)) { // mysqli_init only fails if insufficient memory if ($this->debug) ADOConnection::outp("mysqli_init() failed : " . $this->ErrorMsg()); return false; } // Set connection options // Not implemented now // mysqli_options($this->_connection,,); if (mysqli_real_connect($this->_connectionID, $argHostname, $argUsername, $argPassword, $argDatabasename, $this->port, $this->socket, $this->clientFlags)) { if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } else { if ($this->debug) ADOConnection::outp("Could't connect : " . $this->ErrorMsg()); return false; } } // returns true or false // How to force a persistent connection function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, true); } // When is this used? Close old connection first? // In _connect(), check $this->forceNewConnect? function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { $this->forceNewConnect = true; $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename); } function IfNull( $field, $ifNull ) { return " IFNULL($field, $ifNull) "; // if MySQL } function ServerInfo() { $arr['description'] = $this->GetOne("select version()"); $arr['version'] = ADOConnection::_findvers($arr['description']); return $arr; } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->Execute('SET AUTOCOMMIT=0'); $this->Execute('BEGIN'); return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $this->Execute('COMMIT'); $this->Execute('SET AUTOCOMMIT=1'); return true; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->Execute('ROLLBACK'); $this->Execute('SET AUTOCOMMIT=1'); return true; } // if magic quotes disabled, use mysql_real_escape_string() // From readme.htm: // Quotes a string to be sent to the database. The $magic_quotes_enabled // parameter may look funny, but the idea is if you are quoting a // string extracted from a POST/GET variable, then // pass get_magic_quotes_gpc() as the second parameter. This will // ensure that the variable is not quoted twice, once by qstr and once // by the magic_quotes_gpc. // //Eg. $s = $db->qstr(HTTP_GET_VARS['name'],get_magic_quotes_gpc()); function qstr($s, $magic_quotes = false) { if (!$magic_quotes) { if (PHP_VERSION >= 5) return "'" . mysqli_real_escape_string($this->_connectionID, $s) . "'"; if ($this->replaceQuote[0] == '\\') $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); return "'".str_replace("'",$this->replaceQuote,$s)."'"; } // undo magic quotes for " $s = str_replace('\\"','"',$s); return "'$s'"; } function _insertid() { $result = @mysqli_insert_id($this->_connectionID); if ($result == -1){ if ($this->debug) ADOConnection::outp("mysqli_insert_id() failed : " . $this->ErrorMsg()); } return $result; } // Only works for INSERT, UPDATE and DELETE query's function _affectedrows() { $result = @mysqli_affected_rows($this->_connectionID); if ($result == -1) { if ($this->debug) ADOConnection::outp("mysqli_affected_rows() failed : " . $this->ErrorMsg()); } return $result; } // See http://www.mysql.com/doc/M/i/Miscellaneous_functions.html // Reference on Last_Insert_ID on the recommended way to simulate sequences var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);"; var $_genSeqSQL = "create table %s (id int not null)"; var $_genSeq2SQL = "insert into %s values (%s)"; var $_dropSeqSQL = "drop table %s"; function CreateSequence($seqname='adodbseq',$startID=1) { if (empty($this->_genSeqSQL)) return false; $u = strtoupper($seqname); $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); if (!$ok) return false; return $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1)); } function GenID($seqname='adodbseq',$startID=1) { // post-nuke sets hasGenID to false if (!$this->hasGenID) return false; $getnext = sprintf($this->_genIDSQL,$seqname); $holdtransOK = $this->_transOK; // save the current status $rs = @$this->Execute($getnext); if (!$rs) { if ($holdtransOK) $this->_transOK = true; //if the status was ok before reset $u = strtoupper($seqname); $this->Execute(sprintf($this->_genSeqSQL,$seqname)); $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1)); $rs = $this->Execute($getnext); } $this->genID = mysqli_insert_id($this->_connectionID); if ($rs) $rs->Close(); return $this->genID; } function &MetaDatabases() { $query = "SHOW DATABASES"; $ret =& $this->Execute($query); return $ret; } function &MetaIndexes ($table, $primary = FALSE) { // save old fetch mode global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } // get index details $rs = $this->Execute(sprintf('SHOW INDEXES FROM %s',$table)); // restore fetchmode if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; if (!is_object($rs)) { return FALSE; } $indexes = array (); // parse index data into array while ($row = $rs->FetchRow()) { if ($primary == FALSE AND $row[2] == 'PRIMARY') { continue; } if (!isset($indexes[$row[2]])) { $indexes[$row[2]] = array( 'unique' => ($row[1] == 0), 'columns' => array() ); } $indexes[$row[2]]['columns'][$row[3] - 1] = $row[4]; } // sort columns by order in the index foreach ( array_keys ($indexes) as $index ) { ksort ($indexes[$index]['columns']); } return $indexes; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = 'DATE_FORMAT('.$col.",'"; $concat = false; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= '%Y'; break; case 'Q': case 'q': $s .= "'),Quarter($col)"; if ($len > $i+1) $s .= ",DATE_FORMAT($col,'"; else $s .= ",('"; $concat = true; break; case 'M': $s .= '%b'; break; case 'm': $s .= '%m'; break; case 'D': case 'd': $s .= '%d'; break; case 'H': $s .= '%H'; break; case 'h': $s .= '%I'; break; case 'i': $s .= '%i'; break; case 's': $s .= '%s'; break; case 'a': case 'A': $s .= '%p'; break; default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } $s .= $ch; break; } } $s.="')"; if ($concat) $s = "CONCAT($s)"; return $s; } // returns concatenated string // much easier to run "mysqld --ansi" or "mysqld --sql-mode=PIPES_AS_CONCAT" and use || operator function Concat() { $s = ""; $arr = func_get_args(); // suggestion by andrew005@mnogo.ru $s = implode(',',$arr); if (strlen($s) > 0) return "CONCAT($s)"; else return ''; } // dayFraction is a day in floating point function OffsetDate($dayFraction,$date=false) { if (!$date) $date = $this->sysDate; return "from_unixtime(unix_timestamp($date)+($dayFraction)*24*3600)"; } function &MetaColumns($table) { if (!$this->metaColumnsSQL) return false; global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if (!is_object($rs)) return false; $retarr = array(); while (!$rs->EOF) { $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $type = $rs->fields[1]; // split type into type(length): $fld->scale = null; if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1; } elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; } else { $fld->type = $type; $fld->max_length = -1; } $fld->not_null = ($rs->fields[2] != 'YES'); $fld->primary_key = ($rs->fields[3] == 'PRI'); $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); $fld->binary = (strpos($type,'blob') !== false); $fld->unsigned = (strpos($type,'unsigned') !== false); if (!$fld->binary) { $d = $rs->fields[4]; if ($d != '' && $d != 'NULL') { $fld->has_default = true; $fld->default_value = $d; } else { $fld->has_default = false; } } if ($save == ADODB_FETCH_NUM) { $retarr[] = $fld; } else { $retarr[strtoupper($fld->name)] = $fld; } $rs->MoveNext(); } $rs->Close(); return $retarr; } // returns true or false function SelectDB($dbName) { // $this->_connectionID = $this->mysqli_resolve_link($this->_connectionID); $this->databaseName = $dbName; if ($this->_connectionID) { $result = @mysqli_select_db($this->_connectionID, $dbName); if (!$result) { ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->ErrorMsg()); } return $result; } return false; } // parameters use PostgreSQL convention, not MySQL function &SelectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false, $arg3 = false, $secs = 0) { $offsetStr = ($offset >= 0) ? "$offset," : ''; if ($secs) $rs =& $this->CacheExecute($secs, $sql . " LIMIT $offsetStr$nrows" , $inputarr , $arg3); else $rs =& $this->Execute($sql . " LIMIT $offsetStr$nrows" , $inputarr , $arg3); return $rs; } function Prepare($sql) { return $sql; $stmt = $this->_connectionID->prepare($sql); if (!$stmt) { echo $this->ErrorMsg(); return $sql; } return array($sql,$stmt); } // returns queryID or false function _query($sql, $inputarr) { global $ADODB_COUNTRECS; if (is_array($sql)) { $stmt = $sql[1]; $a = ''; foreach($inputarr as $k => $v) { if (is_string($v)) $a .= 's'; else if (is_integer($v)) $a .= 'i'; else $a .= 'd'; } $fnarr =& array_merge( array($stmt,$a) , $inputarr); $ret = call_user_func_array('mysqli_stmt_bind_param',$fnarr); $ret = mysqli_stmt_execute($stmt); return $ret; } if (!$mysql_res = mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) { if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg()); return false; } return $mysql_res; } /* Returns: the last error message from previous database operation */ function ErrorMsg() { if (empty($this->_connectionID)) $this->_errorMsg = @mysqli_error(); else $this->_errorMsg = @mysqli_error($this->_connectionID); return $this->_errorMsg; } /* Returns: the last error number from previous database operation */ function ErrorNo() { if (empty($this->_connectionID)) return @mysqli_errno(); else return @mysqli_errno($this->_connectionID); } // returns true or false function _close() { @mysqli_close($this->_connectionID); $this->_connectionID = false; } /* * Maximum size of C field */ function CharMax() { return 255; } /* * Maximum size of X field */ function TextMax() { return 4294967295; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_mysqli extends ADORecordSet{ var $databaseType = "mysqli"; var $canSeek = true; function ADORecordSet_mysqli($queryID, $mode = false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = MYSQLI_NUM; break; case ADODB_FETCH_ASSOC: $this->fetchMode = MYSQLI_ASSOC; break; case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH: default: $this->fetchMode = MYSQLI_BOTH; break; } $this->adodbFetchMode = $mode; $this->ADORecordSet($queryID); } function _initrs() { global $ADODB_COUNTRECS; $this->_numOfRows = $ADODB_COUNTRECS ? @mysqli_num_rows($this->_queryID) : -1; $this->_numOfFields = @mysqli_num_fields($this->_queryID); } function &FetchField($fieldOffset = -1) { $fieldnr = $fieldOffset; if ($fieldOffset != -1) { $fieldOffset = mysqli_field_seek($this->_queryID, $fieldnr); } $o = mysqli_fetch_field($this->_queryID); return $o; } function &GetRowAssoc($upper = true) { if ($this->fetchMode == MYSQLI_ASSOC && !$upper) return $this->fields; $row =& ADORecordSet::GetRowAssoc($upper); return $row; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode != MYSQLI_NUM) return @$this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i = 0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _seek($row) { if ($this->_numOfRows == 0) return false; if ($row < 0) return false; mysqli_data_seek($this->_queryID, $row); $this->EOF = false; return true; } // 10% speedup to move MoveNext to child class // This is the only implementation that works now (23-10-2003). // Other functions return no or the wrong results. function MoveNext() { if ($this->EOF) return false; $this->_currentRow++; $this->fields = @mysqli_fetch_array($this->_queryID,$this->fetchMode); if (is_array($this->fields)) return true; $this->EOF = true; return false; } function _fetch() { $this->fields = mysqli_fetch_array($this->_queryID,$this->fetchMode); return is_array($this->fields); } function _close() { mysqli_free_result($this->_queryID); $this->_queryID = false; } /* 0 = MYSQLI_TYPE_DECIMAL 1 = MYSQLI_TYPE_CHAR 1 = MYSQLI_TYPE_TINY 2 = MYSQLI_TYPE_SHORT 3 = MYSQLI_TYPE_LONG 4 = MYSQLI_TYPE_FLOAT 5 = MYSQLI_TYPE_DOUBLE 6 = MYSQLI_TYPE_NULL 7 = MYSQLI_TYPE_TIMESTAMP 8 = MYSQLI_TYPE_LONGLONG 9 = MYSQLI_TYPE_INT24 10 = MYSQLI_TYPE_DATE 11 = MYSQLI_TYPE_TIME 12 = MYSQLI_TYPE_DATETIME 13 = MYSQLI_TYPE_YEAR 14 = MYSQLI_TYPE_NEWDATE 247 = MYSQLI_TYPE_ENUM 248 = MYSQLI_TYPE_SET 249 = MYSQLI_TYPE_TINY_BLOB 250 = MYSQLI_TYPE_MEDIUM_BLOB 251 = MYSQLI_TYPE_LONG_BLOB 252 = MYSQLI_TYPE_BLOB 253 = MYSQLI_TYPE_VAR_STRING 254 = MYSQLI_TYPE_STRING 255 = MYSQLI_TYPE_GEOMETRY */ function MetaType($t, $len = -1, $fieldobj = false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } $len = -1; // mysql max_length is not accurate switch (strtoupper($t)) { /* case 'STRING': case 'CHAR': case 'VARCHAR': case 'TINYBLOB': case 'TINYTEXT': case 'ENUM': case 'SET': */ case MYSQLI_TYPE_TINY_BLOB : case MYSQLI_TYPE_CHAR : case MYSQLI_TYPE_STRING : case MYSQLI_TYPE_ENUM : case MYSQLI_TYPE_SET : case 253 : if ($len <= $this->blobSize) return 'C'; /*case 'TEXT': case 'LONGTEXT': case 'MEDIUMTEXT':*/ return 'X'; // php_mysql extension always returns 'blob' even if 'text' // so we have to check whether binary... /*case 'IMAGE': case 'LONGBLOB': case 'BLOB': case 'MEDIUMBLOB':*/ case MYSQLI_TYPE_BLOB : case MYSQLI_TYPE_LONG_BLOB : case MYSQLI_TYPE_MEDIUM_BLOB : return !empty($fieldobj->binary) ? 'B' : 'X'; /*case 'YEAR': case 'DATE': */ case MYSQLI_TYPE_DATE : case MYSQLI_TYPE_YEAR : return 'D'; /*case 'TIME': case 'DATETIME': case 'TIMESTAMP':*/ case MYSQLI_TYPE_DATETIME : case MYSQLI_TYPE_NEWDATE : case MYSQLI_TYPE_TIME : case MYSQLI_TYPE_TIMESTAMP : return 'T'; /*case 'INT': case 'INTEGER': case 'BIGINT': case 'TINYINT': case 'MEDIUMINT': case 'SMALLINT': */ case MYSQLI_TYPE_INT24 : case MYSQLI_TYPE_LONG : case MYSQLI_TYPE_LONGLONG : case MYSQLI_TYPE_SHORT : case MYSQLI_TYPE_TINY : if (!empty($fieldobj->primary_key)) return 'R'; return 'I'; /* // Added floating-point types // Maybe not necessery. case 'FLOAT': case 'DOUBLE': // case 'DOUBLE PRECISION': case 'DECIMAL': case 'DEC': case 'FIXED':*/ default: if (!is_numeric($t)) echo "

--- Error in type matching $t -----

"; return 'N'; } } // function } // rs class } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-mysqlt.inc.php 777 0 0 5703 10142745764 21622 0 Requires mysql client. Works on Windows and Unix. */ // security - hide paths if (!defined('ADODB_DIR')) die(); include_once(ADODB_DIR."/drivers/adodb-mysql.inc.php"); class ADODB_mysqlt extends ADODB_mysql { var $databaseType = 'mysqlt'; var $ansiOuter = true; // for Version 3.23.17 or later var $hasTransactions = true; var $autoRollback = true; // apparently mysql does not autorollback properly function ADODB_mysqlt() { global $ADODB_EXTENSION; if ($ADODB_EXTENSION) $this->rsPrefix .= 'ext_'; } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->Execute('SET AUTOCOMMIT=0'); $this->Execute('BEGIN'); return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $this->Execute('COMMIT'); $this->Execute('SET AUTOCOMMIT=1'); return true; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->Execute('ROLLBACK'); $this->Execute('SET AUTOCOMMIT=1'); return true; } } class ADORecordSet_mysqlt extends ADORecordSet_mysql{ var $databaseType = "mysqlt"; function ADORecordSet_mysqlt($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break; case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break; } $this->ADORecordSet($queryID); } function MoveNext() { if (@$this->fields =& mysql_fetch_array($this->_queryID,$this->fetchMode)) { $this->_currentRow += 1; return true; } if (!$this->EOF) { $this->_currentRow += 1; $this->EOF = true; } return false; } } class ADORecordSet_ext_mysqlt extends ADORecordSet_mysqlt { function ADORecordSet_ext_mysqli($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break; case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break; } $this->ADORecordSet($queryID); } function MoveNext() { return adodb_movenext($this); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-netezza.inc.php 777 0 0 12250 10142745764 21764 0 0 ORDER BY attnum"; var $metaColumnsSQL1 = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum"; // netezza doesn't have keys. it does have distributions, so maybe this is // something that can be pulled from the system tables var $metaKeySQL = ""; var $hasAffectedRows = true; var $hasLimit = true; var $true = 't'; // string that represents TRUE for a database var $false = 'f'; // string that represents FALSE for a database var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt. var $ansiOuter = true; var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4 // http://bugs.php.net/bug.php?id=25404 function ADODB_netezza() { } function &MetaColumns($table,$upper=true) { // Changed this function to support Netezza which has no concept of keys // could posisbly work on other things from the system table later. global $ADODB_FETCH_MODE; $table = strtolower($table); $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs =& $this->Execute(sprintf($this->metaColumnsSQL,$table,$table)); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if ($rs === false) return false; $retarr = array(); while (!$rs->EOF) { $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; // since we're returning type and length as one string, // split them out here. if ($first = strstr($rs->fields[1], "(")) { $fld->max_length = trim($first, "()"); } else { $fld->max_length = -1; } if ($first = strpos($rs->fields[1], "(")) { $fld->type = substr($rs->fields[1], 0, $first); } else { $fld->type = $rs->fields[1]; } switch ($fld->type) { case "byteint": case "boolean": $fld->max_length = 1; break; case "smallint": $fld->max_length = 2; break; case "integer": case "numeric": case "date": $fld->max_length = 4; break; case "bigint": case "time": case "timestamp": $fld->max_length = 8; break; case "timetz": case "time with time zone": $fld->max_length = 12; break; } if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_netezza extends ADORecordSet_postgres64 { var $databaseType = "netezza"; var $canSeek = true; function ADORecordSet_netezza($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break; case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = PGSQL_BOTH; break; } $this->ADORecordSet($queryID); } // _initrs modified to disable blob handling function _initrs() { global $ADODB_COUNTRECS; $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_numrows($this->_queryID):-1; $this->_numOfFields = @pg_numfields($this->_queryID); } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-oci8.inc.php 777 0 0 114040 10142745764 21166 0 13 Nov 2000 jlim - removed all ora_* references. */ // security - hide paths if (!defined('ADODB_DIR')) die(); /* NLS_Date_Format Allows you to use a date format other than the Oracle Lite default. When a literal character string appears where a date value is expected, the Oracle Lite database tests the string to see if it matches the formats of Oracle, SQL-92, or the value specified for this parameter in the POLITE.INI file. Setting this parameter also defines the default format used in the TO_CHAR or TO_DATE functions when no other format string is supplied. For Oracle the default is dd-mon-yy or dd-mon-yyyy, and for SQL-92 the default is yy-mm-dd or yyyy-mm-dd. Using 'RR' in the format forces two-digit years less than or equal to 49 to be interpreted as years in the 21st century (20002049), and years over 50 as years in the 20th century (19501999). Setting the RR format as the default for all two-digit year entries allows you to become year-2000 compliant. For example: NLS_DATE_FORMAT='RR-MM-DD' You can also modify the date format using the ALTER SESSION command. */ # define the LOB descriptor type for the given type # returns false if no LOB descriptor function oci_lob_desc($type) { switch ($type) { case OCI_B_BFILE: $result = OCI_D_FILE; break; case OCI_B_CFILEE: $result = OCI_D_FILE; break; case OCI_B_CLOB: $result = OCI_D_LOB; break; case OCI_B_BLOB: $result = OCI_D_LOB; break; case OCI_B_ROWID: $result = OCI_D_ROWID; break; default: $result = false; break; } return $result; } class ADODB_oci8 extends ADOConnection { var $databaseType = 'oci8'; var $dataProvider = 'oci8'; var $replaceQuote = "''"; // string to use to replace quotes var $concat_operator='||'; var $sysDate = "TRUNC(SYSDATE)"; var $sysTimeStamp = 'SYSDATE'; var $metaDatabasesSQL = "SELECT USERNAME FROM ALL_USERS WHERE USERNAME NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN') ORDER BY 1"; var $_stmt; var $_commit = OCI_COMMIT_ON_SUCCESS; var $_initdate = true; // init date to YYYY-MM-DD var $metaTablesSQL = "select table_name,table_type from cat where table_type in ('TABLE','VIEW')"; var $metaColumnsSQL = "select cname,coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net var $_bindInputArray = true; var $hasGenID = true; var $_genIDSQL = "SELECT (%s.nextval) FROM DUAL"; var $_genSeqSQL = "CREATE SEQUENCE %s START WITH %s"; var $_dropSeqSQL = "DROP SEQUENCE %s"; var $hasAffectedRows = true; var $random = "abs(mod(DBMS_RANDOM.RANDOM,10000001)/10000000)"; var $noNullStrings = false; var $connectSID = false; var $_bind = false; var $_hasOCIFetchStatement = false; var $_getarray = false; // currently not working var $leftOuter = ''; // oracle wierdness, $col = $value (+) for LEFT OUTER, $col (+)= $value for RIGHT OUTER var $session_sharing_force_blob = false; // alter session on updateblob if set to true var $firstrows = true; // enable first rows optimization on SelectLimit() var $selectOffsetAlg1 = 100; // when to use 1st algorithm of selectlimit. var $NLS_DATE_FORMAT = 'YYYY-MM-DD'; // To include time, use 'RRRR-MM-DD HH24:MI:SS' var $useDBDateFormatForTextInput=false; var $datetime = false; // MetaType('DATE') returns 'D' (datetime==false) or 'T' (datetime == true) var $_refLOBs = array(); // var $ansiOuter = true; // if oracle9 function ADODB_oci8() { $this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200; if (defined('ADODB_EXTENSION')) $this->rsPrefix .= 'ext_'; } /* Function &MetaColumns($table) added by smondino@users.sourceforge.net*/ function &MetaColumns($table) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if (!$rs) { $false = false; return $false; } $retarr = array(); while (!$rs->EOF) { //print_r($rs->fields); $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; $fld->max_length = $rs->fields[2]; $fld->scale = $rs->fields[3]; if ($rs->fields[1] == 'NUMBER' && $rs->fields[3] == 0) { $fld->type ='INT'; $fld->max_length = $rs->fields[4]; } $fld->not_null = (strncmp($rs->fields[5], 'NOT',3) === 0); $fld->binary = (strpos($fld->type,'BLOB') !== false); $fld->default_value = $rs->fields[6]; if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; else $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } function Time() { $rs =& $this->Execute("select TO_CHAR($this->sysTimeStamp,'YYYY-MM-DD HH24:MI:SS') from dual"); if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields)); return false; } /* Multiple modes of connection are supported: a. Local Database $conn->Connect(false,'scott','tiger'); b. From tnsnames.ora $conn->Connect(false,'scott','tiger',$tnsname); $conn->Connect($tnsname,'scott','tiger'); c. Server + service name $conn->Connect($serveraddress,'scott,'tiger',$service_name); d. Server + SID $conn->connectSID = true; $conn->Connect($serveraddress,'scott,'tiger',$SID); Example TNSName: --------------- NATSOFT.DOMAIN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = kermit)(PORT = 1523)) ) (CONNECT_DATA = (SERVICE_NAME = natsoft.domain) ) ) There are 3 connection modes, 0 = non-persistent, 1 = persistent, 2 = force new connection */ function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$mode=0) { if (!function_exists('OCIPLogon')) return null; $this->_errorMsg = false; $this->_errorCode = false; if($argHostname) { // added by Jorma Tuomainen if (empty($argDatabasename)) $argDatabasename = $argHostname; else { if(strpos($argHostname,":")) { $argHostinfo=explode(":",$argHostname); $argHostname=$argHostinfo[0]; $argHostport=$argHostinfo[1]; } else { $argHostport="1521"; } if ($this->connectSID) { $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))"; } else $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))"; } } //if ($argHostname) print "

Connect: 1st argument should be left blank for $this->databaseType

"; if ($mode==1) { $this->_connectionID = ($this->charSet) ? OCIPLogon($argUsername,$argPassword, $argDatabasename) : OCIPLogon($argUsername,$argPassword, $argDatabasename, $this->charSet) ; if ($this->_connectionID && $this->autoRollback) OCIrollback($this->_connectionID); } else if ($mode==2) { $this->_connectionID = ($this->charSet) ? OCINLogon($argUsername,$argPassword, $argDatabasename) : OCINLogon($argUsername,$argPassword, $argDatabasename, $this->charSet); } else { $this->_connectionID = ($this->charSet) ? OCILogon($argUsername,$argPassword, $argDatabasename) : OCILogon($argUsername,$argPassword, $argDatabasename,$this->charSet); } if ($this->_connectionID === false) return false; if ($this->_initdate) { $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='".$this->NLS_DATE_FORMAT."'"); } // looks like: // Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production // $vers = OCIServerVersion($this->_connectionID); // if (strpos($vers,'8i') !== false) $this->ansiOuter = true; return true; } function ServerInfo() { $arr['compat'] = $this->GetOne('select value from sys.database_compatible_level'); $arr['description'] = @OCIServerVersion($this->_connectionID); $arr['version'] = ADOConnection::_findvers($arr['description']); return $arr; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,1); } // returns true or false function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,2); } function _affectedrows() { if (is_resource($this->_stmt)) return @OCIRowCount($this->_stmt); return 0; } function IfNull( $field, $ifNull ) { return " NVL($field, $ifNull) "; // if Oracle } // format and return date string in database date format function DBDate($d) { if (empty($d) && $d !== 0) return 'null'; if (is_string($d)) $d = ADORecordSet::UnixDate($d); return "TO_DATE(".adodb_date($this->fmtDate,$d).",'".$this->NLS_DATE_FORMAT."')"; } // format and return date string in database timestamp format function DBTimeStamp($ts) { if (empty($ts) && $ts !== 0) return 'null'; if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts); return 'TO_DATE('.adodb_date($this->fmtTimeStamp,$ts).",'RRRR-MM-DD, HH:MI:SS AM')"; } function RowLock($tables,$where) { if ($this->autoCommit) $this->BeginTrans(); return $this->GetOne("select 1 as ignore from $tables where $where for update"); } function &MetaTables($ttype=false,$showSchema=false,$mask=false) { if ($mask) { $save = $this->metaTablesSQL; $mask = $this->qstr(strtoupper($mask)); $this->metaTablesSQL .= " AND table_name like $mask"; } $ret =& ADOConnection::MetaTables($ttype,$showSchema); if ($mask) { $this->metaTablesSQL = $save; } return $ret; } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->autoCommit = false; $this->_commit = OCI_DEFAULT; return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $ret = OCIcommit($this->_connectionID); $this->_commit = OCI_COMMIT_ON_SUCCESS; $this->autoCommit = true; return $ret; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $ret = OCIrollback($this->_connectionID); $this->_commit = OCI_COMMIT_ON_SUCCESS; $this->autoCommit = true; return $ret; } function SelectDB($dbName) { return false; } function ErrorMsg() { if ($this->_errorMsg !== false) return $this->_errorMsg; if (is_resource($this->_stmt)) $arr = @OCIerror($this->_stmt); if (empty($arr)) { $arr = @OCIerror($this->_connectionID); if ($arr === false) $arr = @OCIError(); if ($arr === false) return ''; } $this->_errorMsg = $arr['message']; $this->_errorCode = $arr['code']; return $this->_errorMsg; } function ErrorNo() { if ($this->_errorCode !== false) return $this->_errorCode; if (is_resource($this->_stmt)) $arr = @OCIError($this->_stmt); if (empty($arr)) { $arr = @OCIError($this->_connectionID); if ($arr == false) $arr = @OCIError(); if ($arr == false) return ''; } $this->_errorMsg = $arr['message']; $this->_errorCode = $arr['code']; return $arr['code']; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = 'TO_CHAR('.$col.",'"; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= 'YYYY'; break; case 'Q': case 'q': $s .= 'Q'; break; case 'M': $s .= 'Mon'; break; case 'm': $s .= 'MM'; break; case 'D': case 'd': $s .= 'DD'; break; case 'H': $s.= 'HH24'; break; case 'h': $s .= 'HH'; break; case 'i': $s .= 'MI'; break; case 's': $s .= 'SS'; break; case 'a': case 'A': $s .= 'AM'; break; default: // handle escape characters... if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } if (strpos('-/.:;, ',$ch) !== false) $s .= $ch; else $s .= '"'.$ch.'"'; } } return $s. "')"; } /* This algorithm makes use of a. FIRST_ROWS hint The FIRST_ROWS hint explicitly chooses the approach to optimize response time, that is, minimum resource usage to return the first row. Results will be returned as soon as they are identified. b. Uses rownum tricks to obtain only the required rows from a given offset. As this uses complicated sql statements, we only use this if the $offset >= 100. This idea by Tomas V V Cox. This implementation does not appear to work with oracle 8.0.5 or earlier. Comment out this function then, and the slower SelectLimit() in the base class will be used. */ function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { // seems that oracle only supports 1 hint comment in 8i if ($this->firstrows) { if (strpos($sql,'/*+') !== false) $sql = str_replace('/*+ ','/*+FIRST_ROWS ',$sql); else $sql = preg_replace('/^[ \t\n]*select/i','SELECT /*+FIRST_ROWS*/',$sql); } if ($offset < $this->selectOffsetAlg1) { if ($nrows > 0) { if ($offset > 0) $nrows += $offset; //$inputarr['adodb_rownum'] = $nrows; if ($this->databaseType == 'oci8po') { $sql = "select * from (".$sql.") where rownum <= ?"; } else { $sql = "select * from (".$sql.") where rownum <= :adodb_offset"; } $inputarr['adodb_offset'] = $nrows; $nrows = -1; } // note that $nrows = 0 still has to work ==> no rows returned $rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); return $rs; } else { // Algorithm by Tomas V V Cox, from PEAR DB oci8.php // Let Oracle return the name of the columns $q_fields = "SELECT * FROM (".$sql.") WHERE NULL = NULL"; $false = false; if (! $stmt_arr = $this->Prepare($q_fields)) { return $false; } $stmt = $stmt_arr[1]; if (is_array($inputarr)) { foreach($inputarr as $k => $v) { if (is_array($v)) { if (sizeof($v) == 2) // suggested by g.giunta@libero. OCIBindByName($stmt,":$k",$inputarr[$k][0],$v[1]); else OCIBindByName($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]); } else { $len = -1; if ($v === ' ') $len = 1; if (isset($bindarr)) { // is prepared sql, so no need to ocibindbyname again $bindarr[$k] = $v; } else { // dynamic sql, so rebind every time OCIBindByName($stmt,":$k",$inputarr[$k],$len); } } } } if (!OCIExecute($stmt, OCI_DEFAULT)) { OCIFreeStatement($stmt); return $false; } $ncols = OCINumCols($stmt); for ( $i = 1; $i <= $ncols; $i++ ) { $cols[] = '"'.OCIColumnName($stmt, $i).'"'; } $result = false; OCIFreeStatement($stmt); $fields = implode(',', $cols); $nrows += $offset; $offset += 1; // in Oracle rownum starts at 1 if ($this->databaseType == 'oci8po') { $sql = "SELECT $fields FROM". "(SELECT rownum as adodb_rownum, $fields FROM". " ($sql) WHERE rownum <= ?". ") WHERE adodb_rownum >= ?"; } else { $sql = "SELECT $fields FROM". "(SELECT rownum as adodb_rownum, $fields FROM". " ($sql) WHERE rownum <= :adodb_nrows". ") WHERE adodb_rownum >= :adodb_offset"; } $inputarr['adodb_nrows'] = $nrows; $inputarr['adodb_offset'] = $offset; if ($secs2cache>0) $rs =& $this->CacheExecute($secs2cache, $sql,$inputarr); else $rs =& $this->Execute($sql,$inputarr); return $rs; } } /** * Usage: * Store BLOBs and CLOBs * * Example: to store $var in a blob * * $conn->Execute('insert into TABLE (id,ablob) values(12,empty_blob())'); * $conn->UpdateBlob('TABLE', 'ablob', $varHoldingBlob, 'ID=12', 'BLOB'); * * $blobtype supports 'BLOB' and 'CLOB', but you need to change to 'empty_clob()'. * * to get length of LOB: * select DBMS_LOB.GETLENGTH(ablob) from TABLE * * If you are using CURSOR_SHARING = force, it appears this will case a segfault * under oracle 8.1.7.0. Run: * $db->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT'); * before UpdateBlob() then... */ function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { //if (strlen($val) < 4000) return $this->Execute("UPDATE $table SET $column=:blob WHERE $where",array('blob'=>$val)) != false; switch(strtoupper($blobtype)) { default: ADOConnection::outp("UpdateBlob: Unknown blobtype=$blobtype"); return false; case 'BLOB': $type = OCI_B_BLOB; break; case 'CLOB': $type = OCI_B_CLOB; break; } if ($this->databaseType == 'oci8po') $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO ?"; else $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO :blob"; $desc = OCINewDescriptor($this->_connectionID, OCI_D_LOB); $arr['blob'] = array($desc,-1,$type); if ($this->session_sharing_force_blob) $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT'); $commit = $this->autoCommit; if ($commit) $this->BeginTrans(); $rs = $this->Execute($sql,$arr); if ($rez = !empty($rs)) $desc->save($val); $desc->free(); if ($commit) $this->CommitTrans(); if ($this->session_sharing_force_blob) $this->Execute('ALTER SESSION SET CURSOR_SHARING=FORCE'); if ($rez) $rs->Close(); return $rez; } /** * Usage: store file pointed to by $var in a blob */ function UpdateBlobFile($table,$column,$val,$where,$blobtype='BLOB') { switch(strtoupper($blobtype)) { default: ADOConnection::outp( "UpdateBlob: Unknown blobtype=$blobtype"); return false; case 'BLOB': $type = OCI_B_BLOB; break; case 'CLOB': $type = OCI_B_CLOB; break; } if ($this->databaseType == 'oci8po') $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO ?"; else $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO :blob"; $desc = OCINewDescriptor($this->_connectionID, OCI_D_LOB); $arr['blob'] = array($desc,-1,$type); $this->BeginTrans(); $rs = ADODB_oci8::Execute($sql,$arr); if ($rez = !empty($rs)) $desc->savefile($val); $desc->free(); $this->CommitTrans(); if ($rez) $rs->Close(); return $rez; } /* Example of usage: $stmt = $this->Prepare('insert into emp (empno, ename) values (:empno, :ename)'); */ function Prepare($sql,$cursor=false) { static $BINDNUM = 0; $stmt = OCIParse($this->_connectionID,$sql); if (!$stmt) return false; $BINDNUM += 1; $sttype = @OCIStatementType($stmt); if ($sttype == 'BEGIN' || $sttype == 'DECLARE') { return array($sql,$stmt,0,$BINDNUM, ($cursor) ? OCINewCursor($this->_connectionID) : false); } return array($sql,$stmt,0,$BINDNUM); } /* Call an oracle stored procedure and return a cursor variable. Convert the cursor variable into a recordset. Concept by Robert Tuttle robert@ud.com Example: Note: we return a cursor variable in :RS2 $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:RS2); END;",'RS2'); $rs = $db->ExecuteCursor( "BEGIN :RS2 = adodb.getdata(:VAR1); END;", 'RS2', array('VAR1' => 'Mr Bean')); */ function &ExecuteCursor($sql,$cursorName='rs',$params=false) { if (is_array($sql)) $stmt = $sql; else $stmt = ADODB_oci8::Prepare($sql,true); # true to allocate OCINewCursor if (is_array($stmt) && sizeof($stmt) >= 5) { $this->Parameter($stmt, $ignoreCur, $cursorName, false, -1, OCI_B_CURSOR); if ($params) { foreach($params as $k => $v) { $this->Parameter($stmt,$params[$k], $k); } } } return $this->Execute($stmt); } /* Bind a variable -- very, very fast for executing repeated statements in oracle. Better than using for ($i = 0; $i < $max; $i++) { $p1 = ?; $p2 = ?; $p3 = ?; $this->Execute("insert into table (col0, col1, col2) values (:0, :1, :2)", array($p1,$p2,$p3)); } Usage: $stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)"); $DB->Bind($stmt, $p1); $DB->Bind($stmt, $p2); $DB->Bind($stmt, $p3); for ($i = 0; $i < $max; $i++) { $p1 = ?; $p2 = ?; $p3 = ?; $DB->Execute($stmt); } Some timings: ** Test table has 3 cols, and 1 index. Test to insert 1000 records Time 0.6081s (1644.60 inserts/sec) with direct OCIParse/OCIExecute Time 0.6341s (1577.16 inserts/sec) with ADOdb Prepare/Bind/Execute Time 1.5533s ( 643.77 inserts/sec) with pure SQL using Execute Now if PHP only had batch/bulk updating like Java or PL/SQL... Note that the order of parameters differs from OCIBindByName, because we default the names to :0, :1, :2 */ function Bind(&$stmt,&$var,$size=4000,$type=false,$name=false,$isOutput=false) { if (!is_array($stmt)) return false; if (($type == OCI_B_CURSOR) && sizeof($stmt) >= 5) { return OCIBindByName($stmt[1],":".$name,$stmt[4],$size,$type); } if ($name == false) { if ($type !== false) $rez = OCIBindByName($stmt[1],":".$stmt[2],$var,$size,$type); else $rez = OCIBindByName($stmt[1],":".$stmt[2],$var,$size); // +1 byte for null terminator $stmt[2] += 1; } else if (oci_lob_desc($type)) { if ($this->debug) { ADOConnection::outp("Bind: name = $name"); } //we have to create a new Descriptor here $numlob = count($this -> _refLOBs); $this -> _refLOBs[$numlob]['LOB'] = OCINewDescriptor($this->_connectionID, oci_lob_desc($type)); $this -> _refLOBs[$numlob]['TYPE'] = $isOutput; $tmp = &$this -> _refLOBs[$numlob]['LOB']; $rez = OCIBindByName($stmt[1], ":".$name, $tmp, -1, $type); if ($this->debug) { ADOConnection::outp("Bind: descriptor has been allocated, var binded"); } // if type is input then write data to lob now if ($isOutput == false) { $var = $this -> BlobEncode($var); $tmp -> WriteTemporary($var); if ($this->debug) { ADOConnection::outp("Bind: LOB has been written to temp"); } } else { $this -> _refLOBs[$numlob]['VAR'] = &$var; } $rez = $tmp; } else { if ($this->debug) ADOConnection::outp("Bind: name = $name"); if ($type !== false) $rez = OCIBindByName($stmt[1],":".$name,$var,$size,$type); else $rez = OCIBindByName($stmt[1],":".$name,$var,$size); // +1 byte for null terminator } return $rez; } function Param($name,$type=false) { return ':'.$name; } /* Usage: $stmt = $db->Prepare('select * from table where id =:myid and group=:group'); $db->Parameter($stmt,$id,'myid'); $db->Parameter($stmt,$group,'group'); $db->Execute($stmt); @param $stmt Statement returned by Prepare() or PrepareSP(). @param $var PHP variable to bind to @param $name Name of stored procedure variable name to bind to. @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. @param [$maxLen] Holds an maximum length of the variable. @param [$type] The data type of $var. Legal values depend on driver. See OCIBindByName documentation at php.net. */ function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false) { if ($this->debug) { $prefix = ($isOutput) ? 'Out' : 'In'; $ztype = (empty($type)) ? 'false' : $type; ADOConnection::outp( "{$prefix}Parameter(\$stmt, \$php_var='$var', \$name='$name', \$maxLen=$maxLen, \$type=$ztype);"); } return $this->Bind($stmt,$var,$maxLen,$type,$name,$isOutput); } /* returns query ID if successful, otherwise false this version supports: 1. $db->execute('select * from table'); 2. $db->prepare('insert into table (a,b,c) values (:0,:1,:2)'); $db->execute($prepared_statement, array(1,2,3)); 3. $db->execute('insert into table (a,b,c) values (:a,:b,:c)',array('a'=>1,'b'=>2,'c'=>3)); 4. $db->prepare('insert into table (a,b,c) values (:0,:1,:2)'); $db->bind($stmt,1); $db->bind($stmt,2); $db->bind($stmt,3); $db->execute($stmt); */ function _query($sql,$inputarr) { if (is_array($sql)) { // is prepared sql $stmt = $sql[1]; // we try to bind to permanent array, so that OCIBindByName is persistent // and carried out once only - note that max array element size is 4000 chars if (is_array($inputarr)) { $bindpos = $sql[3]; if (isset($this->_bind[$bindpos])) { // all tied up already $bindarr = &$this->_bind[$bindpos]; } else { // one statement to bind them all $bindarr = array(); foreach($inputarr as $k => $v) { $bindarr[$k] = $v; OCIBindByName($stmt,":$k",$bindarr[$k],4000); } $this->_bind[$bindpos] = &$bindarr; } } } else { $stmt=OCIParse($this->_connectionID,$sql); } $this->_stmt = $stmt; if (!$stmt) return false; if (defined('ADODB_PREFETCH_ROWS')) @OCISetPrefetch($stmt,ADODB_PREFETCH_ROWS); if (is_array($inputarr)) { foreach($inputarr as $k => $v) { if (is_array($v)) { if (sizeof($v) == 2) // suggested by g.giunta@libero. OCIBindByName($stmt,":$k",$inputarr[$k][0],$v[1]); else OCIBindByName($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]); if ($this->debug==99) echo "name=:$k",' var='.$inputarr[$k][0],' len='.$v[1],' type='.$v[2],'
'; } else { $len = -1; if ($v === ' ') $len = 1; if (isset($bindarr)) { // is prepared sql, so no need to ocibindbyname again $bindarr[$k] = $v; } else { // dynamic sql, so rebind every time OCIBindByName($stmt,":$k",$inputarr[$k],$len); } } } } $this->_errorMsg = false; $this->_errorCode = false; if (OCIExecute($stmt,$this->_commit)) { //OCIInternalDebug(1); if (count($this -> _refLOBs) > 0) { foreach ($this -> _refLOBs as $key => $value) { if ($this -> _refLOBs[$key]['TYPE'] == true) { $tmp = $this -> _refLOBs[$key]['LOB'] -> load(); if ($this -> debug) { ADOConnection::outp("OUT LOB: LOB has been loaded.
"); } //$_GLOBALS[$this -> _refLOBs[$key]['VAR']] = $tmp; $this -> _refLOBs[$key]['VAR'] = $tmp; } $this -> _refLOBs[$key]['LOB'] -> free(); unset($this -> _refLOBs[$key]); } } switch (@OCIStatementType($stmt)) { case "SELECT": return $stmt; case 'DECLARE': case "BEGIN": if (is_array($sql) && !empty($sql[4])) { $cursor = $sql[4]; if (is_resource($cursor)) { $ok = OCIExecute($cursor); return $cursor; } return $stmt; } else { if (is_resource($stmt)) { OCIFreeStatement($stmt); return true; } return $stmt; } break; default : // ociclose -- no because it could be used in a LOB? return true; } } return false; } // returns true or false function _close() { if (!$this->_connectionID) return; if (!$this->autoCommit) OCIRollback($this->_connectionID); if (count($this -> _refLOBs) > 0) { foreach ($this -> _refLOBs as $key => $value) { $this -> _refLOBs[$key] -> free(); unset($this -> _refLOBs[$key]); } } OCILogoff($this->_connectionID); $this->_stmt = false; $this->_connectionID = false; } function MetaPrimaryKeys($table, $owner=false,$internalKey=false) { if ($internalKey) return array('ROWID'); // tested with oracle 8.1.7 $table = strtoupper($table); if ($owner) { $owner_clause = "AND ((a.OWNER = b.OWNER) AND (a.OWNER = UPPER('$owner')))"; $ptab = 'ALL_'; } else { $owner_clause = ''; $ptab = 'USER_'; } $sql = " SELECT /*+ RULE */ distinct b.column_name FROM {$ptab}CONSTRAINTS a , {$ptab}CONS_COLUMNS b WHERE ( UPPER(b.table_name) = ('$table')) AND (UPPER(a.table_name) = ('$table') and a.constraint_type = 'P') $owner_clause AND (a.constraint_name = b.constraint_name)"; $rs = $this->Execute($sql); if ($rs && !$rs->EOF) { $arr =& $rs->GetArray(); $a = array(); foreach($arr as $v) { $a[] = reset($v); } return $a; } else return false; } // http://gis.mit.edu/classes/11.521/sqlnotes/referential_integrity.html function MetaForeignKeys($table, $owner=false) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $table = $this->qstr(strtoupper($table)); if (!$owner) { $owner = $this->user; $tabp = 'user_'; } else $tabp = 'all_'; $owner = ' and owner='.$this->qstr(strtoupper($owner)); $sql = "select constraint_name,r_owner,r_constraint_name from {$tabp}constraints where constraint_type = 'R' and table_name = $table $owner"; $constraints =& $this->GetArray($sql); $arr = false; foreach($constraints as $constr) { $cons = $this->qstr($constr[0]); $rowner = $this->qstr($constr[1]); $rcons = $this->qstr($constr[2]); $cols = $this->GetArray("select column_name from {$tabp}cons_columns where constraint_name=$cons $owner order by position"); $tabcol = $this->GetArray("select table_name,column_name from {$tabp}cons_columns where owner=$rowner and constraint_name=$rcons order by position"); if ($cols && $tabcol) for ($i=0, $max=sizeof($cols); $i < $max; $i++) { $arr[$tabcol[$i][0]] = $cols[$i][0].'='.$tabcol[$i][1]; } } $ADODB_FETCH_MODE = $save; return $arr; } function CharMax() { return 4000; } function TextMax() { return 4000; } /** * Quotes a string. * An example is $db->qstr("Don't bother",magic_quotes_runtime()); * * @param s the string to quote * @param [magic_quotes] if $s is GET/POST var, set to get_magic_quotes_gpc(). * This undoes the stupidity of magic quotes for GPC. * * @return quoted string to be sent back to database */ function qstr($s,$magic_quotes=false) { $nofixquotes=false; if ($this->noNullStrings && strlen($s)==0)$s = ' '; if (!$magic_quotes) { if ($this->replaceQuote[0] == '\\'){ $s = str_replace('\\','\\\\',$s); } return "'".str_replace("'",$this->replaceQuote,$s)."'"; } // undo magic quotes for " $s = str_replace('\\"','"',$s); $s = str_replace('\\\\','\\',$s); return "'".str_replace("\\'",$this->replaceQuote,$s)."'"; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_oci8 extends ADORecordSet { var $databaseType = 'oci8'; var $bind=false; var $_fieldobjs; //var $_arr = false; function ADORecordset_oci8($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { default: case ADODB_FETCH_NUM: $this->fetchMode = OCI_NUM+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break; case ADODB_FETCH_ASSOC:$this->fetchMode = OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break; case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = OCI_NUM+OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break; } $this->adodbFetchMode = $mode; $this->_queryID = $queryID; } function Init() { if ($this->_inited) return; $this->_inited = true; if ($this->_queryID) { $this->_currentRow = 0; @$this->_initrs(); $this->EOF = !$this->_fetch(); /* // based on idea by Gaetano Giunta to detect unusual oracle errors // see http://phplens.com/lens/lensforum/msgs.php?id=6771 $err = OCIError($this->_queryID); if ($err && $this->connection->debug) ADOConnection::outp($err); */ if (!is_array($this->fields)) { $this->_numOfRows = 0; $this->fields = array(); } } else { $this->fields = array(); $this->_numOfRows = 0; $this->_numOfFields = 0; $this->EOF = true; } } function _initrs() { $this->_numOfRows = -1; $this->_numOfFields = OCInumcols($this->_queryID); if ($this->_numOfFields>0) { $this->_fieldobjs = array(); $max = $this->_numOfFields; for ($i=0;$i<$max; $i++) $this->_fieldobjs[] = $this->_FetchField($i); } } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by fetchField() is retrieved. */ function &_FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; $fieldOffset += 1; $fld->name =OCIcolumnname($this->_queryID, $fieldOffset); $fld->type = OCIcolumntype($this->_queryID, $fieldOffset); $fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset); if ($fld->type == 'NUMBER') { $p = OCIColumnPrecision($this->_queryID, $fieldOffset); $sc = OCIColumnScale($this->_queryID, $fieldOffset); if ($p != 0 && $sc == 0) $fld->type = 'INT'; //echo " $this->name ($p.$sc) "; } return $fld; } /* For some reason, OCIcolumnname fails when called after _initrs() so we cache it */ function &FetchField($fieldOffset = -1) { return $this->_fieldobjs[$fieldOffset]; } /* // 10% speedup to move MoveNext to child class function _MoveNext() { //global $ADODB_EXTENSION;if ($ADODB_EXTENSION) return @adodb_movenext($this); if ($this->EOF) return false; $this->_currentRow++; if(@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) return true; $this->EOF = true; return false; } */ function MoveNext() { if (@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) { $this->_currentRow += 1; return true; } if (!$this->EOF) { $this->_currentRow += 1; $this->EOF = true; } return false; } /* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */ function &GetArrayLimit($nrows,$offset=-1) { if ($offset <= 0) { $arr =& $this->GetArray($nrows); return $arr; } for ($i=1; $i < $offset; $i++) if (!@OCIFetch($this->_queryID)) return array(); if (!@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) return array(); $results = array(); $cnt = 0; while (!$this->EOF && $nrows != $cnt) { $results[$cnt++] = $this->fields; $this->MoveNext(); } return $results; } /* Use associative array to get fields array */ function Fields($colname) { if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _seek($row) { return false; } function _fetch() { return @OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode); } /* close() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed. */ function _close() { if ($this->connection->_stmt === $this->_queryID) $this->connection->_stmt = false; @OCIFreeStatement($this->_queryID); $this->_queryID = false; } function MetaType($t,$len=-1) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } switch (strtoupper($t)) { case 'VARCHAR': case 'VARCHAR2': case 'CHAR': case 'VARBINARY': case 'BINARY': case 'NCHAR': case 'NVARCHAR': case 'NVARCHAR2': if (isset($this) && $len <= $this->blobSize) return 'C'; case 'NCLOB': case 'LONG': case 'LONG VARCHAR': case 'CLOB': return 'X'; case 'LONG RAW': case 'LONG VARBINARY': case 'BLOB': return 'B'; case 'DATE': return ($this->connection->datetime) ? 'T' : 'D'; case 'TIMESTAMP': return 'T'; case 'INT': case 'SMALLINT': case 'INTEGER': return 'I'; default: return 'N'; } } } class ADORecordSet_ext_oci8 extends ADORecordSet_oci8 { function ADORecordSet_ext_oci8($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { default: case ADODB_FETCH_NUM: $this->fetchMode = OCI_NUM+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break; case ADODB_FETCH_ASSOC:$this->fetchMode = OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break; case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = OCI_NUM+OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break; } $this->adodbFetchMode = $mode; $this->_queryID = $queryID; } function MoveNext() { return adodb_movenext($this); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-oci805.inc.php 777 0 0 3144 10142745764 21275 0ADODB_oci8(); } function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { // seems that oracle only supports 1 hint comment in 8i if (strpos($sql,'/*+') !== false) $sql = str_replace('/*+ ','/*+FIRST_ROWS ',$sql); else $sql = preg_replace('/^[ \t\n]*select/i','SELECT /*+FIRST_ROWS*/',$sql); /* The following is only available from 8.1.5 because order by in inline views not available before then... http://www.jlcomp.demon.co.uk/faq/top_sql.html if ($nrows > 0) { if ($offset > 0) $nrows += $offset; $sql = "select * from ($sql) where rownum <= $nrows"; $nrows = -1; } */ return ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); } } class ADORecordset_oci805 extends ADORecordset_oci8 { var $databaseType = "oci805"; function ADORecordset_oci805($id,$mode=false) { $this->ADORecordset_oci8($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-oci8po.inc.php 777 0 0 13002 10142745764 21501 0 Should some emulation of RecordCount() be implemented? */ // security - hide paths if (!defined('ADODB_DIR')) die(); include_once(ADODB_DIR.'/drivers/adodb-oci8.inc.php'); class ADODB_oci8po extends ADODB_oci8 { var $databaseType = 'oci8po'; var $dataProvider = 'oci8'; var $metaColumnsSQL = "select lower(cname),coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net var $metaTablesSQL = "select lower(table_name),table_type from cat where table_type in ('TABLE','VIEW')"; function ADODB_oci8po() { $this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200; # oci8po does not support adodb extension: adodb_movenext() } function Param($name) { return '?'; } function Prepare($sql,$cursor=false) { $sqlarr = explode('?',$sql); $sql = $sqlarr[0]; for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) { $sql .= ':'.($i-1) . $sqlarr[$i]; } return ADODB_oci8::Prepare($sql,$cursor); } // emulate handling of parameters ? ?, replacing with :bind0 :bind1 function _query($sql,$inputarr) { if (is_array($inputarr)) { $i = 0; if (is_array($sql)) { foreach($inputarr as $v) { $arr['bind'.$i++] = $v; } } else { $sqlarr = explode('?',$sql); $sql = $sqlarr[0]; foreach($inputarr as $k => $v) { $sql .= ":$k" . $sqlarr[++$i]; } } } return ADODB_oci8::_query($sql,$inputarr); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_oci8po extends ADORecordset_oci8 { var $databaseType = 'oci8po'; function ADORecordset_oci8po($queryID,$mode=false) { $this->ADORecordset_oci8($queryID,$mode); } function Fields($colname) { if ($this->fetchMode & OCI_ASSOC) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } // lowercase field names... function &_FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; $fieldOffset += 1; $fld->name = strtolower(OCIcolumnname($this->_queryID, $fieldOffset)); $fld->type = OCIcolumntype($this->_queryID, $fieldOffset); $fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset); if ($fld->type == 'NUMBER') { //$p = OCIColumnPrecision($this->_queryID, $fieldOffset); $sc = OCIColumnScale($this->_queryID, $fieldOffset); if ($sc == 0) $fld->type = 'INT'; } return $fld; } /* function MoveNext() { if (@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) { $this->_currentRow += 1; return true; } if (!$this->EOF) { $this->_currentRow += 1; $this->EOF = true; } return false; }*/ // 10% speedup to move MoveNext to child class function MoveNext() { if(@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) { global $ADODB_ANSI_PADDING_OFF; $this->_currentRow++; if ($this->fetchMode & OCI_ASSOC) $this->_updatefields(); if (!empty($ADODB_ANSI_PADDING_OFF)) { foreach($this->fields as $k => $v) { if (is_string($v)) $this->fields[$k] = rtrim($v); } } return true; } if (!$this->EOF) { $this->EOF = true; $this->_currentRow++; } return false; } /* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */ function &GetArrayLimit($nrows,$offset=-1) { if ($offset <= 0) return $this->GetArray($nrows); for ($i=1; $i < $offset; $i++) if (!@OCIFetch($this->_queryID)) return array(); if (!@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) return array(); if ($this->fetchMode & OCI_ASSOC) $this->_updatefields(); $results = array(); $cnt = 0; while (!$this->EOF && $nrows != $cnt) { $results[$cnt++] = $this->fields; $this->MoveNext(); } return $results; } // Create associative array function _updatefields() { if (ADODB_ASSOC_CASE == 2) return; // native $arr = array(); $lowercase = (ADODB_ASSOC_CASE == 0); foreach($this->fields as $k => $v) { if (is_integer($k)) $arr[$k] = $v; else { if ($lowercase) $arr[strtolower($k)] = $v; else $arr[strtoupper($k)] = $v; } } $this->fields = $arr; } function _fetch() { $ret = @OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode); if ($ret) { global $ADODB_ANSI_PADDING_OFF; if ($this->fetchMode & OCI_ASSOC) $this->_updatefields(); if (!empty($ADODB_ANSI_PADDING_OFF)) { foreach($this->fields as $k => $v) { if (is_string($v)) $this->fields[$k] = rtrim($v); } } } return $ret; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-odbc.inc.php 777 0 0 47417 10142745764 21230 0_haserrorfunctions = ADODB_PHPVER >= 0x4050; $this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200; } // returns true or false function _connect($argDSN, $argUsername, $argPassword, $argDatabasename) { global $php_errormsg; if (!function_exists('odbc_connect')) return null; if ($this->debug && $argDatabasename && $this->databaseType != 'vfp') { ADOConnection::outp("For odbc Connect(), $argDatabasename is not used. Place dsn in 1st parameter."); } if (isset($php_errormsg)) $php_errormsg = ''; if ($this->curmode === false) $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword); else $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,$this->curmode); $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; if (isset($this->connectStmt)) $this->Execute($this->connectStmt); return $this->_connectionID != false; } // returns true or false function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) { global $php_errormsg; if (!function_exists('odbc_connect')) return null; if (isset($php_errormsg)) $php_errormsg = ''; $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; if ($this->debug && $argDatabasename) { ADOConnection::outp("For odbc PConnect(), $argDatabasename is not used. Place dsn in 1st parameter."); } // print "dsn=$argDSN u=$argUsername p=$argPassword
"; flush(); if ($this->curmode === false) $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword); else $this->_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,$this->curmode); $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; if ($this->_connectionID && $this->autoRollback) @odbc_rollback($this->_connectionID); if (isset($this->connectStmt)) $this->Execute($this->connectStmt); return $this->_connectionID != false; } function ServerInfo() { if (!empty($this->host) && ADODB_PHPVER >= 0x4300) { $dsn = strtoupper($this->host); $first = true; $found = false; if (!function_exists('odbc_data_source')) return false; while(true) { $rez = @odbc_data_source($this->_connectionID, $first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT); $first = false; if (!is_array($rez)) break; if (strtoupper($rez['server']) == $dsn) { $found = true; break; } } if (!$found) return ADOConnection::ServerInfo(); if (!isset($rez['version'])) $rez['version'] = ''; return $rez; } else { return ADOConnection::ServerInfo(); } } function CreateSequence($seqname='adodbseq',$start=1) { if (empty($this->_genSeqSQL)) return false; $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); if (!$ok) return false; $start -= 1; return $this->Execute("insert into $seqname values($start)"); } var $_dropSeqSQL = 'drop table %s'; function DropSequence($seqname) { if (empty($this->_dropSeqSQL)) return false; return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); } /* This algorithm is not very efficient, but works even if table locking is not available. Will return false if unable to generate an ID after $MAXLOOPS attempts. */ function GenID($seq='adodbseq',$start=1) { // if you have to modify the parameter below, your database is overloaded, // or you need to implement generation of id's yourself! $MAXLOOPS = 100; //$this->debug=1; while (--$MAXLOOPS>=0) { $num = $this->GetOne("select id from $seq"); if ($num === false) { $this->Execute(sprintf($this->_genSeqSQL ,$seq)); $start -= 1; $num = '0'; $ok = $this->Execute("insert into $seq values($start)"); if (!$ok) return false; } $this->Execute("update $seq set id=id+1 where id=$num"); if ($this->affected_rows() > 0) { $num += 1; $this->genID = $num; return $num; } } if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); } return false; } function ErrorMsg() { if ($this->_haserrorfunctions) { if ($this->_errorMsg !== false) return $this->_errorMsg; if (empty($this->_connectionID)) return @odbc_errormsg(); return @odbc_errormsg($this->_connectionID); } else return ADOConnection::ErrorMsg(); } function ErrorNo() { if ($this->_haserrorfunctions) { if ($this->_errorCode !== false) { // bug in 4.0.6, error number can be corrupted string (should be 6 digits) return (strlen($this->_errorCode)<=2) ? 0 : $this->_errorCode; } if (empty($this->_connectionID)) $e = @odbc_error(); else $e = @odbc_error($this->_connectionID); // bug in 4.0.6, error number can be corrupted string (should be 6 digits) // so we check and patch if (strlen($e)<=2) return 0; return $e; } else return ADOConnection::ErrorNo(); } function BeginTrans() { if (!$this->hasTransactions) return false; if ($this->transOff) return true; $this->transCnt += 1; $this->_autocommit = false; return odbc_autocommit($this->_connectionID,false); } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $this->_autocommit = true; $ret = odbc_commit($this->_connectionID); odbc_autocommit($this->_connectionID,true); return $ret; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->_autocommit = true; $ret = odbc_rollback($this->_connectionID); odbc_autocommit($this->_connectionID,true); return $ret; } function MetaPrimaryKeys($table) { global $ADODB_FETCH_MODE; if ($this->uCaseTables) $table = strtoupper($table); $schema = ''; $this->_findschema($table,$schema); $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $qid = @odbc_primarykeys($this->_connectionID,'',$schema,$table); if (!$qid) { $ADODB_FETCH_MODE = $savem; return false; } $rs = new ADORecordSet_odbc($qid); $ADODB_FETCH_MODE = $savem; if (!$rs) return false; $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; $arr =& $rs->GetArray(); $rs->Close(); //print_r($arr); $arr2 = array(); for ($i=0; $i < sizeof($arr); $i++) { if ($arr[$i][3]) $arr2[] = $arr[$i][3]; } return $arr2; } function &MetaTables($ttype=false) { global $ADODB_FETCH_MODE; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $qid = odbc_tables($this->_connectionID); $rs = new ADORecordSet_odbc($qid); $ADODB_FETCH_MODE = $savem; if (!$rs) { $false = false; return $false; } $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; $arr =& $rs->GetArray(); //print_r($arr); $rs->Close(); $arr2 = array(); if ($ttype) { $isview = strncmp($ttype,'V',1) === 0; } for ($i=0; $i < sizeof($arr); $i++) { if (!$arr[$i][2]) continue; $type = $arr[$i][3]; if ($ttype) { if ($isview) { if (strncmp($type,'V',1) === 0) $arr2[] = $arr[$i][2]; } else if (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2]; } else if (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2]; } return $arr2; } /* See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcdatetime_data_type_changes.asp / SQL data type codes / #define SQL_UNKNOWN_TYPE 0 #define SQL_CHAR 1 #define SQL_NUMERIC 2 #define SQL_DECIMAL 3 #define SQL_INTEGER 4 #define SQL_SMALLINT 5 #define SQL_FLOAT 6 #define SQL_REAL 7 #define SQL_DOUBLE 8 #if (ODBCVER >= 0x0300) #define SQL_DATETIME 9 #endif #define SQL_VARCHAR 12 / One-parameter shortcuts for date/time data types / #if (ODBCVER >= 0x0300) #define SQL_TYPE_DATE 91 #define SQL_TYPE_TIME 92 #define SQL_TYPE_TIMESTAMP 93 #define SQL_UNICODE (-95) #define SQL_UNICODE_VARCHAR (-96) #define SQL_UNICODE_LONGVARCHAR (-97) */ function ODBCTypes($t) { switch ((integer)$t) { case 1: case 12: case 0: case -95: case -96: return 'C'; case -97: case -1: //text return 'X'; case -4: //image return 'B'; case 9: case 91: return 'D'; case 10: case 11: case 92: case 93: return 'T'; case 4: case 5: case -6: return 'I'; case -11: // uniqidentifier return 'R'; case -7: //bit return 'L'; default: return 'N'; } } function &MetaColumns($table) { global $ADODB_FETCH_MODE; $false = false; if ($this->uCaseTables) $table = strtoupper($table); $schema = ''; $this->_findschema($table,$schema); $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; /*if (false) { // after testing, confirmed that the following does not work becoz of a bug $qid2 = odbc_tables($this->_connectionID); $rs = new ADORecordSet_odbc($qid2); $ADODB_FETCH_MODE = $savem; if (!$rs) return false; $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; $rs->_fetch(); while (!$rs->EOF) { if ($table == strtoupper($rs->fields[2])) { $q = $rs->fields[0]; $o = $rs->fields[1]; break; } $rs->MoveNext(); } $rs->Close(); $qid = odbc_columns($this->_connectionID,$q,$o,strtoupper($table),'%'); } */ switch ($this->databaseType) { case 'access': case 'vfp': $qid = odbc_columns($this->_connectionID);#,'%','',strtoupper($table),'%'); break; case 'db2': $colname = "%"; $qid = odbc_columns($this->_connectionID, "", $schema, $table, $colname); break; default: $qid = @odbc_columns($this->_connectionID,'%','%',strtoupper($table),'%'); if (empty($qid)) $qid = odbc_columns($this->_connectionID); break; } if (empty($qid)) return $false; $rs =& new ADORecordSet_odbc($qid); $ADODB_FETCH_MODE = $savem; if (!$rs) return $false; $rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change; $rs->_fetch(); $retarr = array(); /* $rs->fields indices 0 TABLE_QUALIFIER 1 TABLE_SCHEM 2 TABLE_NAME 3 COLUMN_NAME 4 DATA_TYPE 5 TYPE_NAME 6 PRECISION 7 LENGTH 8 SCALE 9 RADIX 10 NULLABLE 11 REMARKS */ while (!$rs->EOF) { // adodb_pr($rs->fields); if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) { $fld = new ADOFieldObject(); $fld->name = $rs->fields[3]; $fld->type = $this->ODBCTypes($rs->fields[4]); // ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp // access uses precision to store length for char/varchar if ($fld->type == 'C' or $fld->type == 'X') { if ($this->databaseType == 'access') $fld->max_length = $rs->fields[6]; else if ($rs->fields[4] <= -95) // UNICODE $fld->max_length = $rs->fields[7]/2; else $fld->max_length = $rs->fields[7]; } else $fld->max_length = $rs->fields[7]; $fld->not_null = !empty($rs->fields[10]); $fld->scale = $rs->fields[8]; $retarr[strtoupper($fld->name)] = $fld; } else if (sizeof($retarr)>0) break; $rs->MoveNext(); } $rs->Close(); //-- crashes 4.03pl1 -- why? return empty($retarr) ? $false : $retarr; } function Prepare($sql) { if (! $this->_bindInputArray) return $sql; // no binding $stmt = odbc_prepare($this->_connectionID,$sql); if (!$stmt) { // we don't know whether odbc driver is parsing prepared stmts, so just return sql return $sql; } return array($sql,$stmt,false); } /* returns queryID or false */ function _query($sql,$inputarr=false) { GLOBAL $php_errormsg; if (isset($php_errormsg)) $php_errormsg = ''; $this->_error = ''; if ($inputarr) { if (is_array($sql)) { $stmtid = $sql[1]; } else { $stmtid = odbc_prepare($this->_connectionID,$sql); if ($stmtid == false) { $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; return false; } } if (! odbc_execute($stmtid,$inputarr)) { //@odbc_free_result($stmtid); if ($this->_haserrorfunctions) { $this->_errorMsg = odbc_errormsg(); $this->_errorCode = odbc_error(); } return false; } } else if (is_array($sql)) { $stmtid = $sql[1]; if (!odbc_execute($stmtid)) { //@odbc_free_result($stmtid); if ($this->_haserrorfunctions) { $this->_errorMsg = odbc_errormsg(); $this->_errorCode = odbc_error(); } return false; } } else $stmtid = odbc_exec($this->_connectionID,$sql); $this->_lastAffectedRows = 0; if ($stmtid) { if (@odbc_num_fields($stmtid) == 0) { $this->_lastAffectedRows = odbc_num_rows($stmtid); $stmtid = true; } else { $this->_lastAffectedRows = 0; odbc_binmode($stmtid,$this->binmode); odbc_longreadlen($stmtid,$this->maxblobsize); } if ($this->_haserrorfunctions) { $this->_errorMsg = ''; $this->_errorCode = 0; } else $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; } else { if ($this->_haserrorfunctions) { $this->_errorMsg = odbc_errormsg(); $this->_errorCode = odbc_error(); } else $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; } return $stmtid; } /* Insert a null into the blob field of the table first. Then use UpdateBlob to store the blob. Usage: $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); */ function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false; } // returns true or false function _close() { $ret = @odbc_close($this->_connectionID); $this->_connectionID = false; return $ret; } function _affectedrows() { return $this->_lastAffectedRows; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_odbc extends ADORecordSet { var $bind = false; var $databaseType = "odbc"; var $dataProvider = "odbc"; var $useFetchArray; var $_has_stupid_odbc_fetch_api_change; function ADORecordSet_odbc($id,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; $this->_queryID = $id; // the following is required for mysql odbc driver in 4.3.1 -- why? $this->EOF = false; $this->_currentRow = -1; //$this->ADORecordSet($id); } // returns the field object function &FetchField($fieldOffset = -1) { $off=$fieldOffset+1; // offsets begin at 1 $o= new ADOFieldObject(); $o->name = @odbc_field_name($this->_queryID,$off); $o->type = @odbc_field_type($this->_queryID,$off); $o->max_length = @odbc_field_len($this->_queryID,$off); if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); return $o; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _initrs() { global $ADODB_COUNTRECS; $this->_numOfRows = ($ADODB_COUNTRECS) ? @odbc_num_rows($this->_queryID) : -1; $this->_numOfFields = @odbc_num_fields($this->_queryID); // some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0 if ($this->_numOfRows == 0) $this->_numOfRows = -1; //$this->useFetchArray = $this->connection->useFetchArray; $this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200; } function _seek($row) { return false; } // speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated function &GetArrayLimit($nrows,$offset=-1) { if ($offset <= 0) { $rs =& $this->GetArray($nrows); return $rs; } $savem = $this->fetchMode; $this->fetchMode = ADODB_FETCH_NUM; $this->Move($offset); $this->fetchMode = $savem; if ($this->fetchMode & ADODB_FETCH_ASSOC) { $this->fields =& $this->GetRowAssoc(ADODB_ASSOC_CASE); } $results = array(); $cnt = 0; while (!$this->EOF && $nrows != $cnt) { $results[$cnt++] = $this->fields; $this->MoveNext(); } return $results; } function MoveNext() { if ($this->_numOfRows != 0 && !$this->EOF) { $this->_currentRow++; if ($this->_has_stupid_odbc_fetch_api_change) $rez = @odbc_fetch_into($this->_queryID,$this->fields); else { $row = 0; $rez = @odbc_fetch_into($this->_queryID,$row,$this->fields); } if ($rez) { if ($this->fetchMode & ADODB_FETCH_ASSOC) { $this->fields =& $this->GetRowAssoc(ADODB_ASSOC_CASE); } return true; } } $this->fields = false; $this->EOF = true; return false; } function _fetch() { if ($this->_has_stupid_odbc_fetch_api_change) $rez = @odbc_fetch_into($this->_queryID,$this->fields,$row); else { $row = 0; $rez = @odbc_fetch_into($this->_queryID,$row,$this->fields); } if ($rez) { if ($this->fetchMode & ADODB_FETCH_ASSOC) { $this->fields =& $this->GetRowAssoc(ADODB_ASSOC_CASE); } return true; } $this->fields = false; return false; } function _close() { return @odbc_free_result($this->_queryID); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-odbc_mssql.inc.php 777 0 0 17011 10142745764 22432 0ADODB_odbc(); $this->curmode = SQL_CUR_USE_ODBC; } // crashes php... function ServerInfo() { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $row = $this->GetRow("execute sp_server_info 2"); $ADODB_FETCH_MODE = $save; if (!is_array($row)) return false; $arr['description'] = $row[2]; $arr['version'] = ADOConnection::_findvers($arr['description']); return $arr; } function IfNull( $field, $ifNull ) { return " ISNULL($field, $ifNull) "; // if MS SQL Server } function _insertid() { // SCOPE_IDENTITY() // Returns the last IDENTITY value inserted into an IDENTITY column in // the same scope. A scope is a module -- a stored procedure, trigger, // function, or batch. Thus, two statements are in the same scope if // they are in the same stored procedure, function, or batch. return $this->GetOne($this->identitySQL); } function MetaForeignKeys($table, $owner=false, $upper=false) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $table = $this->qstr(strtoupper($table)); $sql = "select object_name(constid) as constraint_name, col_name(fkeyid, fkey) as column_name, object_name(rkeyid) as referenced_table_name, col_name(rkeyid, rkey) as referenced_column_name from sysforeignkeys where upper(object_name(fkeyid)) = $table order by constraint_name, referenced_table_name, keyno"; $constraints =& $this->GetArray($sql); $ADODB_FETCH_MODE = $save; $arr = false; foreach($constraints as $constr) { //print_r($constr); $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3]; } if (!$arr) return false; $arr2 = false; foreach($arr as $k => $v) { foreach($v as $a => $b) { if ($upper) $a = strtoupper($a); $arr2[$a] = $b; } } return $arr2; } function &MetaTables($ttype=false,$showSchema=false,$mask=false) { if ($mask) {$this->debug=1; $save = $this->metaTablesSQL; $mask = $this->qstr($mask); $this->metaTablesSQL .= " AND name like $mask"; } $ret =& ADOConnection::MetaTables($ttype,$showSchema); if ($mask) { $this->metaTablesSQL = $save; } return $ret; } function &MetaColumns($table) { return ADOConnection::MetaColumns($table); } function _query($sql,$inputarr) { if (is_string($sql)) $sql = str_replace('||','+',$sql); return ADODB_odbc::_query($sql,$inputarr); } // "Stein-Aksel Basma" // tested with MSSQL 2000 function &MetaPrimaryKeys($table) { global $ADODB_FETCH_MODE; $schema = ''; $this->_findschema($table,$schema); //if (!$schema) $schema = $this->database; if ($schema) $schema = "and k.table_catalog like '$schema%'"; $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k, information_schema.table_constraints tc where tc.constraint_name = k.constraint_name and tc.constraint_type = 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position "; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $a = $this->GetCol($sql); $ADODB_FETCH_MODE = $savem; if ($a && sizeof($a)>0) return $a; return false; } function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { if ($nrows > 0 && $offset <= 0) { $sql = preg_replace( '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql); $rs =& $this->Execute($sql,$inputarr); } else $rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); return $rs; } // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = ''; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { if ($s) $s .= '+'; $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= "datename(yyyy,$col)"; break; case 'M': $s .= "convert(char(3),$col,0)"; break; case 'm': $s .= "replace(str(month($col),2),' ','0')"; break; case 'Q': case 'q': $s .= "datename(quarter,$col)"; break; case 'D': case 'd': $s .= "replace(str(day($col),2),' ','0')"; break; case 'h': $s .= "substring(convert(char(14),$col,0),13,2)"; break; case 'H': $s .= "replace(str(datepart(hh,$col),2),' ','0')"; break; case 'i': $s .= "replace(str(datepart(mi,$col),2),' ','0')"; break; case 's': $s .= "replace(str(datepart(ss,$col),2),' ','0')"; break; case 'a': case 'A': $s .= "substring(convert(char(19),$col,0),18,2)"; break; default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } $s .= $this->qstr($ch); break; } } return $s; } } class ADORecordSet_odbc_mssql extends ADORecordSet_odbc { var $databaseType = 'odbc_mssql'; function ADORecordSet_odbc_mssql($id,$mode=false) { return $this->ADORecordSet_odbc($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-odbc_oracle.inc.php 777 0 0 6307 10142745764 22526 0ADODB_odbc(); } function &MetaTables() { $false = false; $rs = $this->Execute($this->metaTablesSQL); if ($rs === false) return $false; $arr = $rs->GetArray(); $arr2 = array(); for ($i=0; $i < sizeof($arr); $i++) { $arr2[] = $arr[$i][0]; } $rs->Close(); return $arr2; } function &MetaColumns($table) { $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table))); if ($rs === false) { $false = false; return $false; } $retarr = array(); while (!$rs->EOF) { //print_r($rs->fields); $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; $fld->max_length = $rs->fields[2]; if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; else $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } // returns true or false function _connect($argDSN, $argUsername, $argPassword, $argDatabasename) { global $php_errormsg; $php_errormsg = ''; $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,SQL_CUR_USE_ODBC ); $this->_errorMsg = $php_errormsg; $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'"); //if ($this->_connectionID) odbc_autocommit($this->_connectionID,true); return $this->_connectionID != false; } // returns true or false function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) { global $php_errormsg; $php_errormsg = ''; $this->_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,SQL_CUR_USE_ODBC ); $this->_errorMsg = $php_errormsg; $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'"); //if ($this->_connectionID) odbc_autocommit($this->_connectionID,true); return $this->_connectionID != false; } } class ADORecordSet_odbc_oracle extends ADORecordSet_odbc { var $databaseType = 'odbc_oracle'; function ADORecordSet_odbc_oracle($id,$mode=false) { return $this->ADORecordSet_odbc($id,$mode); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-odbtp.inc.php 777 0 0 51410 10142745764 21415 0 // security - hide paths if (!defined('ADODB_DIR')) die(); define("_ADODB_ODBTP_LAYER", 2 ); class ADODB_odbtp extends ADOConnection{ var $databaseType = "odbtp"; var $dataProvider = "odbtp"; var $fmtDate = "'Y-m-d'"; var $fmtTimeStamp = "'Y-m-d, h:i:sA'"; var $replaceQuote = "''"; // string to use to replace quotes var $odbc_driver = 0; var $hasAffectedRows = true; var $hasInsertID = false; var $hasGenID = true; var $hasMoveFirst = true; var $_genSeqSQL = "create table %s (seq_name char(30) not null unique , seq_value integer not null)"; var $_dropSeqSQL = "delete from adodb_seq where seq_name = '%s'"; var $_bindInputArray = false; var $_useUnicodeSQL = false; var $_canPrepareSP = false; var $_dontPoolDBC = true; function ADODB_odbtp() { } function ServerInfo() { return array('description' => @odbtp_get_attr( ODB_ATTR_DBMSNAME, $this->_connectionID), 'version' => @odbtp_get_attr( ODB_ATTR_DBMSVER, $this->_connectionID)); } function ErrorMsg() { if (empty($this->_connectionID)) return @odbtp_last_error(); return @odbtp_last_error($this->_connectionID); } function ErrorNo() { if (empty($this->_connectionID)) return @odbtp_last_error_state(); return @odbtp_last_error_state($this->_connectionID); } function _insertid() { // SCOPE_IDENTITY() // Returns the last IDENTITY value inserted into an IDENTITY column in // the same scope. A scope is a module -- a stored procedure, trigger, // function, or batch. Thus, two statements are in the same scope if // they are in the same stored procedure, function, or batch. return $this->GetOne($this->identitySQL); } function _affectedrows() { if ($this->_queryID) { return @odbtp_affected_rows ($this->_queryID); } else return 0; } function CreateSequence($seqname='adodbseq',$start=1) { //verify existence $num = $this->GetOne("select seq_value from adodb_seq"); $seqtab='adodb_seq'; if( $this->odbc_driver == ODB_DRIVER_FOXPRO ) { $path = @odbtp_get_attr( ODB_ATTR_DATABASENAME, $this->_connectionID ); //if using vfp dbc file if( !strcasecmp(strrchr($path, '.'), '.dbc') ) $path = substr($path,0,strrpos($path,'\/')); $seqtab = $path . '/' . $seqtab; } if($num == false) { if (empty($this->_genSeqSQL)) return false; $ok = $this->Execute(sprintf($this->_genSeqSQL ,$seqtab)); } $num = $this->GetOne("select seq_value from adodb_seq where seq_name='$seqname'"); if ($num) { return false; } $start -= 1; return $this->Execute("insert into adodb_seq values('$seqname',$start)"); } function DropSequence($seqname) { if (empty($this->_dropSeqSQL)) return false; return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); } function GenID($seq='adodbseq',$start=1) { $seqtab='adodb_seq'; if( $this->odbc_driver == ODB_DRIVER_FOXPRO) { $path = @odbtp_get_attr( ODB_ATTR_DATABASENAME, $this->_connectionID ); //if using vfp dbc file if( !strcasecmp(strrchr($path, '.'), '.dbc') ) $path = substr($path,0,strrpos($path,'\/')); $seqtab = $path . '/' . $seqtab; } $MAXLOOPS = 100; while (--$MAXLOOPS>=0) { $num = $this->GetOne("select seq_value from adodb_seq where seq_name='$seq'"); if ($num === false) { //verify if abodb_seq table exist $ok = $this->GetOne("select seq_value from adodb_seq "); if(!$ok) { //creating the sequence table adodb_seq $this->Execute(sprintf($this->_genSeqSQL ,$seqtab)); } $start -= 1; $num = '0'; $ok = $this->Execute("insert into adodb_seq values('$seq',$start)"); if (!$ok) return false; } $ok = $this->Execute("update adodb_seq set seq_value=seq_value+1 where seq_name='$seq'"); if($ok) { $num += 1; $this->genID = $num; return $num; } } if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); } return false; } //example for $UserOrDSN //for visual fox : DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBF;SOURCEDB=c:\YourDbfFileDir;EXCLUSIVE=NO; //for visual fox dbc: DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBC;SOURCEDB=c:\YourDbcFileDir\mydb.dbc;EXCLUSIVE=NO; //for access : DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\path_to_access_db\base_test.mdb;UID=root;PWD=; //for mssql : DRIVER={SQL Server};SERVER=myserver;UID=myuid;PWD=mypwd;DATABASE=OdbtpTest; //if uid & pwd can be separate function _connect($HostOrInterface, $UserOrDSN='', $argPassword='', $argDatabase='') { $this->_connectionID = @odbtp_connect($HostOrInterface,$UserOrDSN,$argPassword,$argDatabase); if ($this->_connectionID === false) { $this->_errorMsg = $this->ErrorMsg() ; return false; } if ($this->_dontPoolDBC) { if (function_exists('odbtp_dont_pool_dbc')) @odbtp_dont_pool_dbc($this->_connectionID); } else { $this->_dontPoolDBC = true; } $this->odbc_driver = @odbtp_get_attr(ODB_ATTR_DRIVER, $this->_connectionID); $dbms = strtolower(@odbtp_get_attr(ODB_ATTR_DBMSNAME, $this->_connectionID)); $this->odbc_name = $dbms; // Account for inconsistent DBMS names if( $this->odbc_driver == ODB_DRIVER_ORACLE ) $dbms = 'oracle'; else if( $this->odbc_driver == ODB_DRIVER_SYBASE ) $dbms = 'sybase'; // Set DBMS specific attributes switch( $dbms ) { case 'microsoft sql server': $this->databaseType = 'odbtp_mssql'; $this->fmtDate = "'Y-m-d'"; $this->fmtTimeStamp = "'Y-m-d h:i:sA'"; $this->sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; $this->sysTimeStamp = 'GetDate()'; $this->ansiOuter = true; $this->leftOuter = '*='; $this->rightOuter = '=*'; $this->hasTop = 'top'; $this->hasInsertID = true; $this->hasTransactions = true; $this->_bindInputArray = true; $this->_canSelectDb = true; $this->substr = "substring"; $this->length = 'len'; $this->identitySQL = 'select @@IDENTITY'; $this->metaDatabasesSQL = "select name from master..sysdatabases where name <> 'master'"; $this->_canPrepareSP = true; break; case 'access': $this->databaseType = 'odbtp_access'; $this->fmtDate = "#Y-m-d#"; $this->fmtTimeStamp = "#Y-m-d h:i:sA#"; $this->sysDate = "FORMAT(NOW,'yyyy-mm-dd')"; $this->sysTimeStamp = 'NOW'; $this->hasTop = 'top'; $this->hasTransactions = false; $this->_canPrepareSP = true; // For MS Access only. break; case 'visual foxpro': $this->databaseType = 'odbtp_vfp'; $this->fmtDate = "{^Y-m-d}"; $this->fmtTimeStamp = "{^Y-m-d, h:i:sA}"; $this->sysDate = 'date()'; $this->sysTimeStamp = 'datetime()'; $this->ansiOuter = true; $this->hasTop = 'top'; $this->hasTransactions = false; $this->replaceQuote = "'+chr(39)+'"; $this->true = '.T.'; $this->false = '.F.'; break; case 'oracle': $this->databaseType = 'odbtp_oci8'; $this->fmtDate = "'Y-m-d 00:00:00'"; $this->fmtTimeStamp = "'Y-m-d h:i:sA'"; $this->sysDate = 'TRUNC(SYSDATE)'; $this->sysTimeStamp = 'SYSDATE'; $this->hasTransactions = true; $this->_bindInputArray = true; $this->concat_operator = '||'; break; case 'sybase': $this->databaseType = 'odbtp_sybase'; $this->fmtDate = "'Y-m-d'"; $this->fmtTimeStamp = "'Y-m-d H:i:s'"; $this->sysDate = 'GetDate()'; $this->sysTimeStamp = 'GetDate()'; $this->leftOuter = '*='; $this->rightOuter = '=*'; $this->hasInsertID = true; $this->hasTransactions = true; $this->identitySQL = 'select @@IDENTITY'; break; default: $this->databaseType = 'odbtp'; if( @odbtp_get_attr(ODB_ATTR_TXNCAPABLE, $this->_connectionID) ) $this->hasTransactions = true; else $this->hasTransactions = false; } @odbtp_set_attr(ODB_ATTR_FULLCOLINFO, TRUE, $this->_connectionID ); if ($this->_useUnicodeSQL ) @odbtp_set_attr(ODB_ATTR_UNICODESQL, TRUE, $this->_connectionID); return true; } function _pconnect($HostOrInterface, $UserOrDSN='', $argPassword='', $argDatabase='') { $this->_dontPoolDBC = false; return $this->_connect($HostOrInterface, $UserOrDSN, $argPassword, $argDatabase); } function SelectDB($dbName) { if (!@odbtp_select_db($dbName, $this->_connectionID)) { return false; } $this->databaseName = $dbName; return true; } function &MetaTables($ttype='',$showSchema=false,$mask=false) { global $ADODB_FETCH_MODE; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savefm = $this->SetFetchMode(false); $arr =& $this->GetArray("||SQLTables||||$ttype"); if (isset($savefm)) $this->SetFetchMode($savefm); $ADODB_FETCH_MODE = $savem; $arr2 = array(); for ($i=0; $i < sizeof($arr); $i++) { if ($arr[$i][3] == 'SYSTEM TABLE' ) continue; if ($arr[$i][2]) $arr2[] = $showSchema ? $arr[$i][1].'.'.$arr[$i][2] : $arr[$i][2]; } return $arr2; } function &MetaColumns($table,$upper=true) { global $ADODB_FETCH_MODE; $schema = false; $this->_findschema($table,$schema); if ($upper) $table = strtoupper($table); $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savefm = $this->SetFetchMode(false); $rs = $this->Execute( "||SQLColumns||$schema|$table" ); if (isset($savefm)) $this->SetFetchMode($savefm); $ADODB_FETCH_MODE = $savem; if (!$rs || $rs->EOF) { $false = false; return $false; } while (!$rs->EOF) { //print_r($rs->fields); if (strtoupper($rs->fields[2]) == $table) { $fld = new ADOFieldObject(); $fld->name = $rs->fields[3]; $fld->type = $rs->fields[5]; $fld->max_length = $rs->fields[6]; $fld->not_null = !empty($rs->fields[9]); $fld->scale = $rs->fields[7]; if (!is_null($rs->fields[12])) { $fld->has_default = true; $fld->default_value = $rs->fields[12]; } $retarr[strtoupper($fld->name)] = $fld; } else if (sizeof($retarr)>0) break; $rs->MoveNext(); } $rs->Close(); return $retarr; } function &MetaPrimaryKeys($table, $owner='') { global $ADODB_FETCH_MODE; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $arr =& $this->GetArray("||SQLPrimaryKeys||$owner|$table"); $ADODB_FETCH_MODE = $savem; //print_r($arr); $arr2 = array(); for ($i=0; $i < sizeof($arr); $i++) { if ($arr[$i][3]) $arr2[] = $arr[$i][3]; } return $arr2; } function &MetaForeignKeys($table, $owner='', $upper=false) { global $ADODB_FETCH_MODE; $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $constraints =& $this->GetArray("||SQLForeignKeys|||||$owner|$table"); $ADODB_FETCH_MODE = $savem; $arr = false; foreach($constraints as $constr) { //print_r($constr); $arr[$constr[11]][$constr[2]][] = $constr[7].'='.$constr[3]; } if (!$arr) { $false = false; return $false; } $arr2 = array(); foreach($arr as $k => $v) { foreach($v as $a => $b) { if ($upper) $a = strtoupper($a); $arr2[$a] = $b; } } return $arr2; } function BeginTrans() { if (!$this->hasTransactions) return false; if ($this->transOff) return true; $this->transCnt += 1; $this->autoCommit = false; if (defined('ODB_TXN_DEFAULT')) $txn = ODB_TXN_DEFAULT; else $txn = ODB_TXN_READUNCOMMITTED; $rs = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS,$txn,$this->_connectionID); if(!$rs) return false; return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $this->autoCommit = true; if( ($ret = @odbtp_commit($this->_connectionID)) ) $ret = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS, ODB_TXN_NONE, $this->_connectionID);//set transaction off return $ret; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->autoCommit = true; if( ($ret = @odbtp_rollback($this->_connectionID)) ) $ret = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS, ODB_TXN_NONE, $this->_connectionID);//set transaction off return $ret; } function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { // TOP requires ORDER BY for Visual FoxPro if( $this->odbc_driver == ODB_DRIVER_FOXPRO ) { if (!preg_match('/ORDER[ \t\r\n]+BY/is',$sql)) $sql .= ' ORDER BY 1'; } return ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); } function Prepare($sql) { if (! $this->_bindInputArray) return $sql; // no binding $stmt = @odbtp_prepare($sql,$this->_connectionID); if (!$stmt) { // print "Prepare Error for ($sql) ".$this->ErrorMsg()."
"; return $sql; } return array($sql,$stmt,false); } function PrepareSP($sql) { if (!$this->_canPrepareSP) return $sql; // Can't prepare procedures $stmt = @odbtp_prepare_proc($sql,$this->_connectionID); if (!$stmt) return false; return array($sql,$stmt); } /* Usage: $stmt = $db->PrepareSP('SP_RUNSOMETHING'); -- takes 2 params, @myid and @group # note that the parameter does not have @ in front! $db->Parameter($stmt,$id,'myid'); $db->Parameter($stmt,$group,'group',false,64); $db->Parameter($stmt,$group,'photo',false,100000,ODB_BINARY); $db->Execute($stmt); @param $stmt Statement returned by Prepare() or PrepareSP(). @param $var PHP variable to bind to. Can set to null (for isNull support). @param $name Name of stored procedure variable name to bind to. @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in odbtp. @param [$maxLen] Holds an maximum length of the variable. @param [$type] The data type of $var. Legal values depend on driver. See odbtp_attach_param documentation at http://odbtp.sourceforge.net. */ function Parameter(&$stmt, &$var, $name, $isOutput=false, $maxLen=0, $type=0) { if ( $this->odbc_driver == ODB_DRIVER_JET ) { $name = '['.$name.']'; if( !$type && $this->_useUnicodeSQL && @odbtp_param_bindtype($stmt[1], $name) == ODB_CHAR ) { $type = ODB_WCHAR; } } else { $name = '@'.$name; } return @odbtp_attach_param($stmt[1], $name, $var, $type, $maxLen); } /* Insert a null into the blob field of the table first. Then use UpdateBlob to store the blob. Usage: $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); */ function UpdateBlob($table,$column,$val,$where,$blobtype='image') { $sql = "UPDATE $table SET $column = ? WHERE $where"; if( !($stmt = @odbtp_prepare($sql, $this->_connectionID)) ) return false; if( !@odbtp_input( $stmt, 1, ODB_BINARY, 1000000, $blobtype ) ) return false; if( !@odbtp_set( $stmt, 1, $val ) ) return false; return @odbtp_execute( $stmt ) != false; } function IfNull( $field, $ifNull ) { switch( $this->odbc_driver ) { case ODB_DRIVER_MSSQL: return " ISNULL($field, $ifNull) "; case ODB_DRIVER_JET: return " IIF(IsNull($field), $ifNull, $field) "; } return " CASE WHEN $field is null THEN $ifNull ELSE $field END "; } function _query($sql,$inputarr=false) { if ($inputarr) { if (is_array($sql)) { $stmtid = $sql[1]; } else { $stmtid = @odbtp_prepare($sql,$this->_connectionID); if ($stmtid == false) { $this->_errorMsg = $php_errormsg; return false; } } $num_params = @odbtp_num_params( $stmtid ); for( $param = 1; $param <= $num_params; $param++ ) { @odbtp_input( $stmtid, $param ); @odbtp_set( $stmtid, $param, $inputarr[$param-1] ); } if (!@odbtp_execute($stmtid) ) { return false; } } else if (is_array($sql)) { $stmtid = $sql[1]; if (!@odbtp_execute($stmtid)) { return false; } } else { $stmtid = @odbtp_query($sql,$this->_connectionID); } $this->_lastAffectedRows = 0; if ($stmtid) { $this->_lastAffectedRows = @odbtp_affected_rows($stmtid); } return $stmtid; } function _close() { $ret = @odbtp_close($this->_connectionID); $this->_connectionID = false; return $ret; } } class ADORecordSet_odbtp extends ADORecordSet { var $databaseType = 'odbtp'; var $canSeek = true; function ADORecordSet_odbtp($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; $this->ADORecordSet($queryID); } function _initrs() { $this->_numOfFields = @odbtp_num_fields($this->_queryID); if (!($this->_numOfRows = @odbtp_num_rows($this->_queryID))) $this->_numOfRows = -1; if (!$this->connection->_useUnicodeSQL) return; if ($this->connection->odbc_driver == ODB_DRIVER_JET) { if (!@odbtp_get_attr(ODB_ATTR_MAPCHARTOWCHAR, $this->connection->_connectionID)) { for ($f = 0; $f < $this->_numOfFields; $f++) { if (@odbtp_field_bindtype($this->_queryID, $f) == ODB_CHAR) @odbtp_bind_field($this->_queryID, $f, ODB_WCHAR); } } } } function &FetchField($fieldOffset = 0) { $off=$fieldOffset; // offsets begin at 0 $o= new ADOFieldObject(); $o->name = @odbtp_field_name($this->_queryID,$off); $o->type = @odbtp_field_type($this->_queryID,$off); $o->max_length = @odbtp_field_length($this->_queryID,$off); if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); return $o; } function _seek($row) { return @odbtp_data_seek($this->_queryID, $row); } function fields($colname) { if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $name = @odbtp_field_name( $this->_queryID, $i ); $this->bind[strtoupper($name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _fetch_odbtp($type=0) { switch ($this->fetchMode) { case ADODB_FETCH_NUM: $this->fields = @odbtp_fetch_row($this->_queryID, $type); break; case ADODB_FETCH_ASSOC: $this->fields = @odbtp_fetch_assoc($this->_queryID, $type); break; default: $this->fields = @odbtp_fetch_array($this->_queryID, $type); } return is_array($this->fields); } function _fetch() { return $this->_fetch_odbtp(); } function MoveFirst() { if (!$this->_fetch_odbtp(ODB_FETCH_FIRST)) return false; $this->EOF = false; $this->_currentRow = 0; return true; } function MoveLast() { if (!$this->_fetch_odbtp(ODB_FETCH_LAST)) return false; $this->EOF = false; $this->_currentRow = $this->_numOfRows - 1; return true; } function NextRecordSet() { if (!@odbtp_next_result($this->_queryID)) return false; $this->_inited = false; $this->bind = false; $this->_currentRow = -1; $this->Init(); return true; } function _close() { return @odbtp_free_query($this->_queryID); } } class ADORecordSet_odbtp_mssql extends ADORecordSet_odbtp { var $databaseType = 'odbtp_mssql'; function ADORecordSet_odbtp_mssql($id,$mode=false) { return $this->ADORecordSet_odbtp($id,$mode); } } class ADORecordSet_odbtp_access extends ADORecordSet_odbtp { var $databaseType = 'odbtp_access'; function ADORecordSet_odbtp_access($id,$mode=false) { return $this->ADORecordSet_odbtp($id,$mode); } } class ADORecordSet_odbtp_vfp extends ADORecordSet_odbtp { var $databaseType = 'odbtp_vfp'; function ADORecordSet_odbtp_vfp($id,$mode=false) { return $this->ADORecordSet_odbtp($id,$mode); } } class ADORecordSet_odbtp_oci8 extends ADORecordSet_odbtp { var $databaseType = 'odbtp_oci8'; function ADORecordSet_odbtp_oci8($id,$mode=false) { return $this->ADORecordSet_odbtp($id,$mode); } } class ADORecordSet_odbtp_sybase extends ADORecordSet_odbtp { var $databaseType = 'odbtp_sybase'; function ADORecordSet_odbtp_sybase($id,$mode=false) { return $this->ADORecordSet_odbtp($id,$mode); } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-odbtp_unicode.inc.php 777 0 0 2224 10142745764 23102 0 // security - hide paths if (!defined('ADODB_DIR')) die(); /* Because the ODBTP server sends and reads UNICODE text data using UTF-8 encoding, the following HTML meta tag must be included within the HTML head section of every HTML form and script page: Also, all SQL query strings must be submitted as UTF-8 encoded text. */ if (!defined('_ADODB_ODBTP_LAYER')) { include(ADODB_DIR."/drivers/adodb-odbtp.inc.php"); } class ADODB_odbtp_unicode extends ADODB_odbtp { var $databaseType = 'odbtp'; var $_useUnicodeSQL = true; function ADODB_odbtp_unicode() { $this->ADODB_odbtp(); } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-oracle.inc.php 777 0 0 22126 10142745764 21554 0fmtDate,$d).",'YYYY-MM-DD')"; } // format and return date string in database timestamp format function DBTimeStamp($ts) { if (is_string($ts)) $d = ADORecordSet::UnixTimeStamp($ts); return 'TO_DATE('.adodb_date($this->fmtTimeStamp,$ts).",'RRRR-MM-DD, HH:MI:SS AM')"; } function BeginTrans() { $this->autoCommit = false; ora_commitoff($this->_connectionID); return true; } function CommitTrans($ok=true) { if (!$ok) return $this->RollbackTrans(); $ret = ora_commit($this->_connectionID); ora_commiton($this->_connectionID); return $ret; } function RollbackTrans() { $ret = ora_rollback($this->_connectionID); ora_commiton($this->_connectionID); return $ret; } /* there seems to be a bug in the oracle extension -- always returns ORA-00000 - no error */ function ErrorMsg() { if ($this->_errorMsg !== false) return $this->_errorMsg; if (is_resource($this->_curs)) $this->_errorMsg = @ora_error($this->_curs); if (empty($this->_errorMsg)) $this->_errorMsg = @ora_error($this->_connectionID); return $this->_errorMsg; } function ErrorNo() { if ($this->_errorCode !== false) return $this->_errorCode; if (is_resource($this->_curs)) $this->_errorCode = @ora_errorcode($this->_curs); if (empty($this->_errorCode)) $this->_errorCode = @ora_errorcode($this->_connectionID); return $this->_errorCode; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename, $mode=0) { if (!function_exists('ora_plogon')) return null; // Reset error messages before connecting $this->_errorMsg = false; $this->_errorCode = false; // G. Giunta 2003/08/13 - This looks danegrously suspicious: why should we want to set // the oracle home to the host name of remote DB? // if ($argHostname) putenv("ORACLE_HOME=$argHostname"); if($argHostname) { // code copied from version submitted for oci8 by Jorma Tuomainen if (empty($argDatabasename)) $argDatabasename = $argHostname; else { if(strpos($argHostname,":")) { $argHostinfo=explode(":",$argHostname); $argHostname=$argHostinfo[0]; $argHostport=$argHostinfo[1]; } else { $argHostport="1521"; } if ($this->connectSID) { $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))"; } else $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))"; } } if ($argDatabasename) $argUsername .= "@$argDatabasename"; //if ($argHostname) print "

Connect: 1st argument should be left blank for $this->databaseType

"; if ($mode = 1) $this->_connectionID = ora_plogon($argUsername,$argPassword); else $this->_connectionID = ora_logon($argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($this->autoCommit) ora_commiton($this->_connectionID); if ($this->_initdate) { $rs = $this->_query("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'"); if ($rs) ora_close($rs); } return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, 1); } // returns query ID if successful, otherwise false function _query($sql,$inputarr=false) { // Reset error messages before executing $this->_errorMsg = false; $this->_errorCode = false; $curs = ora_open($this->_connectionID); if ($curs === false) return false; $this->_curs = $curs; if (!ora_parse($curs,$sql)) return false; if (ora_exec($curs)) return $curs; // before we close the cursor, we have to store the error message // that we can obtain ONLY from the cursor (and not from the connection) $this->_errorCode = @ora_errorcode($curs); $this->_errorMsg = @ora_error($curs); // @ora_close($curs); return false; } // returns true or false function _close() { return @ora_logoff($this->_connectionID); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_oracle extends ADORecordSet { var $databaseType = "oracle"; var $bind = false; function ADORecordset_oracle($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } $this->fetchMode = $mode; $this->_queryID = $queryID; $this->_inited = true; $this->fields = array(); if ($queryID) { $this->_currentRow = 0; $this->EOF = !$this->_fetch(); @$this->_initrs(); } else { $this->_numOfRows = 0; $this->_numOfFields = 0; $this->EOF = true; } return $this->_queryID; } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by fetchField() is retrieved. */ function FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; $fld->name = ora_columnname($this->_queryID, $fieldOffset); $fld->type = ora_columntype($this->_queryID, $fieldOffset); $fld->max_length = ora_columnsize($this->_queryID, $fieldOffset); return $fld; } /* Use associative array to get fields array */ function Fields($colname) { if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _initrs() { $this->_numOfRows = -1; $this->_numOfFields = @ora_numcols($this->_queryID); } function _seek($row) { return false; } function _fetch($ignore_fields=false) { // should remove call by reference, but ora_fetch_into requires it in 4.0.3pl1 if ($this->fetchMode & ADODB_FETCH_ASSOC) return @ora_fetch_into($this->_queryID,&$this->fields,ORA_FETCHINTO_NULLS|ORA_FETCHINTO_ASSOC); else return @ora_fetch_into($this->_queryID,&$this->fields,ORA_FETCHINTO_NULLS); } /* close() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed. */ function _close() { return @ora_close($this->_queryID); } function MetaType($t,$len=-1) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } switch (strtoupper($t)) { case 'VARCHAR': case 'VARCHAR2': case 'CHAR': case 'VARBINARY': case 'BINARY': if ($len <= $this->blobSize) return 'C'; case 'LONG': case 'LONG VARCHAR': case 'CLOB': return 'X'; case 'LONG RAW': case 'LONG VARBINARY': case 'BLOB': return 'B'; case 'DATE': return 'D'; //case 'T': return 'T'; case 'BIT': return 'L'; case 'INT': case 'SMALLINT': case 'INTEGER': return 'I'; default: return 'N'; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-pdo.inc.php 777 0 0 17264 10142745764 21100 0_connectionID = new PDO($argDSN, $argUsername, $argPassword); if ($this->_connectionID) { switch(ADODB_ASSOC_CASE){ case 0: $m = PDO_CASE_LOWER; break; case 1: $m = PDO_CASE_UPPER; break; default: case 2: $m = PDO_CASE_NATURAL; break; } //$this->_connectionID->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_SILENT ); $this->_connectionID->setAttribute(PDO_ATTR_CASE,$m); //$this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,true); return true; } return false; } // returns true or false function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename) { return $this->_connect($argDSN, $argUsername, $argPassword, $argDatabasename, true); } function ErrorMsg() { if ($this->_stmt) $arr = $this->_stmt->errorInfo(); else $arr = $this->_connectionID->errorInfo(); if ($arr) { if ($arr[0]) return $arr[2]; else return ''; } else return '-1'; } function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) { $obj = $stmt[1]; if ($type) $obj->bindParam($name,$var,$type,$maxLen); else $obj->bindParam($name, $var); } function ErrorNo() { if ($this->_stmt) return $this->_stmt->errorCode(); else return $this->_connectionID->errorInfo(); } function BeginTrans() { if (!$this->hasTransactions) return false; if ($this->transOff) return true; $this->transCnt += 1; $this->_autocommit = false; $this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,false); return $this->_connectionID->beginTransaction(); } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); if ($this->transCnt) $this->transCnt -= 1; $this->_autocommit = true; $ret = $this->_connectionID->commit(); $this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,true); return $ret; } function RollbackTrans() { if ($this->transOff) return true; if ($this->transCnt) $this->transCnt -= 1; $this->_autocommit = true; $ret = $this->_connectionID->rollback(); $this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,true); return $ret; } function Prepare($sql) { $this->_stmt = $this->_connectionID->prepare($sql); if ($this->_stmt) return array($sql,$this->_stmt); return false; } function PrepareStmt($sql) { $stmt = $this->_connectionID->prepare($sql); if (!$stmt) return false; $obj = new ADOPDOStatement($stmt,$this); return $obj; } /* returns queryID or false */ function _query($sql,$inputarr=false) { if (is_array($sql)) { $stmt = $sql[1]; } else { $stmt = $this->_connectionID->prepare($sql); } if ($stmt) { if ($inputarr) $stmt->execute($inputarr); else $stmt->execute(); } $this->_stmt = $stmt; return $stmt; } // returns true or false function _close() { $this->_stmt = false; return true; } function _affectedrows() { return ($this->_stmt) ? $this->_stmt->rowCount() : 0; } function _insertid() { return ($this->_connectionID) ? $this->_connectionID->lastInsertId() : 0; } } class ADOPDOStatement { var $databaseType = "pdo"; var $dataProvider = "pdo"; var $_stmt; var $_connectionID; function ADOPDOStatement($stmt,$connection) { $this->_stmt = $stmt; $this->_connectionID = $connection; } function Execute($inputArr=false) { $savestmt = $this->_connectionID->_stmt; $rs = $this->_connectionID->Execute(array(false,$this->_stmt),$inputArr); $this->_connectionID->_stmt = $savestmt; return $rs; } function InParameter(&$var,$name,$maxLen=4000,$type=false) { if ($type) $this->_stmt->bindParam($name,$var,$type,$maxLen); else $this->_stmt->bindParam($name, $var); } function Affected_Rows() { return ($this->_stmt) ? $this->_stmt->rowCount() : 0; } function ErrorMsg() { if ($this->_stmt) $arr = $this->_stmt->errorInfo(); else $arr = $this->_connectionID->errorInfo(); print_r($arr); if ($arr) { if ($arr[0]) return $arr[2]; else return ''; } else return '-1'; } function ErrorNo() { if ($this->_stmt) return $this->_stmt->errorCode(); else return $this->_connectionID->errorInfo(); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_pdo extends ADORecordSet { var $bind = false; var $databaseType = "pdo"; var $dataProvider = "pdo"; function ADORecordSet_pdo($id,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch($mode) { default: case ADODB_FETCH_BOTH: $mode = PDO_FETCH_BOTH; break; case ADODB_FETCH_NUM: $mode = PDO_FETCH_NUM; break; case ADODB_FETCH_ASSOC: $mode = PDO_FETCH_ASSOC; break; } $this->fetchMode = $mode; $this->_queryID = $id; $this->ADORecordSet($id); } // returns the field object function &FetchField($fieldOffset = -1) { $off=$fieldOffset+1; // offsets begin at 1 $o= new ADOFieldObject(); $o->name = @odbc_field_name($this->_queryID,$off); $o->type = @odbc_field_type($this->_queryID,$off); $o->max_length = @odbc_field_len($this->_queryID,$off); if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name); else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name); return $o; } function Init() { if ($this->_inited) return; $this->_inited = true; if ($this->_queryID) @$this->_initrs(); else { $this->_numOfRows = 0; $this->_numOfFields = 0; } if ($this->_numOfRows != 0 && $this->_currentRow == -1) { $this->_currentRow = 0; if ($this->EOF = ($this->_fetch() === false)) { $this->_numOfRows = 0; // _numOfRows could be -1 } $this->_numOfFields = sizeof($this->fields); } else { $this->EOF = true; } } function _initrs() { global $ADODB_COUNTRECS; $this->_numOfRows = ($ADODB_COUNTRECS) ? @$this->_queryID->rowCount() : -1; if (!$this->_numOfRows) $this->_numOfRows = -1; $this->_numOfFields =0; } function _seek($row) { return false; } function _fetch() { $this->fields = $this->_queryID->fetch($this->fetchMode); return !empty($this->fields); } function _close() { $this->_queryID = false; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-postgres.inc.php 777 0 0 1023 10142745764 22126 0aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-postgres64.inc.php 777 0 0 74123 10142745764 22333 0 jlim - changed concat operator to || and data types to MetaType to match documented pgsql types see http://www.postgresql.org/devel-corner/docs/postgres/datatype.htm 22 Nov 2000 jlim - added changes to FetchField() and MetaTables() contributed by "raser" 27 Nov 2000 jlim - added changes to _connect/_pconnect from ideas by "Lennie" 15 Dec 2000 jlim - added changes suggested by Additional code changes by "Eric G. Werk" egw@netguide.dk. 31 Jan 2002 jlim - finally installed postgresql. testing 01 Mar 2001 jlim - Freek Dijkstra changes, also support for text type See http://www.varlena.com/varlena/GeneralBits/47.php -- What indexes are on my table? select * from pg_indexes where tablename = 'tablename'; -- What triggers are on my table? select c.relname as "Table", t.tgname as "Trigger Name", t.tgconstrname as "Constraint Name", t.tgenabled as "Enabled", t.tgisconstraint as "Is Constraint", cc.relname as "Referenced Table", p.proname as "Function Name" from pg_trigger t, pg_class c, pg_class cc, pg_proc p where t.tgfoid = p.oid and t.tgrelid = c.oid and t.tgconstrrelid = cc.oid and c.relname = 'tablename'; -- What constraints are on my table? select r.relname as "Table", c.conname as "Constraint Name", contype as "Constraint Type", conkey as "Key Columns", confkey as "Foreign Columns", consrc as "Source" from pg_class r, pg_constraint c where r.oid = c.conrelid and relname = 'tablename'; */ // security - hide paths if (!defined('ADODB_DIR')) die(); function adodb_addslashes($s) { $len = strlen($s); if ($len == 0) return "''"; if (strncmp($s,"'",1) === 0 && substr(s,$len-1) == "'") return $s; // already quoted return "'".addslashes($s)."'"; } class ADODB_postgres64 extends ADOConnection{ var $databaseType = 'postgres64'; var $dataProvider = 'postgres'; var $hasInsertID = true; var $_resultid = false; var $concat_operator='||'; var $metaDatabasesSQL = "select datname from pg_database where datname not in ('template0','template1') order by 1"; var $metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' and tablename not in ('sql_features', 'sql_implementation_info', 'sql_languages', 'sql_packages', 'sql_sizing', 'sql_sizing_profiles') union select viewname,'V' from pg_views where viewname not like 'pg\_%'"; //"select tablename from pg_tables where tablename not like 'pg_%' order by 1"; var $isoDates = true; // accepts dates in ISO format var $sysDate = "CURRENT_DATE"; var $sysTimeStamp = "CURRENT_TIMESTAMP"; var $blobEncodeType = 'C'; var $metaColumnsSQL = "SELECT a.attname,t.typname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,a.attnum FROM pg_class c, pg_attribute a,pg_type t WHERE relkind = 'r' AND (c.relname='%s' or c.relname = lower('%s')) and a.attname not like '....%%' AND a.attnum > 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE relkind = 'r' AND (c.relname='%s' or c.relname = lower('%s')) and c.relnamespace=n.oid and n.nspname='%s' and a.attname not like '....%%' AND a.attnum > 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; // get primary key etc -- from Freek Dijkstra var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) AND a.attrelid = bc.oid AND bc.relname = '%s'"; var $hasAffectedRows = true; var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10 // below suggested by Freek Dijkstra var $true = 't'; // string that represents TRUE for a database var $false = 'f'; // string that represents FALSE for a database var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt. var $hasMoveFirst = true; var $hasGenID = true; var $_genIDSQL = "SELECT NEXTVAL('%s')"; var $_genSeqSQL = "CREATE SEQUENCE %s START %s"; var $_dropSeqSQL = "DROP SEQUENCE %s"; var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum"; var $random = 'random()'; /// random function var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4 // http://bugs.php.net/bug.php?id=25404 var $_bindInputArray = false; // requires postgresql 7.3+ and ability to modify database // The last (fmtTimeStamp is not entirely correct: // PostgreSQL also has support for time zones, // and writes these time in this format: "2001-03-01 18:59:26+02". // There is no code for the "+02" time zone information, so I just left that out. // I'm not familiar enough with both ADODB as well as Postgres // to know what the concequences are. The other values are correct (wheren't in 0.94) // -- Freek Dijkstra function ADODB_postgres64() { // changes the metaColumnsSQL, adds columns: attnum[6] } function ServerInfo() { if (isset($this->version)) return $this->version; $arr['description'] = $this->GetOne("select version()"); $arr['version'] = ADOConnection::_findvers($arr['description']); $this->version = $arr; return $arr; } function IfNull( $field, $ifNull ) { return " coalesce($field, $ifNull) "; } // get the last id - never tested function pg_insert_id($tablename,$fieldname) { $result=pg_exec($this->_connectionID, "SELECT last_value FROM ${tablename}_${fieldname}_seq"); if ($result) { $arr = @pg_fetch_row($result,0); pg_freeresult($result); if (isset($arr[0])) return $arr[0]; } return false; } /* Warning from http://www.php.net/manual/function.pg-getlastoid.php: Using a OID as a unique identifier is not generally wise. Unless you are very careful, you might end up with a tuple having a different OID if a database must be reloaded. */ function _insertid($table,$column) { if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; $oid = pg_getlastoid($this->_resultid); // to really return the id, we need the table and column-name, else we can only return the oid != id return empty($table) || empty($column) ? $oid : $this->GetOne("SELECT $column FROM $table WHERE oid=".(int)$oid); } // I get this error with PHP before 4.0.6 - jlim // Warning: This compilation does not support pg_cmdtuples() in d:/inetpub/wwwroot/php/adodb/adodb-postgres.inc.php on line 44 function _affectedrows() { if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; return pg_cmdtuples($this->_resultid); } // returns true/false function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; return @pg_Exec($this->_connectionID, "begin"); } function RowLock($tables,$where) { if (!$this->transCnt) $this->BeginTrans(); return $this->GetOne("select 1 as ignore from $tables where $where for update"); } // returns true/false. function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); $this->transCnt -= 1; return @pg_Exec($this->_connectionID, "commit"); } // returns true/false function RollbackTrans() { if ($this->transOff) return true; $this->transCnt -= 1; return @pg_Exec($this->_connectionID, "rollback"); } function &MetaTables($ttype=false,$showSchema=false,$mask=false) { $info = $this->ServerInfo(); if ($info['version'] >= 7.3) { $this->metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema') union select viewname,'V' from pg_views where viewname not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema') "; } if ($mask) { $save = $this->metaTablesSQL; $mask = $this->qstr(strtolower($mask)); if ($info['version']>=7.3) $this->metaTablesSQL = " select tablename,'T' from pg_tables where tablename like $mask and schemaname not in ( 'pg_catalog','information_schema') union select viewname,'V' from pg_views where viewname like $mask and schemaname not in ( 'pg_catalog','information_schema') "; else $this->metaTablesSQL = " select tablename,'T' from pg_tables where tablename like $mask union select viewname,'V' from pg_views where viewname like $mask"; } $ret =& ADOConnection::MetaTables($ttype,$showSchema); if ($mask) { $this->metaTablesSQL = $save; } return $ret; } /* // if magic quotes disabled, use pg_escape_string() function qstr($s,$magic_quotes=false) { if (!$magic_quotes) { if (ADODB_PHPVER >= 0x4200) { return "'".pg_escape_string($s)."'"; } if ($this->replaceQuote[0] == '\\'){ $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); } return "'".str_replace("'",$this->replaceQuote,$s)."'"; } // undo magic quotes for " $s = str_replace('\\"','"',$s); return "'$s'"; } */ // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = 'TO_CHAR('.$col.",'"; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= 'YYYY'; break; case 'Q': case 'q': $s .= 'Q'; break; case 'M': $s .= 'Mon'; break; case 'm': $s .= 'MM'; break; case 'D': case 'd': $s .= 'DD'; break; case 'H': $s.= 'HH24'; break; case 'h': $s .= 'HH'; break; case 'i': $s .= 'MI'; break; case 's': $s .= 'SS'; break; case 'a': case 'A': $s .= 'AM'; break; default: // handle escape characters... if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } if (strpos('-/.:;, ',$ch) !== false) $s .= $ch; else $s .= '"'.$ch.'"'; } } return $s. "')"; } /* * Load a Large Object from a file * - the procedure stores the object id in the table and imports the object using * postgres proprietary blob handling routines * * contributed by Mattia Rossi mattia@technologist.com * modified for safe mode by juraj chlebec */ function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') { pg_exec ($this->_connectionID, "begin"); $fd = fopen($path,'r'); $contents = fread($fd,filesize($path)); fclose($fd); $oid = pg_lo_create($this->_connectionID); $handle = pg_lo_open($this->_connectionID, $oid, 'w'); pg_lo_write($handle, $contents); pg_lo_close($handle); // $oid = pg_lo_import ($path); pg_exec($this->_connectionID, "commit"); $rs = ADOConnection::UpdateBlob($table,$column,$oid,$where,$blobtype); $rez = !empty($rs); return $rez; } /* Hueristic - not guaranteed to work. */ function GuessOID($oid) { if (strlen($oid)>16) return false; return is_numeric($oid); } /* * If an OID is detected, then we use pg_lo_* to open the oid file and read the * real blob from the db using the oid supplied as a parameter. If you are storing * blobs using bytea, we autodetect and process it so this function is not needed. * * contributed by Mattia Rossi mattia@technologist.com * * see http://www.postgresql.org/idocs/index.php?largeobjects.html * * Since adodb 4.54, this returns the blob, instead of sending it to stdout. Also * added maxsize parameter, which defaults to $db->maxblobsize if not defined. */ function BlobDecode($blob,$maxsize=false,$hastrans=true) { if (!$this->GuessOID($blob)) return $blob; if ($hastrans) @pg_exec($this->_connectionID,"begin"); $fd = @pg_lo_open($this->_connectionID,$blob,"r"); if ($fd === false) { if ($hastrans) @pg_exec($this->_connectionID,"commit"); return $blob; } if (!$maxsize) $maxsize = $this->maxblobsize; $realblob = @pg_loread($fd,$maxsize); @pg_loclose($fd); if ($hastrans) @pg_exec($this->_connectionID,"commit"); return $realblob; } /* See http://www.postgresql.org/idocs/index.php?datatype-binary.html NOTE: SQL string literals (input strings) must be preceded with two backslashes due to the fact that they must pass through two parsers in the PostgreSQL backend. */ function BlobEncode($blob) { if (ADODB_PHPVER >= 0x4200) return pg_escape_bytea($blob); /*92=backslash, 0=null, 39=single-quote*/ $badch = array(chr(92),chr(0),chr(39)); # \ null ' $fixch = array('\\\\134','\\\\000','\\\\047'); return adodb_str_replace($badch,$fixch,$blob); // note that there is a pg_escape_bytea function only for php 4.2.0 or later } function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') { // do not use bind params which uses qstr(), as blobencode() already quotes data return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where"); } function OffsetDate($dayFraction,$date=false) { if (!$date) $date = $this->sysDate; return "($date+interval'$dayFraction days')"; } // for schema support, pass in the $table param "$schema.$tabname". // converts field names to lowercase, $upper is ignored function &MetaColumns($table,$normalize=true) { global $ADODB_FETCH_MODE; $schema = false; $this->_findschema($table,$schema); if ($normalize) $table = strtolower($table); $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); if ($schema) $rs =& $this->Execute(sprintf($this->metaColumnsSQL1,$table,$table,$schema)); else $rs =& $this->Execute(sprintf($this->metaColumnsSQL,$table,$table)); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if ($rs === false) { $false = false; return $false; } if (!empty($this->metaKeySQL)) { // If we want the primary keys, we have to issue a separate query // Of course, a modified version of the metaColumnsSQL query using a // LEFT JOIN would have been much more elegant, but postgres does // not support OUTER JOINS. So here is the clumsy way. $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rskey = $this->Execute(sprintf($this->metaKeySQL,($table))); // fetch all result in once for performance. $keys =& $rskey->GetArray(); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; $rskey->Close(); unset($rskey); } $rsdefa = array(); if (!empty($this->metaDefaultsSQL)) { $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $sql = sprintf($this->metaDefaultsSQL, ($table)); $rsdef = $this->Execute($sql); if (isset($savem)) $this->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; if ($rsdef) { while (!$rsdef->EOF) { $num = $rsdef->fields['num']; $s = $rsdef->fields['def']; if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */ $s = substr($s, 1); $s = substr($s, 0, strlen($s) - 1); } $rsdefa[$num] = $s; $rsdef->MoveNext(); } } else { ADOConnection::outp( "==> SQL => " . $sql); } unset($rsdef); } $retarr = array(); while (!$rs->EOF) { $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; $fld->max_length = $rs->fields[2]; if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4; if ($fld->max_length <= 0) $fld->max_length = -1; if ($fld->type == 'numeric') { $fld->scale = $fld->max_length & 0xFFFF; $fld->max_length >>= 16; } // dannym // 5 hasdefault; 6 num-of-column $fld->has_default = ($rs->fields[5] == 't'); if ($fld->has_default) { $fld->default_value = $rsdefa[$rs->fields[6]]; } //Freek if ($rs->fields[4] == $this->true) { $fld->not_null = true; } // Freek if (is_array($keys)) { foreach($keys as $key) { if ($fld->name == $key['column_name'] AND $key['primary_key'] == $this->true) $fld->primary_key = true; if ($fld->name == $key['column_name'] AND $key['unique_key'] == $this->true) $fld->unique = true; // What name is more compatible? } } if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld; $rs->MoveNext(); } $rs->Close(); return $retarr; } function &MetaIndexes ($table, $primary = FALSE) { global $ADODB_FETCH_MODE; $schema = false; $this->_findschema($table,$schema); if ($schema) { // requires pgsql 7.3+ - pg_namespace used. $sql = ' SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" FROM pg_catalog.pg_class c JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid ,pg_namespace n WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\')) and c.relnamespace=c2.relnamespace and c.relnamespace=n.oid and n.nspname=\'%s\' AND i.indisprimary=false'; } else { $sql = ' SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" FROM pg_catalog.pg_class c JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid WHERE c2.relname=\'%s\' or c2.relname=lower(\'%s\')'; } if ($primary == FALSE) { $sql .= ' AND i.indisprimary=false;'; } $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } $rs = $this->Execute(sprintf($sql,$table,$table,$schema)); if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; if (!is_object($rs)) { $false = false; return $false; } $col_names = $this->MetaColumnNames($table,true); $indexes = array(); while ($row = $rs->FetchRow()) { $columns = array(); foreach (explode(' ', $row[2]) as $col) { $columns[] = $col_names[$col - 1]; } $indexes[$row[0]] = array( 'unique' => ($row[1] == 't'), 'columns' => $columns ); } return $indexes; } // returns true or false // // examples: // $db->Connect("host=host1 user=user1 password=secret port=4341"); // $db->Connect('host1','user1','secret'); function _connect($str,$user='',$pwd='',$db='',$ctype=0) { if (!function_exists('pg_pconnect')) return null; $this->_errorMsg = false; if ($user || $pwd || $db) { $user = adodb_addslashes($user); $pwd = adodb_addslashes($pwd); if (strlen($db) == 0) $db = 'template1'; $db = adodb_addslashes($db); if ($str) { $host = split(":", $str); if ($host[0]) $str = "host=".adodb_addslashes($host[0]); else $str = 'host=localhost'; if (isset($host[1])) $str .= " port=$host[1]"; } if ($user) $str .= " user=".$user; if ($pwd) $str .= " password=".$pwd; if ($db) $str .= " dbname=".$db; } //if ($user) $linea = "user=$user host=$linea password=$pwd dbname=$db port=5432"; if ($ctype === 1) { // persistent $this->_connectionID = pg_pconnect($str); } else { if ($ctype === -1) { // nconnect, we trick pgsql ext by changing the connection str static $ncnt; if (empty($ncnt)) $ncnt = 1; else $ncnt += 1; $str .= str_repeat(' ',$ncnt); } $this->_connectionID = pg_connect($str); } if ($this->_connectionID === false) return false; $this->Execute("set datestyle='ISO'"); return true; } function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) { return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName,-1); } // returns true or false // // examples: // $db->PConnect("host=host1 user=user1 password=secret port=4341"); // $db->PConnect('host1','user1','secret'); function _pconnect($str,$user='',$pwd='',$db='') { return $this->_connect($str,$user,$pwd,$db,1); } // returns queryID or false function _query($sql,$inputarr) { if ($inputarr) { /* It appears that PREPARE/EXECUTE is slower for many queries. For query executed 1000 times: "select id,firstname,lastname from adoxyz where firstname not like ? and lastname not like ? and id = ?" with plan = 1.51861286163 secs no plan = 1.26903700829 secs */ $plan = 'P'.md5($sql); $execp = ''; foreach($inputarr as $v) { if ($execp) $execp .= ','; if (is_string($v)) { if (strncmp($v,"'",1) !== 0) $execp .= $this->qstr($v); } else { $execp .= $v; } } if ($execp) $exsql = "EXECUTE $plan ($execp)"; else $exsql = "EXECUTE $plan"; $rez = @pg_exec($this->_connectionID,$exsql); if (!$rez) { # Perhaps plan does not exist? Prepare/compile plan. $params = ''; foreach($inputarr as $v) { if ($params) $params .= ','; if (is_string($v)) { $params .= 'VARCHAR'; } else if (is_integer($v)) { $params .= 'INTEGER'; } else { $params .= "REAL"; } } $sqlarr = explode('?',$sql); //print_r($sqlarr); $sql = ''; $i = 1; foreach($sqlarr as $v) { $sql .= $v.' $'.$i; $i++; } $s = "PREPARE $plan ($params) AS ".substr($sql,0,strlen($sql)-2); //adodb_pr($s); pg_exec($this->_connectionID,$s); echo $this->ErrorMsg(); } $rez = pg_exec($this->_connectionID,$exsql); } else { $this->_errorMsg = false; //adodb_backtrace(); $rez = pg_exec($this->_connectionID,$sql); } // check if no data returned, then no need to create real recordset if ($rez && pg_numfields($rez) <= 0) { if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') { pg_freeresult($this->_resultid); } $this->_resultid = $rez; return true; } return $rez; } /* Returns: the last error message from previous database operation */ function ErrorMsg() { if ($this->_errorMsg !== false) return $this->_errorMsg; if (ADODB_PHPVER >= 0x4300) { if (!empty($this->_resultid)) { $this->_errorMsg = @pg_result_error($this->_resultid); if ($this->_errorMsg) return $this->_errorMsg; } if (!empty($this->_connectionID)) { $this->_errorMsg = @pg_last_error($this->_connectionID); } else $this->_errorMsg = @pg_last_error(); } else { if (empty($this->_connectionID)) $this->_errorMsg = @pg_errormessage(); else $this->_errorMsg = @pg_errormessage($this->_connectionID); } return $this->_errorMsg; } function ErrorNo() { $e = $this->ErrorMsg(); if (strlen($e)) { return ADOConnection::MetaError($e); } return 0; } // returns true or false function _close() { if ($this->transCnt) $this->RollbackTrans(); if ($this->_resultid) { @pg_freeresult($this->_resultid); $this->_resultid = false; } @pg_close($this->_connectionID); $this->_connectionID = false; return true; } /* * Maximum size of C field */ function CharMax() { return 1000000000; // should be 1 Gb? } /* * Maximum size of X field */ function TextMax() { return 1000000000; // should be 1 Gb? } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_postgres64 extends ADORecordSet{ var $_blobArr; var $databaseType = "postgres64"; var $canSeek = true; function ADORecordSet_postgres64($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break; case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break; default: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH:$this->fetchMode = PGSQL_BOTH; break; } $this->adodbFetchMode = $mode; $this->ADORecordSet($queryID); } function &GetRowAssoc($upper=true) { if ($this->fetchMode == PGSQL_ASSOC && !$upper) return $this->fields; $row =& ADORecordSet::GetRowAssoc($upper); return $row; } function _initrs() { global $ADODB_COUNTRECS; $qid = $this->_queryID; $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_numrows($qid):-1; $this->_numOfFields = @pg_numfields($qid); // cache types for blob decode check for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { if (pg_fieldtype($qid,$i) == 'bytea') { $this->_blobArr[$i] = pg_fieldname($qid,$i); } } } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode != PGSQL_NUM) return @$this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function &FetchField($off = 0) { // offsets begin at 0 $o= new ADOFieldObject(); $o->name = @pg_fieldname($this->_queryID,$off); $o->type = @pg_fieldtype($this->_queryID,$off); $o->max_length = @pg_fieldsize($this->_queryID,$off); return $o; } function _seek($row) { return @pg_fetch_row($this->_queryID,$row); } function _decode($blob) { eval('$realblob="'.adodb_str_replace(array('"','$'),array('\"','\$'),$blob).'";'); return $realblob; } function _fixblobs() { if ($this->fetchMode == PGSQL_NUM || $this->fetchMode == PGSQL_BOTH) { foreach($this->_blobArr as $k => $v) { $this->fields[$k] = ADORecordSet_postgres64::_decode($this->fields[$k]); } } if ($this->fetchMode == PGSQL_ASSOC || $this->fetchMode == PGSQL_BOTH) { foreach($this->_blobArr as $k => $v) { $this->fields[$v] = ADORecordSet_postgres64::_decode($this->fields[$v]); } } } // 10% speedup to move MoveNext to child class function MoveNext() { if (!$this->EOF) { $this->_currentRow++; if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); if (is_array($this->fields) && $this->fields) { if (isset($this->_blobArr)) $this->_fixblobs(); return true; } } $this->fields = false; $this->EOF = true; } return false; } function _fetch() { if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) return false; $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); return (is_array($this->fields)); } function _close() { return @pg_freeresult($this->_queryID); } function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } switch (strtoupper($t)) { case 'MONEY': // stupid, postgres expects money to be a string case 'INTERVAL': case 'CHAR': case 'CHARACTER': case 'VARCHAR': case 'NAME': case 'BPCHAR': case '_VARCHAR': if ($len <= $this->blobSize) return 'C'; case 'TEXT': return 'X'; case 'IMAGE': // user defined type case 'BLOB': // user defined type case 'BIT': // This is a bit string, not a single bit, so don't return 'L' case 'VARBIT': case 'BYTEA': return 'B'; case 'BOOL': case 'BOOLEAN': return 'L'; case 'DATE': return 'D'; case 'TIME': case 'DATETIME': case 'TIMESTAMP': case 'TIMESTAMPTZ': return 'T'; case 'SMALLINT': case 'BIGINT': case 'INTEGER': case 'INT8': case 'INT4': case 'INT2': if (isset($fieldobj) && empty($fieldobj->primary_key) && empty($fieldobj->unique)) return 'I'; case 'OID': case 'SERIAL': return 'R'; default: return 'N'; } } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-postgres7.inc.php 777 0 0 15625 10142745764 22252 0ADODB_postgres64(); if (ADODB_ASSOC_CASE !== 2) { $this->rsPrefix .= 'assoc_'; } } // the following should be compat with postgresql 7.2, // which makes obsolete the LIMIT limit,offset syntax function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) { $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ''; if ($secs2cache) $rs =& $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); else $rs =& $this->Execute($sql."$limitStr$offsetStr",$inputarr); return $rs; } /* function Prepare($sql) { $info = $this->ServerInfo(); if ($info['version']>=7.3) { return array($sql,false); } return $sql; } */ // from Edward Jaramilla, improved version - works on pg 7.4 function MetaForeignKeys($table, $owner=false, $upper=false) { $sql = 'SELECT t.tgargs as args FROM pg_trigger t,pg_class c,pg_proc p WHERE t.tgenabled AND t.tgrelid = c.oid AND t.tgfoid = p.oid AND p.proname = \'RI_FKey_check_ins\' AND c.relname = \''.strtolower($table).'\' ORDER BY t.tgrelid'; $rs = $this->Execute($sql); if ($rs && !$rs->EOF) { $arr =& $rs->GetArray(); $a = array(); foreach($arr as $v) { $data = explode(chr(0), $v['args']); if ($upper) { $a[strtoupper($data[2])][] = strtoupper($data[4].'='.$data[5]); } else { $a[$data[2]][] = $data[4].'='.$data[5]; } } return $a; } return false; } function xMetaForeignKeys($table, $owner=false, $upper=false) { $sql = ' SELECT t.tgargs as args FROM pg_trigger t, pg_class c, pg_class c2, pg_proc f WHERE t.tgenabled AND t.tgrelid=c.oid AND t.tgconstrrelid=c2.oid AND t.tgfoid=f.oid AND f.proname ~ \'^RI_FKey_check_ins\' AND t.tgargs like \'$1\\\000'.strtolower($table).'%\' ORDER BY t.tgrelid'; $rs = $this->Execute($sql); if ($rs && !$rs->EOF) { $arr =& $rs->GetArray(); $a = array(); foreach($arr as $v) { $data = explode(chr(0), $v['args']); if ($upper) { $a[] = array(strtoupper($data[2]) => strtoupper($data[4].'='.$data[5])); } else { $a[] = array($data[2] => $data[4].'='.$data[5]); } } return $a; } else return false; } // this is a set of functions for managing client encoding - very important if the encodings // of your database and your output target (i.e. HTML) don't match //for instance, you may have UNICODE database and server it on-site as WIN1251 etc. // GetCharSet - get the name of the character set the client is using now // the functions should work with Postgres 7.0 and above, the set of charsets supported // depends on compile flags of postgres distribution - if no charsets were compiled into the server // it will return 'SQL_ANSI' always function GetCharSet() { //we will use ADO's builtin property charSet $this->charSet = @pg_client_encoding($this->_connectionID); if (!$this->charSet) { return false; } else { return $this->charSet; } } // SetCharSet - switch the client encoding function SetCharSet($charset_name) { $this->GetCharSet(); if ($this->charSet !== $charset_name) { $if = pg_set_client_encoding($this->_connectionID, $charset_name); if ($if == "0" & $this->GetCharSet() == $charset_name) { return true; } else return false; } else return true; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordSet_postgres7 extends ADORecordSet_postgres64{ var $databaseType = "postgres7"; function ADORecordSet_postgres7($queryID,$mode=false) { $this->ADORecordSet_postgres64($queryID,$mode); } // 10% speedup to move MoveNext to child class function MoveNext() { if (!$this->EOF) { $this->_currentRow++; if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); if (is_array($this->fields)) { if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); return true; } } $this->fields = false; $this->EOF = true; } return false; } } class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{ var $databaseType = "postgres7"; function ADORecordSet_assoc_postgres7($queryID,$mode=false) { $this->ADORecordSet_postgres64($queryID,$mode); } function _fetch() { if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) return false; $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); if ($this->fields) { if (isset($this->_blobArr)) $this->_fixblobs(); $this->_updatefields(); } return (is_array($this->fields)); } // Create associative array function _updatefields() { if (ADODB_ASSOC_CASE == 2) return; // native $arr = array(); $lowercase = (ADODB_ASSOC_CASE == 0); foreach($this->fields as $k => $v) { if (is_integer($k)) $arr[$k] = $v; else { if ($lowercase) $arr[strtolower($k)] = $v; else $arr[strtoupper($k)] = $v; } } $this->fields = $arr; } function MoveNext() { if (!$this->EOF) { $this->_currentRow++; if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); if (is_array($this->fields)) { if ($this->fields) { if (isset($this->_blobArr)) $this->_fixblobs(); $this->_updatefields(); } return true; } } $this->fields = false; $this->EOF = true; } return false; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-proxy.inc.php 777 0 0 1510 10142745764 21442 0ADORecordset($id,$mode); } }; } // define ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-sapdb.inc.php 777 0 0 12234 10142745764 21377 0curmode = SQL_CUR_USE_ODBC; $this->ADODB_odbc(); } function ServerInfo() { $info = ADODB_odbc::ServerInfo(); if (!$info['version'] && preg_match('/([0-9.]+)/',$info['description'],$matches)) { $info['version'] = $matches[1]; } return $info; } function MetaPrimaryKeys($table) { $table = $this->Quote(strtoupper($table)); return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos"); } function &MetaIndexes ($table, $primary = FALSE) { $table = $this->Quote(strtoupper($table)); $sql = "SELECT INDEXNAME,TYPE,COLUMNNAME FROM INDEXCOLUMNS ". " WHERE TABLENAME=$table". " ORDER BY INDEXNAME,COLUMNNO"; global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } $rs = $this->Execute($sql); if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; if (!is_object($rs)) { return FALSE; } $indexes = array(); while ($row = $rs->FetchRow()) { $indexes[$row[0]]['unique'] = $row[1] == 'UNIQUE'; $indexes[$row[0]]['columns'][] = $row[2]; } if ($primary) { $indexes['SYSPRIMARYKEYINDEX'] = array( 'unique' => True, // by definition 'columns' => $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos"), ); } return $indexes; } function &MetaColumns ($table) { global $ADODB_FETCH_MODE; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { $savem = $this->SetFetchMode(FALSE); } $table = $this->Quote(strtoupper($table)); $retarr = array(); foreach($this->GetAll("SELECT COLUMNNAME,DATATYPE,LEN,DEC,NULLABLE,MODE,\"DEFAULT\",CASE WHEN \"DEFAULT\" IS NULL THEN 0 ELSE 1 END AS HAS_DEFAULT FROM COLUMNS WHERE tablename=$table ORDER BY pos") as $column) { $fld = new ADOFieldObject(); $fld->name = $column[0]; $fld->type = $column[1]; $fld->max_length = $fld->type == 'LONG' ? 2147483647 : $column[2]; $fld->scale = $column[3]; $fld->not_null = $column[4] == 'NO'; $fld->primary_key = $column[5] == 'KEY'; if ($fld->has_default = $column[7]) { if ($fld->primary_key && $column[6] == 'DEFAULT SERIAL (1)') { $fld->auto_increment = true; $fld->has_default = false; } else { $fld->default_value = $column[6]; switch($fld->type) { case 'VARCHAR': case 'CHARACTER': case 'LONG': $fld->default_value = $column[6]; break; default: $fld->default_value = trim($column[6]); break; } } } $retarr[$fld->name] = $fld; } if (isset($savem)) { $this->SetFetchMode($savem); } $ADODB_FETCH_MODE = $save; return $retarr; } function MetaColumnNames($table) { $table = $this->Quote(strtoupper($table)); return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table ORDER BY pos"); } // unlike it seems, this depends on the db-session and works in a multiuser environment function _insertid($table,$column) { return empty($table) ? False : $this->GetOne("SELECT $table.CURRVAL FROM DUAL"); } /* SelectLimit implementation problems: The following will return random 10 rows as order by performed after "WHERE rowno<10" which is not ideal... select * from table where rowno < 10 order by 1 This means that we have to use the adoconnection base class SelectLimit when there is an "order by". See http://listserv.sap.com/pipermail/sapdb.general/2002-January/010405.html */ }; class ADORecordSet_sapdb extends ADORecordSet_odbc { var $databaseType = "sapdb"; function ADORecordSet_sapdb($id,$mode=false) { $this->ADORecordSet_odbc($id,$mode); } } } //define ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-sqlanywhere.inc.php 777 0 0 10462 10142745764 22651 0create_blobvar($blobVarName); b) load blob var from file. $filename must be complete path $dbcon->load_blobvar_from_file($blobVarName, $filename); c) Use the $blobVarName in SQL insert or update statement in the values clause: $recordSet = $dbconn->Execute('INSERT INTO tabname (idcol, blobcol) ' . 'VALUES (\'test\', ' . $blobVarName . ')'); instead of loading blob from a file, you can also load from an unformatted (raw) blob variable: $dbcon->load_blobvar_from_var($blobVarName, $varName); d) drop blob variable on db server to free up resources: $dbconn->drop_blobvar($blobVarName); Sybase_SQLAnywhere data driver. Requires ODBC. */ // security - hide paths if (!defined('ADODB_DIR')) die(); if (!defined('_ADODB_ODBC_LAYER')) { include(ADODB_DIR."/drivers/adodb-odbc.inc.php"); } if (!defined('ADODB_SYBASE_SQLANYWHERE')){ define('ADODB_SYBASE_SQLANYWHERE',1); class ADODB_sqlanywhere extends ADODB_odbc { var $databaseType = "sqlanywhere"; var $hasInsertID = true; function ADODB_sqlanywhere() { $this->ADODB_odbc(); } function _insertid() { return $this->GetOne('select @@identity'); } function create_blobvar($blobVarName) { $this->Execute("create variable $blobVarName long binary"); return; } function drop_blobvar($blobVarName) { $this->Execute("drop variable $blobVarName"); return; } function load_blobvar_from_file($blobVarName, $filename) { $chunk_size = 1000; $fd = fopen ($filename, "rb"); $integer_chunks = (integer)filesize($filename) / $chunk_size; $modulus = filesize($filename) % $chunk_size; if ($modulus != 0){ $integer_chunks += 1; } for($loop=1;$loop<=$integer_chunks;$loop++){ $contents = fread ($fd, $chunk_size); $contents = bin2hex($contents); $hexstring = ''; for($loop2=0;$loop2qstr($hexstring); $this->Execute("set $blobVarName = $blobVarName || " . $hexstring); } fclose ($fd); return; } function load_blobvar_from_var($blobVarName, &$varName) { $chunk_size = 1000; $integer_chunks = (integer)strlen($varName) / $chunk_size; $modulus = strlen($varName) % $chunk_size; if ($modulus != 0){ $integer_chunks += 1; } for($loop=1;$loop<=$integer_chunks;$loop++){ $contents = substr ($varName, (($loop - 1) * $chunk_size), $chunk_size); $contents = bin2hex($contents); $hexstring = ''; for($loop2=0;$loop2qstr($hexstring); $this->Execute("set $blobVarName = $blobVarName || " . $hexstring); } return; } /* Insert a null into the blob field of the table first. Then use UpdateBlob to store the blob. Usage: $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); */ function UpdateBlob($table,$column,&$val,$where,$blobtype='BLOB') { $blobVarName = 'hold_blob'; $this->create_blobvar($blobVarName); $this->load_blobvar_from_var($blobVarName, $val); $this->Execute("UPDATE $table SET $column=$blobVarName WHERE $where"); $this->drop_blobvar($blobVarName); return true; } }; //class class ADORecordSet_sqlanywhere extends ADORecordSet_odbc { var $databaseType = "sqlanywhere"; function ADORecordSet_sqlanywhere($id,$mode=false) { $this->ADORecordSet_odbc($id,$mode); } }; //class } //define ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-sqlite.inc.php 777 0 0 20434 10142747672 21610 0fmtDate)."'"; case 'sysTimeStamp' : return "'".date($this->sysTimeStamp)."'"; } }*/ function ServerInfo() { $arr['version'] = sqlite_libversion(); $arr['description'] = 'SQLite '; $arr['encoding'] = sqlite_libencoding(); return $arr; } function BeginTrans() { if ($this->transOff) return true; $ret = $this->Execute("BEGIN TRANSACTION"); $this->transCnt += 1; return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); $ret = $this->Execute("COMMIT"); if ($this->transCnt>0)$this->transCnt -= 1; return !empty($ret); } function RollbackTrans() { if ($this->transOff) return true; $ret = $this->Execute("ROLLBACK"); if ($this->transCnt>0)$this->transCnt -= 1; return !empty($ret); } function _insertid() { return sqlite_last_insert_rowid($this->_connectionID); } function _affectedrows() { return sqlite_changes($this->_connectionID); } function ErrorMsg() { if ($this->_logsql) return $this->_errorMsg; return ($this->_errorNo) ? sqlite_error_string($this->_errorNo) : ''; } function ErrorNo() { return $this->_errorNo; } function SQLDate($fmt, $col=false) { $fmt = $this->qstr($fmt); return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)"; } function &MetaColumns($tab) { global $ADODB_FETCH_MODE; $rs = $this->Execute("select * from $tab limit 1"); if (!$rs) { $false = false; return $false; } $arr = array(); for ($i=0,$max=$rs->_numOfFields; $i < $max; $i++) { $fld =& $rs->FetchField($i); if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] =& $fld; else $arr[strtoupper($fld->name)] =& $fld; } $rs->Close(); return $arr; } function _createFunctions() { @sqlite_create_function($this->_connectionID, 'adodb_date', 'adodb_date', 1); @sqlite_create_function($this->_connectionID, 'adodb_date2', 'adodb_date2', 2); } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('sqlite_open')) return null; $this->_connectionID = sqlite_open($argHostname); if ($this->_connectionID === false) return false; $this->_createFunctions(); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('sqlite_open')) return null; $this->_connectionID = sqlite_popen($argHostname); if ($this->_connectionID === false) return false; $this->_createFunctions(); return true; } // returns query ID if successful, otherwise false function _query($sql,$inputarr=false) { $rez = sqlite_query($sql,$this->_connectionID); if (!$rez) { $this->_errorNo = sqlite_last_error($this->_connectionID); } return $rez; } function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) { $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : ''); if ($secs2cache) $rs =& $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); else $rs =& $this->Execute($sql."$limitStr$offsetStr",$inputarr); return $rs; } /* This algorithm is not very efficient, but works even if table locking is not available. Will return false if unable to generate an ID after $MAXLOOPS attempts. */ var $_genSeqSQL = "create table %s (id integer)"; function GenID($seq='adodbseq',$start=1) { // if you have to modify the parameter below, your database is overloaded, // or you need to implement generation of id's yourself! $MAXLOOPS = 100; //$this->debug=1; while (--$MAXLOOPS>=0) { @($num = $this->GetOne("select id from $seq")); if ($num === false) { $this->Execute(sprintf($this->_genSeqSQL ,$seq)); $start -= 1; $num = '0'; $ok = $this->Execute("insert into $seq values($start)"); if (!$ok) return false; } $this->Execute("update $seq set id=id+1 where id=$num"); if ($this->affected_rows() > 0) { $num += 1; $this->genID = $num; return $num; } } if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); } return false; } function CreateSequence($seqname='adodbseq',$start=1) { if (empty($this->_genSeqSQL)) return false; $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); if (!$ok) return false; $start -= 1; return $this->Execute("insert into $seqname values($start)"); } var $_dropSeqSQL = 'drop table %s'; function DropSequence($seqname) { if (empty($this->_dropSeqSQL)) return false; return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); } // returns true or false function _close() { return @sqlite_close($this->_connectionID); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_sqlite extends ADORecordSet { var $databaseType = "sqlite"; var $bind = false; function ADORecordset_sqlite($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch($mode) { case ADODB_FETCH_NUM: $this->fetchMode = SQLITE_NUM; break; case ADODB_FETCH_ASSOC: $this->fetchMode = SQLITE_ASSOC; break; default: $this->fetchMode = SQLITE_BOTH; break; } $this->adodbFetchMode = $mode; $this->_queryID = $queryID; $this->_inited = true; $this->fields = array(); if ($queryID) { $this->_currentRow = 0; $this->EOF = !$this->_fetch(); @$this->_initrs(); } else { $this->_numOfRows = 0; $this->_numOfFields = 0; $this->EOF = true; } return $this->_queryID; } function &FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; $fld->name = sqlite_field_name($this->_queryID, $fieldOffset); $fld->type = 'VARCHAR'; $fld->max_length = -1; return $fld; } function _initrs() { $this->_numOfRows = @sqlite_num_rows($this->_queryID); $this->_numOfFields = @sqlite_num_fields($this->_queryID); } function Fields($colname) { if ($this->fetchMode != SQLITE_NUM) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _seek($row) { return sqlite_seek($this->_queryID, $row); } function _fetch($ignore_fields=false) { $this->fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode); return !empty($this->fields); } function _close() { } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-sqlite.inc.php.bak 777 0 0 20503 10126334412 22323 0fmtDate)."'"; case 'sysTimeStamp' : return "'".date($this->sysTimeStamp)."'"; } }*/ function ServerInfo() { $arr['version'] = sqlite_libversion(); $arr['description'] = 'SQLite '; $arr['encoding'] = sqlite_libencoding(); return $arr; } function BeginTrans() { if ($this->transOff) return true; $ret = $this->Execute("BEGIN TRANSACTION"); $this->transCnt += 1; return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); $ret = $this->Execute("COMMIT"); if ($this->transCnt>0)$this->transCnt -= 1; return !empty($ret); } function RollbackTrans() { if ($this->transOff) return true; $ret = $this->Execute("ROLLBACK"); if ($this->transCnt>0)$this->transCnt -= 1; return !empty($ret); } function _insertid() { return sqlite_last_insert_rowid($this->_connectionID); } function _affectedrows() { return sqlite_changes($this->_connectionID); } function ErrorMsg() { if ($this->_logsql) return $this->_errorMsg; return ($this->_errorNo) ? sqlite_error_string($this->_errorNo) : ''; } function ErrorNo() { return $this->_errorNo; } function SQLDate($fmt, $col=false) { $fmt = $this->qstr($fmt); return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)"; } function &MetaColumns($tab) { global $ADODB_FETCH_MODE; $rs = $this->Execute("select * from $tab limit 1"); if (!$rs) return false; $arr = array(); for ($i=0,$max=$rs->_numOfFields; $i < $max; $i++) { $fld =& $rs->FetchField($i); if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] =& $fld; else $arr[strtoupper($fld->name)] =& $fld; } $rs->Close(); return $arr; } function _createFunctions() { @sqlite_create_function($this->_connectionID, 'adodb_date', 'adodb_date', 1); @sqlite_create_function($this->_connectionID, 'adodb_date2', 'adodb_date2', 2); } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('sqlite_open')) return null; $this->_connectionID = sqlite_open($argHostname); if ($this->_connectionID === false) return false; $this->_createFunctions(); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('sqlite_open')) return null; $this->_connectionID = sqlite_popen($argHostname); if ($this->_connectionID === false) return false; $this->_createFunctions(); return true; } // returns query ID if successful, otherwise false function _query($sql,$inputarr=false) { $rez = sqlite_query($sql,$this->_connectionID); if (!$rez) { $this->_errorNo = sqlite_last_error($this->_connectionID); } return $rez; } function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) { $offsetStr = ($offset >= 0) ? " OFFSET $offset" : ''; $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : ''); if ($secs2cache) $rs =& $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); else $rs =& $this->Execute($sql."$limitStr$offsetStr",$inputarr); return $rs; } /* This algorithm is not very efficient, but works even if table locking is not available. Will return false if unable to generate an ID after $MAXLOOPS attempts. */ var $_genSeqSQL = "create table %s (id integer)"; function GenID($seq='adodbseq',$start=1) { // if you have to modify the parameter below, your database is overloaded, // or you need to implement generation of id's yourself! $MAXLOOPS = 100; //$this->debug=1; while (--$MAXLOOPS>=0) { <<<<<<< adodb-sqlite.inc.php $num = @$this->GetOne("select id from $seq"); ======= @($num = $this->GetOne("select id from $seq")); >>>>>>> 1.42 if ($num === false) { $this->Execute(sprintf($this->_genSeqSQL ,$seq)); $start -= 1; $num = '0'; $ok = $this->Execute("insert into $seq values($start)"); if (!$ok) return false; } $this->Execute("update $seq set id=id+1 where id=$num"); if ($this->affected_rows() > 0) { $num += 1; $this->genID = $num; return $num; } } if ($fn = $this->raiseErrorFn) { $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num); } return false; } function CreateSequence($seqname='adodbseq',$start=1) { if (empty($this->_genSeqSQL)) return false; $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname)); if (!$ok) return false; $start -= 1; return $this->Execute("insert into $seqname values($start)"); } var $_dropSeqSQL = 'drop table %s'; function DropSequence($seqname) { if (empty($this->_dropSeqSQL)) return false; return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); } // returns true or false function _close() { return @sqlite_close($this->_connectionID); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_sqlite extends ADORecordSet { var $databaseType = "sqlite"; var $bind = false; function ADORecordset_sqlite($queryID,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch($mode) { case ADODB_FETCH_NUM: $this->fetchMode = SQLITE_NUM; break; case ADODB_FETCH_ASSOC: $this->fetchMode = SQLITE_ASSOC; break; default: $this->fetchMode = SQLITE_BOTH; break; } $this->_queryID = $queryID; $this->_inited = true; $this->fields = array(); if ($queryID) { $this->_currentRow = 0; $this->EOF = !$this->_fetch(); @$this->_initrs(); } else { $this->_numOfRows = 0; $this->_numOfFields = 0; $this->EOF = true; } return $this->_queryID; } function &FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; $fld->name = sqlite_field_name($this->_queryID, $fieldOffset); $fld->type = 'VARCHAR'; $fld->max_length = -1; return $fld; } function _initrs() { $this->_numOfRows = @sqlite_num_rows($this->_queryID); $this->_numOfFields = @sqlite_num_fields($this->_queryID); } function Fields($colname) { if ($this->fetchMode != SQLITE_NUM) return $this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i=0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _seek($row) { return sqlite_seek($this->_queryID, $row); } function _fetch($ignore_fields=false) { $this->fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode); return !empty($this->fields); } function _close() { } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-sqlitepo.inc.php 777 0 0 3603 10142745766 22130 0ADODB_sqlite(); } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ class ADORecordset_sqlitepo extends ADORecordset_sqlite { var $databaseType = 'sqlitepo'; function ADORecordset_sqlitepo($queryID,$mode=false) { $this->ADORecordset_sqlite($queryID,$mode); } // Modified to strip table names from returned fields function _fetch($ignore_fields=false) { $this->fields = array(); $fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode); if(is_array($fields)) foreach($fields as $n => $v) { if(($p = strpos($n, ".")) !== false) $n = substr($n, $p+1); $this->fields[$n] = $v; } return !empty($this->fields); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-sybase.inc.php 777 0 0 30751 10142745766 21602 0GetOne('select @@identity'); } // might require begintrans -- committrans function _affectedrows() { return $this->GetOne('select @@rowcount'); } function BeginTrans() { if ($this->transOff) return true; $this->transCnt += 1; $this->Execute('BEGIN TRAN'); return true; } function CommitTrans($ok=true) { if ($this->transOff) return true; if (!$ok) return $this->RollbackTrans(); $this->transCnt -= 1; $this->Execute('COMMIT TRAN'); return true; } function RollbackTrans() { if ($this->transOff) return true; $this->transCnt -= 1; $this->Execute('ROLLBACK TRAN'); return true; } // http://www.isug.com/Sybase_FAQ/ASE/section6.1.html#6.1.4 function RowLock($tables,$where) { if (!$this->_hastrans) $this->BeginTrans(); $tables = str_replace(',',' HOLDLOCK,',$tables); return $this->GetOne("select top 1 null as ignore from $tables HOLDLOCK where $where"); } function SelectDB($dbName) { $this->databaseName = $dbName; if ($this->_connectionID) { return @sybase_select_db($dbName); } else return false; } /* Returns: the last error message from previous database operation Note: This function is NOT available for Microsoft SQL Server. */ function ErrorMsg() { if ($this->_logsql) return $this->_errorMsg; if (function_exists('sybase_get_last_message')) $this->_errorMsg = sybase_get_last_message(); else $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : 'SYBASE error messages not supported on this platform'; return $this->_errorMsg; } // returns true or false function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('sybase_connect')) return null; $this->_connectionID = sybase_connect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } // returns true or false function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!function_exists('sybase_connect')) return null; $this->_connectionID = sybase_pconnect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; } // returns query ID if successful, otherwise false function _query($sql,$inputarr) { global $ADODB_COUNTRECS; if ($ADODB_COUNTRECS == false && ADODB_PHPVER >= 0x4300) return sybase_unbuffered_query($sql,$this->_connectionID); else return sybase_query($sql,$this->_connectionID); } // See http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.12 function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) { if ($secs2cache > 0) {// we do not cache rowcount, so we have to load entire recordset $rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); return $rs; } $cnt = ($nrows >= 0) ? $nrows : 999999999; if ($offset > 0 && $cnt) $cnt += $offset; $this->Execute("set rowcount $cnt"); $rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,0); $this->Execute("set rowcount 0"); return $rs; } // returns true or false function _close() { return @sybase_close($this->_connectionID); } function UnixDate($v) { return ADORecordSet_array_sybase::UnixDate($v); } function UnixTimeStamp($v) { return ADORecordSet_array_sybase::UnixTimeStamp($v); } # Added 2003-10-05 by Chris Phillipson # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=16756?target=%25N%15_12018_START_RESTART_N%25 # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { if (!$col) $col = $this->sysTimeStamp; $s = ''; $len = strlen($fmt); for ($i=0; $i < $len; $i++) { if ($s) $s .= '+'; $ch = $fmt[$i]; switch($ch) { case 'Y': case 'y': $s .= "datename(yy,$col)"; break; case 'M': $s .= "convert(char(3),$col,0)"; break; case 'm': $s .= "replace(str(month($col),2),' ','0')"; break; case 'Q': case 'q': $s .= "datename(qq,$col)"; break; case 'D': case 'd': $s .= "replace(str(datepart(dd,$col),2),' ','0')"; break; case 'h': $s .= "substring(convert(char(14),$col,0),13,2)"; break; case 'H': $s .= "replace(str(datepart(hh,$col),2),' ','0')"; break; case 'i': $s .= "replace(str(datepart(mi,$col),2),' ','0')"; break; case 's': $s .= "replace(str(datepart(ss,$col),2),' ','0')"; break; case 'a': case 'A': $s .= "substring(convert(char(19),$col,0),18,2)"; break; default: if ($ch == '\\') { $i++; $ch = substr($fmt,$i,1); } $s .= $this->qstr($ch); break; } } return $s; } # Added 2003-10-07 by Chris Phillipson # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=5981;uf=0?target=0;window=new;showtoc=true;book=dbrfen8 # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version function MetaPrimaryKeys($table) { $sql = "SELECT c.column_name " . "FROM syscolumn c, systable t " . "WHERE t.table_name='$table' AND c.table_id=t.table_id " . "AND t.table_type='BASE' " . "AND c.pkey = 'Y' " . "ORDER BY c.column_id"; $a = $this->GetCol($sql); if ($a && sizeof($a)>0) return $a; return false; } } /*-------------------------------------------------------------------------------------- Class Name: Recordset --------------------------------------------------------------------------------------*/ global $ADODB_sybase_mths; $ADODB_sybase_mths = array( 'JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6, 'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); class ADORecordset_sybase extends ADORecordSet { var $databaseType = "sybase"; var $canSeek = true; // _mths works only in non-localised system var $_mths = array('JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6,'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); function ADORecordset_sybase($id,$mode=false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } if (!$mode) $this->fetchMode = ADODB_FETCH_ASSOC; else $this->fetchMode = $mode; return $this->ADORecordSet($id,$mode); } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by fetchField() is retrieved. */ function &FetchField($fieldOffset = -1) { if ($fieldOffset != -1) { $o = @sybase_fetch_field($this->_queryID, $fieldOffset); } else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ $o = @sybase_fetch_field($this->_queryID); } // older versions of PHP did not support type, only numeric if ($o && !isset($o->type)) $o->type = ($o->numeric) ? 'float' : 'varchar'; return $o; } function _initrs() { global $ADODB_COUNTRECS; $this->_numOfRows = ($ADODB_COUNTRECS)? @sybase_num_rows($this->_queryID):-1; $this->_numOfFields = @sybase_num_fields($this->_queryID); } function _seek($row) { return @sybase_data_seek($this->_queryID, $row); } function _fetch($ignore_fields=false) { if ($this->fetchMode == ADODB_FETCH_NUM) { $this->fields = @sybase_fetch_row($this->_queryID); } else if ($this->fetchMode == ADODB_FETCH_ASSOC) { $this->fields = @sybase_fetch_row($this->_queryID); if (is_array($this->fields)) { $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE); return true; } return false; } else { $this->fields = @sybase_fetch_array($this->_queryID); } if ( is_array($this->fields)) { return true; } return false; } /* close() only needs to be called if you are worried about using too much memory while your script is running. All associated result memory for the specified result identifier will automatically be freed. */ function _close() { return @sybase_free_result($this->_queryID); } // sybase/mssql uses a default date like Dec 30 2000 12:00AM function UnixDate($v) { return ADORecordSet_array_sybase::UnixDate($v); } function UnixTimeStamp($v) { return ADORecordSet_array_sybase::UnixTimeStamp($v); } } class ADORecordSet_array_sybase extends ADORecordSet_array { function ADORecordSet_array_sybase($id=-1) { $this->ADORecordSet_array($id); } // sybase/mssql uses a default date like Dec 30 2000 12:00AM function UnixDate($v) { global $ADODB_sybase_mths; //Dec 30 2000 12:00AM if (!ereg( "([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})" ,$v, $rr)) return parent::UnixDate($v); if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; $themth = substr(strtoupper($rr[1]),0,3); $themth = $ADODB_sybase_mths[$themth]; if ($themth <= 0) return false; // h-m-s-MM-DD-YY return mktime(0,0,0,$themth,$rr[2],$rr[3]); } function UnixTimeStamp($v) { global $ADODB_sybase_mths; //11.02.2001 Toni Tunkkari toni.tunkkari@finebyte.com //Changed [0-9] to [0-9 ] in day conversion if (!ereg( "([A-Za-z]{3})[-/\. ]([0-9 ]{1,2})[-/\. ]([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})" ,$v, $rr)) return parent::UnixTimeStamp($v); if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0; $themth = substr(strtoupper($rr[1]),0,3); $themth = $ADODB_sybase_mths[$themth]; if ($themth <= 0) return false; switch (strtoupper($rr[6])) { case 'P': if ($rr[4]<12) $rr[4] += 12; break; case 'A': if ($rr[4]==12) $rr[4] = 0; break; default: break; } // h-m-s-MM-DD-YY return mktime($rr[4],$rr[5],0,$themth,$rr[2],$rr[3]); } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/drivers/adodb-vfp.inc.php 777 0 0 5014 10142745766 21061 0ADODB_odbc(); } function Time() { return time(); } function BeginTrans() { return false;} // quote string to be sent back to database function qstr($s,$nofixquotes=false) { if (!$nofixquotes) return "'".str_replace("\r\n","'+chr(13)+'",str_replace("'",$this->replaceQuote,$s))."'"; return "'".$s."'"; } // TOP requires ORDER BY for VFP function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) { $this->hasTop = preg_match('/ORDER[ \t\r\n]+BY/is',$sql) ? 'top' : false; return ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); } }; class ADORecordSet_vfp extends ADORecordSet_odbc { var $databaseType = "vfp"; function ADORecordSet_vfp($id,$mode=false) { return $this->ADORecordSet_odbc($id,$mode); } function MetaType($t,$len=-1) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } switch (strtoupper($t)) { case 'C': if ($len <= $this->blobSize) return 'C'; case 'M': return 'X'; case 'D': return 'D'; case 'T': return 'T'; case 'L': return 'L'; case 'I': return 'I'; default: return 'N'; } } } } //define ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Adodb/license.txt 777 0 0 62737 10064121544 16463 0ADOdb is dual licensed using BSD and LGPL. In plain English, you do not need to distribute your application in source code form, nor do you need to distribute ADOdb source code, provided you follow the rest of terms of the BSD license. For more info about ADOdb, visit http://adodb.sourceforge.net/ BSD Style-License ================= Copyright (c) 2000, 2001, 2002, 2003, 2004 John Lim All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the John Lim nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. DISCLAIMER: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JOHN LIM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ========================================================== GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONSaroundme_0_4_0/www/aroundme_0_4_0/class/Blog.class.php 777 0 0 30127 10170700037 15751 0db = $db; $this->section_id = $section_id; $this->date = $date; if (isset($file)) { $this->file = $file; } }//EO Blog // getBlog -------------------------------------------------------------------- // gets a single record from the DB // tom calthrop - 22nd May 2004 // function getBlog() { $query = " SELECT b.blog_id, b.blog_title, b.blog_synopsis, b.blog_create_datetime, b.user_id, b.file_id, b.blog_body, b.genre_id, b.section_id, b.level_id, b.degree_id, b.blog_allow_comments FROM " . $this->db->prefix . "_blog b where " ; if (isset($this->blog_id)) { $query .= "b.blog_id=" . $this->blog_id . " and "; } $query .= "1=1"; $result = $this->db->SelectLimit($query, 1); //returns last 1 rows if (isset($result->fields)) { $temp = $result->fields; $this->blog_id = $temp['blog_id']; $temp['blog_create_datetime'] = $this->date->formatDate($temp['blog_create_datetime'], 1); $result->Close(); return $temp; } else { $error_info = "function=getBlog class=Blog.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO getBlog // updateBlog -------------------------------------------------------------------- // updates a single blog record in DB // tom calthrop - 22nd May 2004 // function updateBlog($data) { if(empty($data['blog_title'])) { $GLOBALS['am_error_log'][] = array(11, null, null); } if(empty($data['blog_synopsis'])) { $GLOBALS['am_error_log'][] = array(21, null, null); } if(empty($data['blog_body'])) { $GLOBALS['am_error_log'][] = array(12, null, null); } if (empty($this->log)) { if (empty($data['degree_id'])) { $data['degree_id'] = "null"; } if (empty($data['level_id'])) { $data['level_id'] = "null"; } if (empty($data['blog_allow_comments'])) { $data['blog_allow_comments'] = "null"; } //stops sql errors when backslashes are removed - \" $data['blog_title'] = str_replace("'", "\'", $data['blog_title']); $data['blog_synopsis'] = str_replace("'", "\'", $data['blog_synopsis']); $data['blog_body'] = str_replace("'", "\'", $data['blog_body']); $query = " UPDATE " . $this->db->prefix . "_blog set blog_title='" . $data['blog_title'] . "', blog_synopsis='" . $data['blog_synopsis'] . "', blog_body='" . $data['blog_body'] . "', language_id=" . $data['language_id'] . ", genre_id=" . $data['genre_id'] . ", file_id=" . $data['file_id'] . ", degree_id=" . $data['degree_id'] . ", level_id=" . $data['level_id'] . ", blog_allow_comments=" . $data['blog_allow_comments'] . " WHERE blog_id=" . $data['blog_id'] ; $result = $this->db->Execute($query); if (empty($result)) { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } } } //EO updateBlog // insertBlog -------------------------------------------------------------------- // inserts a single blog in the DB // tom calthrop - 22nd May 2004 // function insertBlog($data) { if(empty($data['blog_title'])) { $GLOBALS['am_error_log'][] = array(11, null, null); } if(empty($data['blog_synopsis'])) { $GLOBALS['am_error_log'][] = array(21, null, null); } if(empty($data['blog_body'])) { $GLOBALS['am_error_log'][] = array(12, null, null); } if (empty($GLOBALS['am_error_log'])) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); //stops sql errors when backslashes are removed - \" $data['blog_title'] = str_replace("'", "\'", $data['blog_title']); $data['blog_synopsis'] = str_replace("'", "\'", $data['blog_synopsis']); $data['blog_body'] = str_replace("'", "\'", $data['blog_body']); if (empty($data['file_id'])) { $data['file_id'] = "null"; } if (empty($data['genre_id'])) { $data['genre_id'] = "null"; } if (empty($data['language_id'])) { $data['language_id'] = "null"; } if (empty($data['degree_id'])) { $data['degree_id'] = "null"; } if (empty($data['level_id'])) { $data['level_id'] = "null"; } if (empty($data['blog_allow_comments'])) { $data['blog_allow_comments'] = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_blog ( section_id, section_item_id, blog_title, blog_synopsis, blog_body, language_id, file_id, blog_create_datetime, user_id, level_id, degree_id, blog_allow_comments, genre_id ) values ( " . $this->section_id . ", " . $this->section_item_id . ", '" . $data['blog_title'] . "', '" . $data['blog_synopsis'] . "', '" . $data['blog_body'] . "', " . $data['language_id'] . ", " . $data['file_id'] . ", " . $datetime . ", " . $this->user_id . ", " . $data['level_id'] . ", " . $data['degree_id'] . ", " . $data['blog_allow_comments'] . ", " . $data['genre_id'] . " )" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $query = " SELECT blog_id FROM " . $this->db->prefix . "_blog WHERE section_id=" . $this->section_id . " AND section_item_id=" . $this->section_item_id . " AND blog_create_datetime=" . $datetime ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields['blog_id'])) { $this->blog_id = $result->fields['blog_id']; } else { $error_info = "function=insertBlog class=Blog.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } else { $error_info = "function=insertBlog class=Blog.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } } //EO insertBlog // getBlogs -------------------------------------------------------------------- // returns multiple rows of blogs from DB // tom calthrop - 22nd May 2004 // function getBlogs($search=null) { $query = " SELECT b.blog_id, b.blog_title, b.blog_synopsis, b.blog_create_datetime, b.user_id, p.profile_nic, b.file_id, b.blog_body, b.section_id, b.section_item_id, b.blog_allow_comments, p.profile_create_datetime, p.profile_hometown FROM " . $this->db->prefix . "_blog b RIGHT JOIN " . $this->db->prefix . "_user_profile p ON b.user_id=p.user_id WHERE p.profile_default=1 AND " ; if (isset($this->section_id)) { $query .= "b.section_id=" . $this->section_id . " AND "; } if (isset($this->level_id)) { $query .= "level_id=" . $this->level_id . " and "; } if (isset($this->degree_id)) { $query .= "degree_id>=" . $this->degree_id . " and "; } if (isset($this->genre_id)) { $query .= "b.genre_id=" . $this->genre_id . " AND "; } if (isset($this->section_item_id)) { $query .= "b.section_item_id=" . $this->section_item_id . " AND "; } if (isset($this->user_id)) { $query .= "b.user_id=" . $this->user_id . " AND "; } if (isset($this->not_user_id)) { $query .= "b.user_id != " . $this->not_user_id . " AND "; } if (isset($this->search)) { $query .= "( b.blog_title like '%" . $this->search . "%' or b.blog_body like '%" . $this->search . "%') AND " ; } if (isset($this->before_timestamp)) { $datetime = date("Y-m-d H:i:s", $this->before_timestamp); $datetime = $this->db->DBDate($datetime); $query .= "b.blog_create_datetime <= " . $datetime . " AND "; } if (isset($this->after_timestamp)) { $datetime = date("Y-m-d H:i:s", $this->after_timestamp); $datetime = $this->db->DBDate($datetime); $query .= "b.blog_create_datetime >= " . $datetime . " AND "; } if (isset($this->blog_ids)) { $blog_ids = ""; foreach($this->blog_ids as $key => $i): $blog_ids .= $i; if (count($this->blog_ids) > $key+1) { $blog_ids .=","; } endforeach; $query .="blog_id in (" . $blog_ids . ") and "; } $query .="1=1 "; if (isset($this->order_by)) { $query .= "order by b." . $this->order_by; } else { $query .= "order by b.blog_create_datetime desc"; } if (isset($this->limit)) { $result = $this->db->SelectLimit($query, $this->limit); } else { $result = $this->db->Execute($query); } $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['blog_create_datetime'] = $this->date->formatDate($temp1['blog_create_datetime'], 1); if (isset($this->file)) { if ($temp1['section_id'] == 1) { $this->file->path = "user"; } elseif ($temp1['section_id'] == 2) { $this->file->path = "group"; } if (isset($temp1['file_id'])) { $this->file->file_id = $temp1['file_id']; $temp1['image'] = $this->file->getFileRecord(); } else { $temp1['image']['file_id'] = ""; $temp1['image']['file'] = $this->file->noimage; } } //format search results if (isset($this->search)) { $temp1['blog_synopsis'] = searchTextFormat($search, $temp1['blog_synopsis']); $temp1['blog_title'] = searchTextFormat($search, $temp1['blog_title']); } array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getBlogs class=Blog.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO getBlogs() // deleteBlogs -------------------------------------------------------------------- // deletes multiple rows of blogs from DB // tom calthrop - 22nd May 2004 // function deleteBlogs($del_arr) { $rownums = count ($del_arr); //echo $rownums; for ($i=0; $i < $rownums; $i++) { $query = " DELETE from " . $this->db->prefix . "_blog WHERE blog_id = " . $del_arr[$i] ; $result = $this->db->Execute($query); if (empty($result)) { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } } }//EO deleteBlogs // getBlogCount -------------------------------------------------------------------- // will get the coutn of unique page names // tom calthrop - 27th December 2004 // function getBlogCount() { $query = " SELECT DISTINCT blog_id as total FROM " . $this->db->prefix . "_blog WHERE section_id=" . $this->section_id . " and section_item_id=" . $this->section_item_id ; $result = $this->db->Execute($query); if (isset($result->fields['total'])) { return $result->fields['total']; } else { $error_info = "function=getBlogCount class=Blog.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getBlogCount } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Bookmark.class.php 777 0 0 15260 10170700034 16631 0db = $db; $this->cms_item_type_id = $cms_item_type_id; $this->date = $date; $this->user_id = $user_id; } // getSubjectBookmarks -------------------------------------------------------------------- // returns multiple rows from the DB // the library needs the name and not the id, hence the $return_names var is set to 1 for names // tom calthrop - 25th Jan 2004 // function getBookmarks() { //bookmark_name is used for libraryPageName $query = " SELECT item_id FROM " . $this->db->prefix . "_bookmark WHERE user_id=" . $this->user_id . " and " ; if (isset($this->bookmark_type)) { $query .= "bookmark_type=" . $this->bookmark_type . " and "; } if (isset($this->cms_item_type_id)) { $query .= "cms_item_type_id=" . $this->cms_item_type_id . " and "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { array_push($temp, $result->fields['item_id']); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getBookmarks class=Bookmark.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getBookmarks // getBookmark -------------------------------------------------------------------- // gets the bookmark (returns true if found) // tom calthrop - 11th December 2004 // function getBookmark() { $query = " SELECT user_id FROM " . $this->db->prefix . "_bookmark WHERE user_id=" . $this->user_id . " and cms_item_type_id=" . $this->cms_item_type_id . " and bookmark_type=" . $this->bookmark_type . " and item_id=" . $this->item_id . " and " ; $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields['user_id'])) { return true; } else { return false; } } //EO getBookmark // insertBookmark -------------------------------------------------------------------- // inserts the bookmark // tom calthrop - 11th December 2004 // function insertBookmark() { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_bookmark ( item_id, cms_item_type_id, bookmark_type, user_id, bookmark_lastview_datetime ) VALUES ( " . $this->item_id . ", " . $this->cms_item_type_id . ", " . $this->bookmark_type . ", " . $this->user_id . ", " . $datetime . ")" ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=insertBookmark class=Bookmark.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO insertBookmark // updateBookmark -------------------------------------------------------------------- // updates the bookmark_lastview_datetime // tom calthrop - 11th December 2004 // function updateBookmark() { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " UPDATE " . $this->db->prefix . "_bookmark SET bookmark_lastview_datetime=" . $datetime . " WHERE cms_item_type_id=" . $this->cms_item_type_id . " and bookmark_type=" . $this->bookmark_type . " and user_id=" . $this->user_id . " and item_id=" . $this->item_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateBookmark class=Bookmark.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO updateBookmark // deleteBookmark -------------------------------------------------------------------- // deletes a bookmark // tom calthrop - 11th December 2004 // function deleteBookmark($del_arr = null) { if (empty($del_arr)) { $del_arr = array($this->item_id); } $rownums = count($del_arr); for ($i=0; $i < $rownums; $i++) { $query = " DELETE FROM " . $this->db->prefix . "_bookmark WHERE cms_item_type_id=" . $this->cms_item_type_id . " and bookmark_type=" . $this->bookmark_type . " and user_id=" . $this->user_id . " and item_id=" . $del_arr[$i] ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=deleteBookmark class=Bookmark.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } } //EO deleteBookmark // getBookmarkLastViewDate -------------------------------------------------------------------- // gets the bookmarks last view date // tom calthrop - 11th December 2004 // function getBookmarkLastViewDate($item_id = null) { if (!isset($item_id) && isset($this->item_id)) { $item_id = $this->item_id; } $query = " SELECT bookmark_lastview_datetime FROM " . $this->db->prefix . "_bookmark WHERE user_id=" . $this->user_id . " and bookmark_type=" . $this->bookmark_type . " and cms_item_type_id=" . $this->cms_item_type_id . " and item_id=" . $item_id ; $result = $this->db->Execute($query); if (isset($result->fields['bookmark_lastview_datetime'])) { return $result->fields['bookmark_lastview_datetime']; } else { return false; } } //EO getBookmarkLastViewDate } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Calendar.class.php 777 0 0 25304 10170663535 16613 0db = $db; $this->id = $id; $this->mh = $now['mon']; $this->da = $now['mday']; $this->yr = $now['year']; $this->calendar = array(); // Initialize calendar }//EO Calendar // setCalendarBase -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function setCalendarBase() { //setup calendar array $this->daysinmonth = date("t",mktime(0, 0, 0, $this->mh, 1, $this->yr)); //get first day of the month (0 = sun, 6 = sat) $this->firstdaynumber = date("w",mktime(0,0,0,$this->mh,1,$this->yr)); //populate the calendar array with dates //fill the calendar for ($i=0; $i < $this->daysinmonth; $i++) { $temp = array( 'today' => date("d-M-Y",mktime(0,0,0,$this->mh,$i+1,$this->yr)), 'daynumber' => $i+1, 'content' => array() ); array_push($this->calendar, $temp); } }//EO setCalendarBase // setBlankDays -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function setBlankDays() { //work out how many blank calendar spaces to put at the start of the calendar $blankdays = 7-(7-$this->firstdaynumber); for ($i=0; $i < $blankdays; $i++) { array_unshift($this->calendar, array()); } //work out the blank to fill the calendar $blankdays = count($this->calendar); while($blankdays > 7){ $blankdays = $blankdays-7; } // while $blankdays = 7-$blankdays; for ($i=0; $i < $blankdays; $i++) { array_push($this->calendar, array()); } }//EO setBlankDays // getCalendar -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function getCalendar() { return $this->calendar; }//EO getCalendar // getToDay -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function getToDay($time) { // Checks if the view is the current month $date = getdate($time); $mh = $date['mon']; $yr = $date['year']; if($mh == $this->mh & $yr == $this->yr) return date("j",mktime()); else return ""; }//EO getToDay // getDayContent -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function getDayContent($day) { return $this->calendar[$day-1+$this->firstdaynumber]['content']; }//EO getDayContent // getDayContent -------------------------------------------------------------------- // Recalculate the dates so that the matches up the structure of the populating algortihm // Erik Sundelf, June 3, 2004 // function modifyActivityDate($activity) { $activity_date = $this->calculateDate($activity); if(!empty($activity_date[0])) { $activity[5] = $activity_date[0]; $activity["activity_start_datetime"] = $activity_date[0]; } if(!empty($activity_date[1])) { $activity[6] = $activity_date[1]; $activity["activity_end_datetime"] = $activity_date[1]; } return $activity; }//EO modifyActivityDate // populateActivity -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function populateActivity($activity) { if(!empty($activity["activity_start_datetime"])) $start = strtotime($activity["activity_start_datetime"]); else $start = 0; if(!empty($activity["activity_end_datetime"])) { $end = strtotime($activity["activity_end_datetime"]); } else { $end = 0; } // Defines the next month if($this->mh+1>12) { $next_mh = 1; $next_yr = $this->yr+1; } else { $next_mh = $this->mh+1; $next_yr = $this->yr; } // Defines useful dates $time_start = mktime(0, 0, 0, $this->mh, 1, $this->yr); $time_end = strtotime("+1 month", $time_start); if($start>=$time_start & $start<=$time_end) { if($end<=$time_end) { $ds = date("d", $start); $de = date("d", $end); } else { $ds = date("d", $start); $de = $this->daysinmonth; } } elseif($end>=$time_start & $end<=$time_end) { $ds = 1; $de = date("d", $end); } elseif($start<$time_start & $end>$time_end) { $ds = 1; $de = $this->daysinmonth; } if(isset($ds) & isset($de)) { for($d = $ds; $d <= $de; $d++) { if(!empty($activity["activity_frequency"])) { if($activity["activity_frequency"]==3){ // Weekly $weekday = date("w", mktime(0, 0, 0, $this->mh, $d, $this->yr))+1; $start_weekday = $activity["activity_start_weekday"]; if(empty($activity["activity_end_weekday"])) $end_weekday = $activity["activity_start_weekday"]; else $end_weekday = $activity["activity_end_weekday"]; if($start_weekday<=$weekday & $end_weekday>=$weekday) array_push($this->calendar[$d-1]['content'], $activity); } elseif ($activity["activity_frequency"]==9) { // Monthly $start_day = $activity["activity_start_day"]; if(empty($activity["activity_end_day"])) $end_day = $activity["activity_start_day"]; else $end_day = $activity["activity_end_day"]; if($start_day<=$d & $end_day>=$d) array_push($this->calendar[$d-1]['content'], $activity); } elseif ($activity["activity_frequency"]==10) { // Yearly $start_day = $activity["activity_start_day"]; if(empty($activity["activity_end_day"])) $end_day = $activity["activity_start_day"]; else $end_day = $activity["activity_end_day"]; if($start_day<=$d & $end_day>=$d & $activity["activity_start_month"]<=$this->mh & $activity["activity_end_month"]>=$this->mh) array_push($this->calendar[$d-1]['content'], $activity); } else // Daily array_push($this->calendar[$d-1]['content'], $activity); } else array_push($this->calendar[$d-1]['content'], $activity); } } }//EO populateActivity // calculateDate -------------------------------------------------------------------- // Calculate starting date // Erik Sundelf, 3rd June 2004 // function calculateDate($activity){ $sec[0] = (!empty($activity['activity_start_sec'])) ? $activity['activity_start_sec'] : "01"; $min[0] = (!empty($activity['activity_start_min'])) ? $activity['activity_start_min'] : "01"; $hour[0] = (!empty($activity['activity_start_hour'])) ? $activity['activity_start_hour'] : "01"; $day[0] = (!empty($activity['activity_start_day'])) ? $activity['activity_start_day'] : 1; $month[0] = (!empty($activity['activity_start_month'])) ? $activity['activity_start_month'] : $this->mh; $year[0] = (!empty($activity['activity_start_year'])) ? $activity['activity_start_year'] : $this->yr; $sec[1] = (!empty($activity['activity_end_sec'])) ? $activity['activity_end_sec'] : "01"; $min[1] = (!empty($activity['activity_end_min'])) ? $activity['activity_end_min'] : "01"; $hour[1] = (!empty($activity['activity_end_hour'])) ? $activity['activity_end_hour'] : "01"; $day[1] = (!empty($activity['activity_end_day'])) ? $activity['activity_end_day'] : $this->daysinmonth; $month[1] = (!empty($activity['activity_end_month'])) ? $activity['activity_end_month'] : $this->mh; $year[1] = (!empty($activity['activity_end_year'])) ? $activity['activity_end_year'] : $this->yr; for($i = 0; $i<=1; $i++) $activity_date[$i] = mktime($hour[$i], $min[$i], $sec[$i], $month[$i], $day[$i], $year[$i]); // Redefining the end date so that it matches the activities if(isset($activity["activity_frequency"]) && $activity["activity_frequency"]>0) { $freq = $activity["activity_frequency"]; if($freq==3 || $freq==1) { $activity_date[0] = mktime(0, 0, 0, $this->mh, 1, $this->yr); $activity_date[1] = strtotime("+1 month -1 day", $activity_date[0]); } } if(!empty($activity["activity_start_datetime"])) $activity_date[0] = ($activity_date[0]>=strtotime($activity["activity_start_datetime"])) ? $activity_date[0] : strtotime($activity["activity_start_datetime"]); if(!empty($activity["activity_end_datetime"])) $activity_date[1] = ($activity_date[1]>=strtotime($activity["activity_end_datetime"])) ? $activity_date[1] : strtotime($activity["activity_end_datetime"]); $activity_date[0] = ($activity_date[0]<=mktime(0, 0, 0, $this->mh, 1, $this->yr)) ? date("Y-n-j G:i:s", mktime(0, 0, 0, $this->mh, 1, $this->yr)) : date("Y-n-j G:i:s", $activity_date[0]); $activity_date[1] = ($activity_date[1]<=strtotime("+1 month", $activity_date[0])) ? date("Y-n-j G:i:s", strtotime("+1 month", $activity_date[0])) : date("Y-n-j G:i:s", $activity_date[1]); if(empty($activity['activity_frequency']) && isset($activity)) { $activity_date[0] = $activity['activity_start_datetime']; $activity_date[1] = $activity['activity_end_datetime']; } return $activity_date; }//EO calculateDate } aroundme_0_4_0/www/aroundme_0_4_0/class/Cms.class.php 777 0 0 13753 10170735405 15625 0db = $db; $this->section_id = $section_id; }//EO Cms // getCmsItems -------------------------------------------------------------------- // return array of type ids // tom calthrop - 10th December 2004 // function getCmsItems() { $query = " SELECT item_id, cms_sticky, status_id FROM " . $this->db->prefix . "_cms WHERE " ; if (isset($this->section_id)) { $query .= "section_id=" . $this->section_id . " and "; } if (isset($this->section_item_id)) { $query .= "section_item_id=" . $this->section_item_id . " and "; } if (isset($this->cms_status_id)) { $query .= "status_id=" . $this->cms_status_id . " and "; } if (isset($this->cms_item_type_id)) { $query .= "cms_item_type_id=" . $this->cms_item_type_id . " and "; } if (isset($this->level_id)) { $query .= "level_id=" . $this->level_id . " and "; } $query .= "1=1 order by cms_publish_datetime desc"; if (isset($this->limit)) { $result = $this->db->SelectLimit($query, $this->limit); } else { $result = $this->db->Execute($query); } if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getCmsItems class=Cms.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO getCmsItems // insertCmsItem -------------------------------------------------------------------- // inserts an item // tom calthrop - 8th Jan 2004 // function insertCmsItem($data) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); if (empty($data['genre_id'])) { $data['genre_id'] = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_cms ( section_id, section_item_id, item_id, cms_item_type_id, cms_publish_datetime, status_id, level_id, language_id, genre_id ) values ( " . $this->section_id . ", " . $this->section_item_id . ", " . $data['item_id'] . ", " . $this->cms_item_type_id . ", " . $datetime . ", " . $data['status_id'] . ", " . $data['level_id'] . ", " . $data['language_id'] . ", " . $data['genre_id'] . ")" ; $result = $this->db->Execute($query); if (empty($result->fields)) { $error_info = "function=insertCmsItem class=Cms.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO insertCmsItem // deleteCmsItem -------------------------------------------------------------------- // deletes cms item(s) // tom calthrop - 26th December 2004 // function deleteCmsItem($del_arr = null) { if (isset($del_arr)) { $rownums = count($del_arr); } else { $del_arr = array($this->item_id); } for ($i=0; $i < $rownums; $i++) { $query = " DELETE FROM " . $this->db->prefix . "_cms WHERE section_id=" . $this->section_id . " and section_item_id=" . $this->section_item_id . " and cms_item_type_id=" . $this->cms_item_type_id . " and level_id=" . $this->level_id . " and item_id=" . $del_arr[$i] ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=deleteCmsItem class=Cms.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } } //EO deleteCmsItem // updateCmsItem -------------------------------------------------------------------- // updates cms item(s) // tom calthrop - 26th December 2004 // function updateCmsItem($status_id, $sticky = null) { if (isset($sticky)) { $sticky = 1; } else { $sticky = "null"; } $query = " UPDATE " . $this->db->prefix . "_cms SET status_id=" . $status_id . ", cms_sticky=" . $sticky . " WHERE " ; if (isset($this->section_item_id)) { $query .= "section_item_id=" . $this->section_item_id . " and "; } $query .= " section_id=" . $this->section_id . " and cms_item_type_id=" . $this->cms_item_type_id . " and level_id=" . $this->level_id . " and item_id=" . $this->item_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateCmsItem class=Cms.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO updateCmsItem } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Comment.class.php 777 0 0 15431 10170756671 16510 0db = $db; $this->cms_item_type_id = $cms_item_type_id; $this->date = $date; }//EO Comment // getCommentCount -------------------------------------------------------------------- // returns a count if a particular item // tom calthrop - 23rd December 2004 // function getCommentCount($item_id = null, $lastviewdate = null) { if (!isset($item_id) && isset($this->item_id)) { $item_id = $this->item_id; } $query = " SELECT count(comment_id) as total FROM " . $this->db->prefix . "_comment where cms_item_type_id=" . $this->cms_item_type_id . " and " ; if (isset($item_id)) { $query .= "item_id=" . $item_id . " and "; } if (isset($lastviewdate)) { $query .= "comment_create_datetime > '" . $lastviewdate . "' AND "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields['total'])) { return $result->fields['total']; } else { $error_info = "function=getCommentCount class=Comment.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getCommentCount // getComments -------------------------------------------------------------------- // returns a count if a particular item // tom calthrop - 23rd December 2004 // function getComments($item_id = null, $profile_type=null) { if (!isset($item_id) && isset($this->item_id)) { $item_id = $this->item_id; } $query = " SELECT c.comment_id, c.comment_parent_id, c.comment_body, c.user_id, c.item_id, c.comment_create_datetime, c.cms_item_type_id, p.profile_nic, p.profile_hometown, p.profile_create_datetime FROM " . $this->db->prefix . "_comment c, " . $this->db->prefix . "_user_profile p " ; if (isset($profile_type)) { $query .= " LEFT JOIN " . $this->db->prefix . "_group_membership gm ON c.user_id=gm.user_id " ; } $query .= "WHERE "; if (isset($profile_type)) { $query .= " gm.profile_id=p.profile_id AND gm.group_id=" . $this->section_item_id . " AND " ; } else { $query .= "c.user_id=p.user_id AND p.profile_default=1 AND "; } if (isset($this->user_id)) { $query .= "c.user_id=" . $this->user_id . " AND "; } if (isset($this->no_user_id)) { $query .= "c.user_id!=" . $this->no_user_id . " AND "; } if (isset($this->cms_item_type_id)) { $query .= "c.cms_item_type_id=" . $this->cms_item_type_id . " AND "; } if (isset($this->item_id)) { $query .= "item_id=" . $item_id . " and "; } $query .= "1=1 "; if (isset($this->orderby)) { $query .= "order by " . $this->orderby; } else { $query .= "order by comment_create_datetime"; } if (isset($this->limit)) { $result = $this->db->SelectLimit($query, $this->limit); } else { $result = $this->db->Execute($query); } $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['comment_create_datetime'] = $this->date->formatDate($temp1['comment_create_datetime']); $temp1['comment_body'] = nl2br($temp1['comment_body']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getComments class=Comment.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getComments // insertComment -------------------------------------------------------------------- // inserts a comment // tom calthrop - 24th December 2004 // function insertComment($data) { if (empty($data['comment_body'])) { $GLOBALS['am_error_log'][] = array(12, null, null); } if (empty($GLOBALS['am_error_log'])) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $data['comment_body'] = htmlspecialchars($data['comment_body']); $query = " INSERT INTO " . $this->db->prefix . "_comment ( item_id, cms_item_type_id, comment_body, comment_create_datetime, user_id ) values ( " . $this->item_id . ", " . $this->cms_item_type_id . ", '" . $data['comment_body'] . "', " . $datetime . ", " . $this->user_id . ")" ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=insertComment class=Comment.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } }//EO insertComment // getComment -------------------------------------------------------------------- // returns a row // tom calthrop - 23rd December 2004 // function getComment($item_id = null, $profile_type=null) { if (!isset($item_id) && isset($this->item_id)) { $item_id = $this->item_id; } $query = " SELECT comment_id, comment_create_datetime FROM " . $this->db->prefix . "_comment WHERE cms_item_type_id=" . $this->cms_item_type_id . " AND item_id=" . $item_id ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields)) { $temp = $result->fields; $temp['comment_create_datetime'] = $this->date->formatDate($temp['comment_create_datetime']); $result->Close(); return $temp; } else { $error_info = "function=getComment class=Comment.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getComment } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Date.class.php 777 0 0 15770 10170663524 15763 0"; //while($value<=$year) for($i = $value; $i<=$year; $i++) { $selected = ""; if ($current_year == $i) { $selected = " selected"; } $output .= "
\n$pad"; // if this is the closing block for the list, // put extra newlines after it so the output // looks nice. if ($level == 0) { $html .= "\n\n"; } // done! return $html; break; case 'number_list_start': // build the base HTML $css = $this->formatConf(' class="%s"', 'css_ol'); $html = ""; // if this is the opening block for the list, // put an extra newline in front of it so the // output looks nice. if ($level == 0) { $html = "\n$html"; } // done! return $html; break; case 'number_list_end': // build the base HTML $html = "\n$pad"; // if this is the closing block for the list, // put extra newlines after it so the output // looks nice. if ($level == 0) { $html .= "\n\n"; } // done! return $html; break; case 'bullet_item_start': case 'number_item_start': // pick the proper CSS class if ($type == 'bullet_item_start') { $css = $this->formatConf(' class="%s"', 'css_ul_li'); } else { $css = $this->formatConf(' class="%s"', 'css_ol_li'); } // build the base HTML $html = "\n$pad"; // for the very first item in the list, do nothing. // but for additional items, be sure to close the // previous item. if ($count > 0) { $html = "$html"; } // done! return $html; break; case 'bullet_item_end': case 'number_item_end': default: // ignore item endings and all other types. // item endings are taken care of by the other types // depending on their place in the list. return ''; break; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Newline.php 777 0 0 245 10077246754 21463 0\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Paragraph.php 777 0 0 1367 10125347572 22007 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { extract($options); //type if ($type == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($type == 'end') { return "

\n\n"; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Phplookup.php 777 0 0 3132 10125347572 22053 0 '_blank', 'css' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $text = trim($options['text']); $css = $this->formatConf(' class="%s"', 'css'); // start the html $output = "getConf('target', ''); if ($target) { // use a "popup" window. this is XHTML compliant, suggested by // Aaron Kalin. uses the $target as the new window name. $target = htmlspecialchars($target); $output .= " onclick=\"window.open(this.href, '$target');"; $output .= " return false;\""; } // take off the final parens for functions if (substr($text, -2) == '()') { $q = substr($text, 0, -2); } else { $q = $text; } $q = htmlspecialchars($q); $text = htmlspecialchars($text); // finish and return $output .= " href=\"http://php.net/$q\">$text"; return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Prefilter.php 777 0 0 3302 10125347572 22025 0 | // +----------------------------------------------------------------------+ // // $Id: Prefilter.php,v 1.5 2004/09/25 19:05:14 pmjones Exp $ /** * * This class implements a Text_Wiki_Render_Xhtml to "pre-filter" source text so * that line endings are consistently \n, lines ending in a backslash \ * are concatenated with the next line, and tabs are converted to spaces. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Render_Xhtml_Prefilter extends Text_Wiki_Render { function token() { return ''; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Raw.php 777 0 0 715 10077246754 20615 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Revise.php 777 0 0 2027 10125347572 21331 0 null, 'css_del' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'del_start') { $css = $this->formatConf(' class="%s"', 'css_del'); return ""; } if ($options['type'] == 'del_end') { return ""; } if ($options['type'] == 'ins_start') { $css = $this->formatConf(' class="%s"', 'css_ins'); return ""; } if ($options['type'] == 'ins_end') { return ""; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Shockwaveflash.php 777 0 0 6250 10170575172 23045 0 '/', 'css' => null, 'css_link' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // note the image source $src = $options['src']; // is the source a local file or URL? if (strpos($src, '://') === false) { // the source refers to a local file. // add the URL base to it. $src = $this->getConf('base', '/') . $src; } // stephane@metacites.net // is the image clickable? if (isset($options['attr']['link'])) { // yes, the image is clickable. // are we linked to a URL or a wiki page? if (strpos($options['attr']['link'], '://')) { // it's a URL $href = $options['attr']['link']; } else { // it's a WikiPage; assume it exists. /** @todo This needs to honor sprintf wikilinks (pmjones) */ /** @todo This needs to honor interwiki (pmjones) */ /** @todo This needs to honor freelinks (pmjones) */ $href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . $options['attr']['link']; } } else { // image is not clickable. $href = null; } // unset so it won't show up as an attribute unset($options['attr']['link']); if (empty($options['attr']['width'])) { $options['attr']['width'] = "100%"; } if (empty($options['attr']['height'])) { $options['attr']['height'] = "100%"; } // start the HTML output $output = ' '; // was the image clickable? if ($href) { // yes, add the href and return $href = htmlspecialchars($href); $output = "$output"; } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Strong.php 777 0 0 1351 10125347572 21347 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Superscript.php 777 0 0 1342 10125347572 22416 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Table.php 777 0 0 4654 10125347572 21133 0 null, 'css_tr' => null, 'css_th' => null, 'css_td' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // make nice variable names (type, attr, span) extract($options); $pad = ' '; switch ($type) { case 'table_start': $css = $this->formatConf(' class="%s"', 'css_table'); return "\n\n\n"; break; case 'table_end': return "\n\n"; break; case 'row_start': $css = $this->formatConf(' class="%s"', 'css_tr'); return "$pad\n"; break; case 'row_end': return "$pad\n"; break; case 'cell_start': // base html $html = $pad . $pad; // is this a TH or TD cell? if ($attr == 'header') { // start a header cell $css = $this->formatConf(' class="%s"', 'css_th'); $html .= "formatConf(' class="%s"', 'css_td'); $html .= " 1) { $html .= " colspan=\"$span\""; } // add alignment if ($attr != 'header' && $attr != '') { $html .= " style=\"text-align: $attr;\""; } // done! $html .= '>'; return $html; break; case 'cell_end': if ($attr == 'header') { return "\n"; } else { return "\n"; } break; default: return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Tighten.php 777 0 0 221 10125347572 21450 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Toc.php 777 0 0 3621 10125347572 20622 0 null, 'css_item' => null, 'title' => 'Table of Contents', 'div_id' => 'toc' ); var $min = 2; /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // type, id, level, count, attr extract($options); switch ($type) { case 'list_start': $html = 'getConf('css_list'); if ($css) { $html .= " class=\"$css\""; } $div_id = $this->getConf('div_id'); if ($div_id) { $html .= " id=\"$div_id\""; } $html .= '>'; $html .= $this->getConf('title'); return $html; break; case 'list_end': return "\n"; break; case 'item_start': $html = 'getConf('css_item'); if ($css) { $html .= " class=\"$css\""; } $pad = ($level - $this->min); $html .= " style=\"margin-left: {$pad}em;\">"; $html .= ""; return $html; break; case 'item_end': return "\n"; break; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Tt.php 777 0 0 1335 10125347572 20464 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Url.php 777 0 0 5565 10125347572 20650 0 '_blank', 'images' => true, 'img_ext' => array('jpg', 'jpeg', 'gif', 'png'), 'css_inline' => null, 'css_footnote' => null, 'css_descr' => null, 'css_img' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // create local variables from the options array (text, // href, type) extract($options); // find the rightmost dot and determine the filename // extension. $pos = strrpos($href, '.'); $ext = strtolower(substr($href, $pos + 1)); $href = htmlspecialchars($href); // does the filename extension indicate an image file? if ($this->getConf('images') && in_array($ext, $this->getConf('img_ext', array()))) { // create alt text for the image if (! isset($text) || $text == '') { $text = basename($href); $text = htmlspecialchars($text); } // generate an image tag $css = $this->formatConf(' class="%s"', 'css_img'); $output = ""; } else { // allow for alternative targets on non-anchor HREFs if ($href{0} == '#') { $target = ''; } else { $target = $this->getConf('target'); } // generate a regular link (not an image) $text = htmlspecialchars($text); $css = $this->formatConf(' class="%s"', "css_$type"); $output = "'; } } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Wikilink.php 777 0 0 10256 10125347572 21700 0 array(), // set to null or false to turn off page checks 'view_url' => 'http://example.com/index.php?page=%s', 'new_url' => 'http://example.com/new.php?page=%s', 'new_text' => '?', 'new_text_pos' => 'after', // 'before', 'after', or null/false 'css' => null, 'css_new' => null ); /** * * Renders a token into XHTML. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // make nice variable names (page, anchor, text) extract($options); // are we checking page existence? $list =& $this->getConf('pages'); if (is_array($list)) { // yes, check against the page list $exists = in_array($page, $list); } else { // no, assume it exists $exists = true; } // convert *after* checking against page names so as not to mess // up what the user typed and what we're checking. $page = htmlspecialchars($page); $anchor = htmlspecialchars($anchor); $text = htmlspecialchars($text); // does the page exist? if ($exists) { // PAGE EXISTS. // yes, link to the page view, but we have to build // the HREF. we support both the old form where // the page always comes at the end, and the new // form that uses %s for sprintf() $href = $this->getConf('view_url'); if (strpos($href, '%s') === false) { // use the old form (page-at-end) $href = $href . $page . $anchor; } else { // use the new form (sprintf format string) $href = sprintf($href, $page . $anchor); } // get the CSS class and generate output $css = $this->formatConf(' class="%s"', 'css'); $output = "$text"; } else { // PAGE DOES NOT EXIST. // link to a create-page url, but only if new_url is set $href = $this->getConf('new_url', null); // set the proper HREF if (! $href || trim($href) == '') { // no useful href, return the text as it is $output = $text; } else { // yes, link to the new-page href, but we have to build // it. we support both the old form where // the page always comes at the end, and the new // form that uses sprintf() if (strpos($href, '%s') === false) { // use the old form $href = $href . $page; } else { // use the new form $href = sprintf($href, $page); } } // get the appropriate CSS class and new-link text $css = $this->formatConf(' class="%s"', 'css'); $new = $this->getConf('new_text'); // what kind of linking are we doing? $pos = $this->getConf('new_text_pos'); if (! $pos || ! $new) { // no position (or no new_text), use css only on the page name $output = "$page"; } elseif ($pos == 'before') { // use the new_text BEFORE the page name $output = "$new$text"; } else { // default, use the new_text link AFTER the page name $output = "$text$new"; } } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/config/ 777 0 0 0 10156263233 13311 5aroundme_0_4_0/www/aroundme_0_4_0/config/config_acs.inc.php 777 0 0 13454 10170751305 16775 0 aroundme_0_4_0/www/aroundme_0_4_0/config/config_aroundme.inc.php 777 0 0 30075 10170757464 20053 0 aroundme_0_4_0/www/aroundme_0_4_0/error.php 777 0 0 5075 10170663312 13776 0set('templatePath', $template_path); session_start(); if (isset($_SESSION['s_homepage'])) { $homepage = $_SESSION['s_homepage']; } //setup language if(isset($_REQUEST['language_id'])) { $language_id = $_REQUEST['language_id']; } else { $language_id = $c_node['node']['language_default']; } $languagePath = "language/" . $language_id . "/" . $template_name . "/"; $languageArrayPath = $languagePath . "/arrays/"; $languageTextPath = $languagePath . "/texts/"; require_once($languagePath . 'error.lang.php'); require_once($languageArrayPath . 'arr_language_name.lang.php'); $body->set('lang', $lang); $tpl->set('lang', $lang); /* * MOVE TO TEMPLATE */ if(!empty($c_node['node']['language_available'])) { $body->set('language_available', $c_node['node']['language_available']); } if(!empty($homepage)) { $body->set('homepage', $homepage); } $tpl->set('templatePath', $template_path); $body->set('templatePath', $template_path); //write template $tpl->set('content', $body->fetch($templateInner)); echo $tpl->fetch($templateOuter); ?> aroundme_0_4_0/www/aroundme_0_4_0/g_acs.php 777 0 0 10455 10170663307 13743 0checkPermission($c_acs['arr_acs']['resource']['group_acs'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } require_once($c_node['dir']['class_path'] . 'Acs.class.php'); $acs = new Acs(); $acs->db = $db; $section_id = $c_acs['arr_section']['group']; $acs->section_id = $section_id; $acs->group_id = $group_id; //append language setup require_once($languageArrayPath . 'arr_acs.lang.php'); //ROLES $output_roles = $acs->getGroupRoles(); //RESOURCES //get resource_id's from config and build the resources array $config_resources = $c_acs['section_resource'][$section_id]; $arr_acs = $lang['arr_acs']; $resource_privilege = $c_acs['resource_privilege']; $output_resources = $acs->getResources($config_resources, $resource_privilege, $arr_acs, $output_roles); if (isset($_POST['insert_role'])) { $data = $_POST['data']; $acs->insertGroupRole($data); $output_resources = $acs->getResources($config_resources, $resource_privilege, $arr_acs, $output_roles); if (empty($GLOBALS['am_error_log'])) { header("Location: g_acs.php?group_id=" . $group_id . "&" . SID); exit; } } elseif (isset($_POST['update_role'])) { $data = $_POST['data']; $acs->updateGroupRole($data); $acs->role_id = $data['role_id']; $output_role = $acs->getGroupRole(); $output_roles = $acs->getGroupRoles(); if (empty($GLOBALS['am_error_log'])) { header("Location: g_acs.php?group_id=" . $group_id . "&" . SID); exit; } } elseif (isset($_POST['delete_role'])) { $data = $_POST['data']; $acs->deleteGroupRole($data); $output_roles = $acs->getGroupRoles(); $output_resources = $acs->getResources($config_resources, $resource_privilege, $arr_acs, $output_roles); if (empty($GLOBALS['am_error_log'])) { header("Location: g_acs.php?group_id=" . $group_id . "&" . SID); exit; } } elseif (isset($_REQUEST['role_id'])) { $acs->role_id = $_REQUEST['role_id']; $output_role = $acs->getGroupRole(); } elseif(isset($_POST["update_permissions"])){ $acs->deletePermissions(); // Resets all the permissions if(!empty($_POST['data']['ids'])){ foreach($_POST['data']['ids'] as $key => $value){ $ind = explode("-", $key); $resource_id = $ind[0]; // resource_id $privilege_id = $ind[1]; // privilege_id $role_id = $output_roles[$ind[2]]["role_id"]; // role_id $acs->insertPermission($role_id, $resource_id, $privilege_id); // insert privileges } } $output_resources = $acs->getResources($config_resources, $resource_privilege, $arr_acs, $output_roles); } elseif (isset($_POST['set_default']) && isset($_POST['data']['default_role_id'])) { $acs->updateGroupDefaultRole($_POST['data']['default_role_id']); $output_roles = $acs->getGroupRoles(); } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_roles)) { $body->set('roles', $output_roles); } if (!empty($output_role)) { $body->set('role', $output_role); } if (!empty($output_resources)) { $body->set('resources', $output_resources); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_activity.php 777 0 0 12055 10170663304 15024 0checkPermission($c_acs['arr_acs']['resource']['group_activity'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } if (isset($_REQUEST['activity_id'])) { $activity_id = $_REQUEST['activity_id']; } else { header("Location: g_calendar.php?group_id=" . $_REQUEST['group_id'] . "&" . SID); exit; } if (isset($_REQUEST['task_id'])) { $task_id = $_REQUEST['task_id']; } require_once($c_node['dir']['class_path'] . 'Activity.class.php'); require_once($c_node['dir']['class_path'] . 'Bookmark.class.php'); //append language setup require_once($languageArrayPath . 'arr_activity.lang.php'); require_once($languageArrayPath . 'arr_task_user_status.lang.php'); require_once($languageArrayPath . 'arr_user.lang.php'); //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup activities require_once($c_node['dir']['class_path'] . 'Activity.class.php'); $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $group_id; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; if (isset($_REQUEST['withdraw_confirmation'])) { $activity->updateTaskUserStatus($_REQUEST['task_id'], $me['user_id'], $c_node['activity']['task_user_status']['withdrawn']); header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&" . SID); exit; } elseif (isset($_REQUEST['task_apply_update'])) { $activity->updateTaskUserStatus($_REQUEST['task_id'], $me['user_id'], $c_node['activity']['task_user_status']['pending']); header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&" . SID); exit; } elseif (isset($_REQUEST['task_apply'])) { $activity->insertTaskUserStatus($_REQUEST['task_id'], $me['user_id'], $c_node['activity']['task_user_status']['pending']); header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&" . SID); exit; } $activity->activity_id = $activity_id; $output_activity = $activity->getActivity(); $output_tasks = $activity->getTasks(); $user->profile_id = $output_group['member']['profile_id']; $output_activity['author'] = $user->getProfile($output_activity['user_id']); //get activity image if (isset($output_activity['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->file_id = $output_activity['file_id']; $output_activity['image'] = $file->getFileRecord(); } //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_activity'], $date, $user_id); $bookmark->item_id = $activity_id; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_activity['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_activity['bookmark']['recommend'] = 1; } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_activity)) { $body->set('activity', $output_activity); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); } if (!empty($c_node['activity']['task_user_status'])) { $body->set('task_status_ids', $c_node['activity']['task_user_status']); } if (!empty($output_activity['activity_title'])) { $template_pageLink = $lang['txt_activity']; $template_pageLinkNote = $output_activity['activity_title']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_activity_edit.php 777 0 0 16615 10170663300 16033 0checkPermission($c_acs['arr_acs']['resource']['group_activity'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id."&".SID); exit; } //append language setup require_once($languageArrayPath . 'arr_activity.lang.php'); require_once($languageArrayPath . 'arr_task_user_status.lang.php'); require_once($languageArrayPath . 'arr_user.lang.php'); //setup activity require_once($c_node['dir']['class_path'] . 'Activity.class.php'); $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $group_id; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; if (isset($_POST['edit_activity_schedule'])) { $output_activity = $data; $output_activity['activity_id'] = $_REQUEST['activity_id']; $display = "edit_activity_schedule"; } elseif (isset($_POST['insert_activity'])) { $activity->user_id = $user_id; $activity->frequency_ids = $c_node['activity']['frequency']; $activity->activity_id = $_REQUEST['activity_id']; $activity->insertactivity($data); if (empty($GLOBALS['am_error_log'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; $cms->user_id = $user_id; $temp['language_id'] = $output_group['language_id']; $temp['genre_id'] = $output_group['genre_id']; $temp['item_id'] = $activity->activity_id; //insert node cms entry if (isset($data['cms_node'])) { $temp['level_id'] = $c_node['cms']['cms_level']['group']['home']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //insert group cms entry if (isset($data['cms_group'])) { $temp['level_id'] = $c_node['cms']['cms_level']['node']; if ($group['group_cms_auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity->activity_id . "&".SID); exit; } else { $output_activity = $data; } } elseif (isset($_POST['update_activity'])) { $activity->updateActivity($data); if (empty($GLOBALS['am_error_log'])) { header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity->activity_id . "&".SID); exit; } } elseif (isset($_POST['delete_activity'])) { $activity->deleteActivity($_REQUEST['activity_id']); if (empty($GLOBALS['am_error_log'])) { header("Location: g_calendar.php?group_id=" . $group_id . "&".SID); exit; } } elseif (isset($_REQUEST['activity_id'])) { $activity_id = $_REQUEST['activity_id']; $activity->activity_id = $activity_id; $output_activity = $activity->getActivity(); $output_tasks = $activity->getTasks(); //figure out if we can edit or not based on confirmed tasks $total_applicants = 0; foreach($output_tasks as $key => $i): $total_applicants = $total_applicants + $i['task_confirmed']; $total_applicants = $total_applicants + $i['task_applicants']; endforeach; if ($total_applicants == 0) { $display = "edit_activity"; } else { $display = "no_edit_allowed"; } } //else we add //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif $output_images = $file->getFiles(); //move to template if (!empty($c_node['activity']['frequency'])) { $body->set('frequency_ids', $c_node['activity']['frequency']); } if (!empty($output_activity)) { $body->set('activity', $output_activity); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_images)) { $body->set('images', $output_images); } if (!empty($output_activity['activity_start_datetime'])) { $body->set('start_datedropdown', $date->dateDropdown($output_activity['activity_start_datetime'], 1, 'start', 10, 20)); } else { $body->set('start_datedropdown', $date->dateDropdown(date("Y-m-d H:00:00"), 1, 'start', 10, 20)); } if (!empty($output_activity['activity_end_datetime'])) { $body->set('end_datedropdown', $date->dateDropdown($output_activity['activity_end_datetime'], 1, 'end', 10, 20)); } else { $body->set('end_datedropdown', $date->dateDropdown(date("Y-m-d H:00:00"), 1, 'end', 10, 20)); } if (!empty($output_activity['activity_start_day'])) { if($output_activity['activity_frequency']==3) $activity_start_daytime = date("Y-m-d", mktime(0,0,0, 1, $output_activity['activity_start_day'], 1999)); else $activity_start_daytime = date("Y-m-d", mktime(0,0,0, $output_activity['activity_start_month'], $output_activity['activity_start_day'], 1999)); $body->set('start_monthlydropdown', $date->dateDropdown($activity_start_daytime, 1, 'activity_start', 10, 20, $output_activity['activity_frequency'])); } else { $body->set('start_monthlydropdown', $date->dateDropdown(date("Y-m-d H:00:00"), 1, 'activity_start', 10, 20)); } if (!empty($output_activity['activity_end_day'])) { if($output_activity['activity_frequency']==3) $activity_end_daytime = date("Y-m-d", mktime(0,0,0, 1, $output_activity['activity_end_day'], 1999)); else $activity_end_daytime = date("Y-m-d", mktime(0,0,0, $output_activity['activity_end_month'], $output_activity['activity_end_day'], 1999)); $body->set('end_monthlydropdown', $date->dateDropdown($activity_end_daytime, 1, 'activity_end', 10, 20, $output_activity['activity_frequency'])); } else { $body->set('end_monthlydropdown', $date->dateDropdown(date("Y-m-d H:00:00"), 1, 'activity_end', 10, 20)); } if (!empty($output_group)) { $body->set('group', $output_group); } $body->set('cms_node_auto_publish', $c_node['cms']['node']['auto_publish']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_activity_task_edit.php 777 0 0 14456 10170663275 17071 0checkPermission($c_acs['arr_acs']['resource']['group_activity'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id."&".SID); exit; } if (isset($_REQUEST['activity_id'])) { $activity_id = $_REQUEST['activity_id']; } else { header("Location: g_calendar.php?group_id=" . $group_id . "&".SID); exit; } if (isset($_REQUEST['task_id'])) { $task_id = $_REQUEST['task_id']; } //append language setup require_once($languageArrayPath . 'arr_activity.lang.php'); require_once($languageArrayPath . 'arr_task_user_status.lang.php'); require_once($languageArrayPath . 'arr_user.lang.php'); //setup activity require_once($c_node['dir']['class_path'] . 'Activity.class.php'); $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $group_id; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; $activity->activity_id = $activity_id; if (isset($_POST['insert_task'])) { $activity->user_id = $user_id; $activity->insertTask($data); if (empty($GLOBALS['am_error_log'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->cms_item_type_id = $c_node['cms']['item_type']['group_task']; $cms->user_id = $user_id; $temp['language_id'] = $output_group['language_id']; $temp['genre_id'] = $output_group['genre_id']; $temp['item_id'] = $activity->task_id; //insert node cms entry if (isset($data['cms_node'])) { $temp['level_id'] = $c_node['cms']['cms_level']['group']['home']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //insert group cms entry if (isset($data['cms_group'])) { $temp['level_id'] = $c_node['cms']['cms_level']['node']; if ($group['group_cms_auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&".SID); exit; } else { $output_task = $data; } } elseif (isset($_POST['update_task'])) { $data['task_id'] = $task_id; $activity->updateTask($data); if (empty($GLOBALS['am_error_log'])) { header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&".SID); exit; } } elseif (isset($_POST['delete_task'])) { $activity->deleteTask($task_id); if (empty($GLOBALS['am_error_log'])) { header("Location: g_activity.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&".SID); exit; } } elseif (isset($_POST['update_user_tasks']) && isset($data['user_id'])) { $activity->updateTaskApplicants($task_id, $data['user_id'], $data['status_id']); if (empty($GLOBALS['am_error_log'])) { header("Location: g_activity_task_edit.php?group_id=" . $group_id . "&activity_id=" . $activity_id . "&task_id=" . $task_id . "&".SID); exit; } } elseif (isset($_REQUEST['edit_task'])) { $output_task = $activity->getTask($task_id); $output_task['activity_id'] = $activity_id; $display = "edit_task"; //edit the task } elseif (isset($task_id)) { $output_task = $activity->getTask($task_id); $output_task_applicants = $activity->getTaskApplicants($task_id); //check if we can edit $allow_task_edit = true; if (isset($output_task_applicants)) { foreach($output_task_applicants as $key => $i): if ($i['status_id'] == $c_node['activity']['task_user_status']['confirmed'] || $i['status_id'] == $c_node['activity']['task_user_status']['pending']) { $allow_task_edit = false; break; } endforeach; } } else { $output_task['activity_id'] = $activity_id; $display = "edit_task"; //adds a task } //move to template if (!empty($output_activity)) { $body->set('activity', $output_activity); } if (!empty($output_task_applicants)) { $body->set('task_applicants', $output_task_applicants); } if (!empty($output_task)) { $body->set('task', $output_task); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_task['task_start_datetime'])) { $body->set('start_datedropdown', $date->dateDropdown($output_task['task_start_datetime'], 1, 'start', 10, 20)); } else { $body->set('start_datedropdown', $date->dateDropdown(date("Y-m-d H:00:00"), 1, 'start', 10, 20)); } if (!empty($output_task['task_end_datetime'])) { $body->set('end_datedropdown', $date->dateDropdown($output_task['task_end_datetime'], 1, 'end', 10, 20)); } else { $body->set('end_datedropdown', $date->dateDropdown(date("Y-m-d H:00:00"), 1, 'end', 10, 20)); } if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($allow_task_edit)) { $body->set('allow_task_edit', $allow_task_edit); } $body->set('cms_node_auto_publish', $c_node['cms']['node']['auto_publish']); $body->set('task_user_status_ids', $c_node['activity']['task_user_status']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_apply.php 777 0 0 7533 10170663272 14306 0node_id = $c_node['node']['node_id']; $role_default = $group_acs->getGroupRole(1); $group->member_status_id = $c_node['group']['member_status']['pending']; $group->insertMembership($data['profile_id'], $role_default['role_id']); header("Location: g_apply.php?group_id=" . $group_id . "&" . SID); exit; } elseif (isset($_POST['user_member'])) { $group->node_id = $c_node['node']['node_id']; $role_default = $group_acs->getGroupRole(1); $group->member_status_id = $c_node['group']['member_status']['active']; $group->insertMembership($data['profile_id'], $role_default['role_id']); //setup statistics $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; $statistic->statistic_type_id = $c_node['statistic']['group']['total_members']; //reset the statistics $total_active_members = $group->getCountMembers(); $statistic->setStatistic($total_active_members); header("Location: g_group.php?group_id=" . $group_id . "&" . SID); exit; } //check the group status is active if ($output_group['status_id'] == $c_node['group']['status']['active']) { //append language setup require_once($languageTextPath . 'node_rules.lang.php'); require_once($languageArrayPath . 'arr_group.lang.php'); //check the group members status if (isset($output_group['member']['status_id']) && $output_group['member']['status_id'] == $c_node['group']['member_status']['pending']) { $display = "group_application_in_progress"; } elseif (isset($output_group['member']['status_id']) && $output_group['member']['status_id'] == $c_node['group']['member_status']['active']) { header("Location: g_group.php?group_id=" . $group_id . "&" . SID); exit; } elseif (empty($output_group['member']['status_id'])) { if ($output_group['group_visibility'] == 1) { //check if the group is not hidden //check the registration type if ($output_group['group_registration_type'] == $c_node['group']['registration_type']['automatic']) { $display = "group_apply_automatic"; } elseif ($output_group['group_registration_type'] == $c_node['group']['registration_type']['approved']) { $display = "group_apply_approved"; } } } } // if we end up with no $display set we will display a polite "group unavailable" message if (isset($display)) { //get the profile dropdown unset($user->file); $user->user_id = $me['user_id']; $user_profiles = $user->getProfiles(); } $lang['txt_node_rules'] = nl2br($lang['txt_node_rules']); //move to template if (!empty($user_profiles)) { $body->set('profiles', $user_profiles); } if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($display)) { $body->set('display', $display); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_blog.php 777 0 0 15106 10170663266 14122 0checkPermission($c_acs['arr_acs']['resource']['group_blog'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id . "&" . SID); exit; } if (isset($_REQUEST['blog_id'])) { $blog_id = $_REQUEST['blog_id']; } //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //get blogs $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $group_id; $blog->limit = 5; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['group_blog'], $date); $comment->section_item_id = $group_id; $comment->user_id = $user_id; //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_blog'], $date, $user_id); //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_section"; } elseif (isset($_POST['insert'])) { $comment->item_id = $blog_id; $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; //update stats $statistic->statistic_type_id = $c_node['statistic']['group']['total_comments']; $statistic->setStatistic($comment->getCommentCount()); $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $group->user_id = $user_id; $statistic->setStatistic($comment->getCommentCount()); //goto the subject return header("Location: g_blog.php?group_id=". $group_id . "&blog_id=". $blog_id . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } if (isset($blog_id)) { $blog->blog_id = $blog_id; $output_blog = $blog->getBlog(); if (isset($output_blog['blog_id'])) { $output_blog['blog_body_display'] = $wiki->transform($output_blog['blog_body'], 'Xhtml'); $bookmark->item_id = $output_blog['blog_id']; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blog['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blog['bookmark']['recommend'] = 1; } if (isset($output_blog['user_id'])) { $user->user_id = $output_blog['user_id']; $output_author = $user->getProfile(); } $comment->item_id = $blog_id; $output_comments = $comment->getComments($blog_id, 1); } } elseif (isset($_REQUEST['blog_history'])) { unset($blog->limit); $blog_history = $blog->getBlogs(); $display = "blog_history"; } else { $output_blogs = $blog->getBlogs(); if (!empty($output_blogs)) { foreach($output_blogs as $key => $i): $output_blogs[$key]['blog_body_display'] = $wiki->transform($i['blog_body'], 'Xhtml'); $bookmark->item_id = $i['blog_id']; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blogs[$key]['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blogs[$key]['bookmark']['recommend'] = 1; } $output_blogs[$key]['comment_total'] = $comment->getCommentCount($i['blog_id']); endforeach; } $display = "multiple_blogs"; } //move vars to template if (!empty($display)) { $body->set('display', $display); } if (!empty($output_blog)) { $body->set('blog', $output_blog); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); } if (!empty($blog_history)) { $body->set('blog_history', $blog_history); } if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($output_author)) { $body->set('author', $output_author); } if (isset($output_blog['blog_title'])) { $template_pageLink = $lang['txt_blog']; $template_pageLinkNote = $output_blog['blog_title']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_blog_edit.php 777 0 0 13224 10170663263 15123 0checkPermission($c_acs['arr_acs']['resource']['group_blog'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id . "&" . SID); exit; } require_once($c_node['dir']['class_path'] . 'Blog.class.php'); require_once($c_node['dir']['class_path'] . 'Wiki/Wiki.php'); //append language setup require_once($languageArrayPath . 'arr_group.lang.php'); if (isset($_REQUEST['blog_id'])) { $blog_id = $_REQUEST['blog_id']; } //setup blog $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $group_id; $blog->user_id = $me['user_id']; //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'g_library.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'g_library_edit.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); if (isset($_POST['edit_blog']) || isset($_REQUEST['add_blog'])) { $output_images = $file->getFiles(); } if (isset($data)) { $data['blog_body'] = stripslashes($data['blog_body']); $data['blog_body_display'] = $wiki->transform($data['blog_body'], 'Xhtml'); $data['blog_synopsis'] = stripslashes(htmlspecialchars($data['blog_synopsis'])); $data['blog_title'] = stripslashes(htmlspecialchars($data['blog_title'])); if (isset($_POST['preview_blog'])) { $data['blog_body'] = htmlspecialchars($data['blog_body']); $output_blog = $data; $display = "preview_blog"; } elseif (isset($_POST['edit_blog_again'])) { $output_blog = $data; $display = "add_blog"; } elseif (isset($_POST['insert_blog'])) { $blog->insertBlog($data); if (empty($GLOBALS['am_error_log'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; $cms->user_id = $user_id; $temp['language_id'] = $output_group['language_id']; $temp['genre_id'] = $output_group['genre_id']; $temp['item_id'] = $blog->blog_id; //insert node cms entry if (isset($data['cms_node'])) { $temp['level_id'] = $c_node['cms']['cms_level']['node']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //insert group cms entry if (isset($data['cms_group'])) { $temp['level_id'] = $c_node['cms']['cms_level']['group']['home']; if ($group['group_cms_auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); //update stats $statistic->section_item_id = $user_id; $statistic->statistic_type_id = $c_node['statistic']['user']['total_blogs']; $blog->user_id = $user_id; $statistic->setStatistic($blog->getBlogCount()); return header("Location: g_blog.php?group_id=". $group_id . "&blog_id=". $blog->blog_id . "&" . SID); exit; } else { $output_blog = $data; $display = "add_blog"; } } } elseif (isset($_REQUEST['add_blog'])) { $display = "add_blog"; } elseif (isset($blog_id)) {//if we have a blog id we retrieve it $blog->blog_id = $blog_id; $output_blog = $blog->getBlog(); $output_blog['blog_body_display'] = $wiki->transform($output_blog['blog_body'], 'Xhtml'); } //get images $output_images = $file->getFiles(); //move vars to template if (!empty($output_group)) { $body->set('group', $output_group); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_blog)) { $body->set('blog', $output_blog); } if (!empty($output_images)) { $body->set('images', $output_images); $body->set('image_thumbs', $c_node['file']['image']['thumb']); } $body->set('cms_node_auto_publish', $c_node['cms']['node']['auto_publish']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_calendar.php 777 0 0 10147 10170663260 14742 0checkPermission($c_acs['arr_acs']['resource']['group_activity'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } require_once($c_node['dir']['class_path'] . 'Calendar.class.php'); //append language setup require_once($languageArrayPath . 'arr_activity.lang.php'); require_once($languageArrayPath . 'arr_task_user_status.lang.php'); //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; $file->path = "group"; //setup activities require_once($c_node['dir']['class_path'] . 'Activity.class.php'); $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $group_id; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; if (isset($_POST['search'])) { $search = trim($_POST['search_text']); $output_activities = $activity->getActivities($search); $output_tasks = $activity->getTasks($search); } else { $output_activities = $activity->getActivities(); $output_tasks = $activity->getTasks(); } //calendar stuff ---------------------------------------------------------- //setup calendar if(!isset($_REQUEST["time"])) { $time = mktime(); } else { $time = $_REQUEST["time"]; } $now = getdate($time); $cal = new Calendar($db, $now, $me['user_id']); //get date $cal->setCalendarBase(); if (!empty($output_activities)) { foreach($output_activities as $index => $activity_tmp): if(isset($activity_tmp)) { $activities[] = $cal->modifyActivityDate($activity_tmp); } endforeach; } // Populate all activities if (!empty($activities)) { foreach($activities as $index => $activity_tmp): $cal->populateActivity($activity_tmp); endforeach; } $cal->setBlankDays(); // Set blank days in the beginning of the calendar $calendar = $cal->getCalendar(); // Get the calendar array // get today's day number to highlight today in calendar, // a string is only returned if the calendar view is current month $todaynumber = $cal->getToDay(mktime()); // Get last and next months timestamp $links["last"] = $date->getMonthTime($time, -1); $links["next"] = $date->getMonthTime($time, 1); // Get the calendar view month name $thismonth = $date->getMonthString($time); //move to template if (isset($output_group)) { $body->set('group', $output_group); } if (isset($output_activities)) { $body->set('activities', $output_activities); } if (isset($output_tasks)) { $body->set('tasks', $output_tasks); } if (isset($display)) { $body->set('display', $display); } if (isset($search)) { $body->set('search', $search); } if (!empty($time)) { $body->set('time', $time); } if (!empty($calendar)) { $body->set('calendar', $calendar); } if (isset($todaynumber)) { $body->set('todaynumber', $todaynumber); } if (!empty($thismonth)) { $body->set('thismonth', $thismonth); } if (!empty($links)) { $body->set('links', $links); } $template_pageLink = $lang['txt_activities']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_cms.php 777 0 0 24066 10170736542 13764 0checkPermission($c_acs['arr_acs']['resource']['group_cms'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id."&".SID); exit; } unset($status_id); // this is temporary - somehow status_id is set somewhere - bug / tom if (isset($_REQUEST['status_id']) && $_REQUEST['status_id'] > 0) { $status_id = $_REQUEST['status_id']; unset($data); } require_once($c_node['dir']['class_path'] . 'Cms.class.php'); require_once($c_node['dir']['class_path'] . 'Poll.class.php'); require_once($c_node['dir']['class_path'] . 'Forum.class.php'); require_once($c_node['dir']['class_path'] . 'Library.class.php'); require_once($c_node['dir']['class_path'] . 'Activity.class.php'); require_once($c_node['dir']['class_path'] . 'Blog.class.php'); //append language setup require_once($languageArrayPath . 'arr_cms.lang.php'); //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->level_id = $c_node['cms']['cms_level']['group']['home']; if (isset($status_id)) { $cms->cms_status_id = $status_id; } //get subject ids ----------------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; if (isset($data['subject_status'])) { foreach($data['subject_status'] as $key => $i): if ($i <= 0) { $arr_subject_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['subject_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_subject_delete)) { $cms->deleteCmsItem($arr_subject_delete); } } $output_cms_subjects = $cms->getCmsItems(); if (!empty($output_cms_subjects)) { foreach($output_cms_subjects as $key => $i): $cms_subject_ids[] = $i['item_id']; endforeach; } //get group blog ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; if (isset($data['blog_status'])) { foreach($data['blog_status'] as $key => $i): if ($i <= 0) { $arr_blog_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['blog_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_blog_delete)) { $cms->deleteCmsItem($arr_blog_delete); } } $output_cms_blogs = $cms->getCmsItems(); if (!empty($output_cms_blogs)) { foreach($output_cms_blogs as $key => $i): $cms_blog_ids[] = $i['item_id']; endforeach; } //get library item ids -------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_library']; if (isset($data['library_item_status'])) { foreach($data['library_item_status'] as $key => $i): if ($i <= 0) { $arr_library_item_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['library_item_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_library_item_delete)) { $cms->deleteCmsItem($arr_library_item_delete); } } $output_cms_library_items = $cms->getCmsItems(); if (!empty($output_cms_library_items)) { foreach($output_cms_library_items as $key => $i): $cms_library_ids[] = $i['item_id']; endforeach; } //get file ids -------------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_files']; if (isset($data['file_status'])) { foreach($data['file_status'] as $key => $i): if ($i <= 0) { $arr_file_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['file_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_file_delete)) { $cms->deleteCmsItem($arr_file_delete); } } $output_cms_files = $cms->getCmsItems(); if (!empty($output_cms_files)) { foreach($output_cms_files as $key => $i): $cms_file_ids[] = $i['item_id']; endforeach; } //get poll ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; if (isset($data['poll_status'])) { foreach($data['poll_status'] as $key => $i): if ($i <= 0) { $arr_poll_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['poll_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_poll_delete)) { $cms->deleteCmsItem($arr_poll_delete); } } $output_cms_polls = $cms->getCmsItems(); if (!empty($output_cms_polls)) { foreach($output_cms_polls as $key => $i): $cms_poll_ids[] = $i['item_id']; endforeach; } //get activity ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; if (isset($data['activity_status'])) { foreach($data['activity_status'] as $key => $i): if ($i <= 0) { $arr_activity_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['activity_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_activity_delete)) { $cms->deleteCmsItem($arr_activity_delete); } } $output_cms_activities = $cms->getCmsItems(); if (!empty($output_cms_activities)) { foreach($output_cms_activities as $key => $i): $cms_activity_ids[] = $i['item_id']; endforeach; } //get task ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_task']; if (isset($data['task_status'])) { foreach($data['task_status'] as $key => $i): if ($i <= 0) { $arr_task_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['task_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_task_delete)) { $cms->deleteCmsItem($arr_task_delete); } } $output_cms_tasks = $cms->getCmsItems(); if (!empty($output_cms_tasks)) { foreach($output_cms_tasks as $key => $i): $cms_task_ids[] = $i['item_id']; endforeach; } //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; //setup blog $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $group_id; //library setup $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $group_id; //activity setup $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $group_id; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; // poll setup $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->section_item_id = $group_id; //get items if (!empty($cms_blog_ids)) { $blog->blog_ids = $cms_blog_ids; $output_blogs = $blog->getBlogs(); } //get subjects if (!empty($cms_subject_ids)) { $forum->subject_ids = $cms_subject_ids; $output_subjects = $forum->getSubjects(); } //get library items if (!empty($cms_library_ids)) { $library->module = "group"; $library->library_item_ids = $cms_library_ids; $output_library_items = $library->getLibraryItems(); } //get activities if (!empty($cms_activity_ids)) { $activity->activity_ids = $cms_activity_ids; $output_activities = $activity->getActivities(); } //get files if (!empty($cms_file_ids)) { $file->file_ids = $cms_file_ids; $output_files = $file->getFiles(); } //get polls if (!empty($cms_poll_ids)) { $poll->poll_ids = $cms_poll_ids; $output_polls = $poll->getPolls(); } //get tasks if (!empty($cms_task_ids)) { $activity->task_ids = $cms_task_ids; $output_tasks = $activity->getTasks(); } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); $body->set('cms_blogs', $output_cms_blogs); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); $body->set('cms_subjects', $output_cms_subjects); } if (!empty($output_library_items)) { $body->set('library_items', $output_library_items); $body->set('cms_library_items', $output_cms_library_items); } if (!empty($output_activities)) { $body->set('activities', $output_activities); $body->set('cms_activities', $output_cms_activities); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); $body->set('cms_tasks', $output_cms_tasks); } if (!empty($output_files)) { $body->set('files', $output_files); $body->set('cms_files', $output_cms_files); } if (!empty($output_polls)) { $body->set('polls', $output_polls); $body->set('cms_polls', $output_cms_polls); } if (!empty($display)) { $body->set('display', $display); } if (isset($status_id)) { $body->set('status_id', $status_id); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_files_edit.php 777 0 0 7524 10170663247 15272 0user_id = $me['user_id']; if (isset($_POST['insert_file']) && $_FILES['upload_file']['size'] > 0) { $file_upload = $_FILES['upload_file']; $file_upload['file_title'] = $data['file_title']; $file->arr_file_upload = $file_upload; if ($file->checkFile()) { $file->insertFileRecord(); $file->moveFile(); } if (empty($GLOBALS['am_error_log'])) { return header("Location: g_files_edit.php?group_id=" . $group_id . "&" . SID); exit; } } elseif (isset($_POST['delete_file'])) { $file->file_id = $data['file_id']; $delete_file = $file->getFileRecord(); if (isset($delete_file)) { $file->deleteFile($delete_file['file_name'], $delete_file['file_suffix']); } $file->deleteFileRecord($data['file_id']); if (empty($file->log)) { return header("Location: g_files_edit.php?group_id=" . $group_id . "&" . SID); exit; } } elseif (isset($_POST['update_file'])) { if (isset($_FILES['upload_file']) && $_FILES['upload_file']['size'] > 0) { $file_upload = $_FILES['upload_file']; $file_upload['file_title'] = $data['file_title']; $file_upload['file_suffix'] = $data['file_suffix']; $file_upload['file_name'] = $data['file_name']; $file->file_id = $data['file_id']; $file->arr_file_upload = $file_upload; if ($file->checkFile()) { $file->deleteFile($data['file_name'], $data['file_suffix']); $file->updateFileRecord(); $file->moveFile(); } } else { //just update database with new title $file_upload['file_title'] = $data['file_title']; $file->file_id = $data['file_id']; $file->arr_file_upload = $file_upload; $file->updateFileRecord(); } if (empty($file->log)) { return header("Location: g_files_edit.php?group_id=" . $group_id . "&file_id=" . $data['file_id'] . "&" . SID); exit; } } elseif (isset($_POST['set_default']) && isset($_POST['data']['default_file_id'])) { $file->default_file_id = $_POST['data']['default_file_id']; $file->updateDefaultFile(); $output_group['file_id'] = $data['default_file_id']; } if (isset($file_id)) { $file->file_id = $file_id; $output_file = $file->getFileRecord(); $display = "edit"; } elseif (isset($_REQUEST['add_image'])) { $display = "add"; } $file->thumb = $c_node['file']['image']['thumb'][3]['name']; $file->orderby = "file_title"; $output_files = $file->getFiles(); //storage $output_storage = $file->getAllocation(); //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_files)) { $body->set('files', $output_files); } if (!empty($output_file)) { $body->set('out_file', $output_file); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_storage)) { $body->set('storage', $output_storage); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_forum.php 777 0 0 6235 10170663244 14306 0checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } require_once($c_node['dir']['class_path'] . 'Forum.class.php'); require_once($c_node['dir']['class_path'] . 'Bookmark.class.php'); require_once($c_node['dir']['class_path'] . 'Comment.class.php'); //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup bookmarks (to get subject movements) $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_forum_subject'], $date, $user_id); $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['group_forum_subject'], $date); $comment->section_item_id = $group_id; $comment->user_id = $user_id; //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; $forum->bookmark = $bookmark; $forum->comment = $comment; //ACS check if ($group_acs->checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_hidden'])) { //resourece_id, Priv_id $forum->include_hidden = 1; } if (isset($_POST['search'])) { $search = trim($_POST['search_text']); $output_topics = $forum->getTopics(1, $search); //show subjects, search } else { $output_topics = $forum->getTopics(1, null); //show subjects, search } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_topics)) { $body->set('topics', $output_topics); } if (!empty($output_subject_search_results)) { $body->set('subject_search_results', $output_subject_search_results); } if (!empty($display)) { $body->set('display', $display); } if (!empty($search)) { $body->set('search', $search); } if (!empty($output_group['group_title'])) { $template_pageLink = $lang['txt_forum']; $template_pageLinkNote = $output_group['group_title']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_forum_subject.php 777 0 0 14307 10170663241 16041 0checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } if (isset($_REQUEST['subject_id'])) { $subject_id = $_REQUEST['subject_id']; } else { header("Location: g_forum.php?group_id=" . $_REQUEST['group_id'] . "&" . SID); exit; } require_once($c_node['dir']['class_path'] . 'Forum.class.php'); require_once($c_node['dir']['class_path'] . 'Bookmark.class.php'); require_once($c_node['dir']['class_path'] . 'Comment.class.php'); //append language setup require_once($languageArrayPath . 'arr_user.lang.php'); require_once($languageArrayPath . 'arr_language_name.lang.php'); //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['group_forum_subject'], $date); $comment->section_item_id = $group_id; $comment->user_id = $user_id; $comment->item_id = $subject_id; //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; $forum->subject_id = $subject_id; //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_section"; } elseif (isset($_POST['insert'])) { $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; //update stats $statistic->statistic_type_id = $c_node['statistic']['group']['total_comments']; $statistic->setStatistic($comment->getCommentCount()); $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $group->user_id = $user_id; $statistic->setStatistic($comment->getCommentCount()); //goto the subject return header("Location: g_forum_subject.php?group_id=". $group_id . "&subject_id=". $subject_id . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } elseif (isset($_POST['update_subject'])) { $forum->updateSubject($data); return header("Location: g_forum_subject.php?group_id=". $group_id . "&subject_id=". $subject_id . "&" . SID); exit; } elseif (isset($_POST['delete_subject'])) { $forum->deleteSubject($subject_id); return header("Location: g_forum.php?group_id=". $group_id . "&" . SID); exit; } //get subject $output_subject = $forum->getSubject(); if (isset($output_subject)) { $forum->topic_id = $output_subject['topic_id']; unset($comment->user_id); $output_comments = $comment->getComments($output_subject['subject_id'], 1); $user->user_id = $output_subject['user_id']; $output_subject['author'] = $user->getProfile(); } $output_subjects = $forum->getSubjects(); //ACS check if ($group_acs->checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_hidden'])) { //resourece_id, Priv_id $forum->include_hidden = 1; } $output_topics = $forum->getTopics(); //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_forum_subject'], $date, $user_id); $bookmark->item_id = $subject_id; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_subject['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_subject['bookmark']['recommend'] = 1; } //get subject image if (isset($output_subject['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->file_id = $output_subject['file_id']; $output_subject['image'] = $file->getFileRecord(); } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_subject)) { $body->set('subject', $output_subject); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($display)) { $body->set('display', $display); } if (!empty($output_topics)) { $body->set('topics', $output_topics); } if (isset($output_subject['subject_title'])) { $template_pageLink = $lang['txt_subject']; $template_pageLinkNote = $output_subject['subject_title']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_forum_subject_edit.php 777 0 0 12120 10170663236 17041 0checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id."&".SID); exit; } //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; $forum->user_id = $user_id; //ACS check if ($group_acs->checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_hidden'])) { //resourece_id, Priv_id $forum->include_hidden = 1; } //process requests if (isset($_POST['insert'])) { $forum->insertSubject($data); if (empty($GLOBALS['am_error_log'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; $cms->user_id = $user_id; $temp['language_id'] = $output_group['language_id']; $temp['genre_id'] = $output_group['genre_id']; $temp['item_id'] = $forum->subject_id; //insert node cms entry if (isset($data['cms_node'])) { $temp['level_id'] = $c_node['cms']['cms_level']['node']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //insert group cms entry if (isset($data['cms_group'])) { $temp['level_id'] = $c_node['cms']['cms_level']['group']['home']; if ($group['group_cms_auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); //update stats $statistic->section_item_id = $user_id; $statistic->statistic_type_id = $c_node['statistic']['user']['total_forum_subjects']; $forum->user_id = $user_id; $statistic->setStatistic($forum->getSubjectCount()); $statistic->statistic_type_id = $c_node['statistic']['group']['total_forum_subjects']; unset($forum->user_id); $statistic->section_item_id = $group_id; $statistic->section_id = $c_acs['arr_section']['group']; $statistic->setStatistic($forum->getSubjectCount()); //goto the subject return header("Location: g_forum.php?group_id=". $group_id . "&subject_id=". $forum->subject_id . "&" . SID); exit; } else { $output_subject = $data; } } elseif (isset($_POST['preview'])) { $output_subject = $data; $output_subject['display_subject_body'] = nl2br($output_subject['subject_body']); if (isset($output_subject['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->file_id = $output_subject['file_id']; $output_subject['image'] = $file->getFileRecord(); } $display = "preview"; } elseif (isset($_POST['edit_again'])) { $output_subject = $data; } //get images $output_images = $file->getFiles(); $output_topics = $forum->getTopics(); //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_topics)) { $body->set('topics', $output_topics); } if (!empty($output_subject)) { $body->set('subject', $output_subject); } if (!empty($display)) { $body->set('display', $display); } if (!empty($output_images)) { $body->set('images', $output_images); } $body->set('cms_node_auto_publish', $c_node['cms']['node']['auto_publish']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_forum_topic_edit.php 777 0 0 4577 10170663232 16515 0checkPermission($c_acs['arr_acs']['resource']['group_forum'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $group_id."&".SID); exit; } //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; $forum->user_id = $user_id; //process requests if (isset($_POST['insert_topic'])) { $forum->insertTopic($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: g_forum_topic_edit.php?group_id=". $group_id . "&" . SID); exit; } } elseif (isset($_POST['edit_topic'])) { $forum->updateTopic($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: g_forum_topic_edit.php?group_id=". $group_id . "&" . SID); exit; } } if (isset($_REQUEST['topic_id'])) { $forum->topic_id = $_REQUEST['topic_id']; $output_topic = $forum->getTopic(); } $output_topics = $forum->getTopics(); //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_topics)) { $body->set('topics', $output_topics); } if (!empty($output_topic)) { $body->set('topic', $output_topic); } if (!empty($display)) { $body->set('display', $display); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_group.php 777 0 0 15464 10170737146 14341 0noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('freelink'); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'group/'); $output_group['group_home_synopsis'] = $wiki->transform($output_group['group_home_synopsis'], 'Xhtml'); //get group image if (!empty($output_group['file_id'])) { $file->file_id = $output_group['file_id']; $output_group['image'] = $file->getFileRecord(); } else { $output_group['image']['file_title'] = ""; $output_group['image']['file'] = $file->noimage; } $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //setup statistics $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; $statistic->no_user_id = 1; $output_statistic = $statistic->getStatistics(); //setup cms $group_cms = new Cms($db, $c_acs['arr_section']['group']); $group_cms->section_item_id = $group_id; $group_cms->status_id = $c_node['cms']['status']['live']; $group_cms->level_id = $c_node['cms']['cms_level']['group']['home']; //setup forum -------------------------------------------------------------- $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; $forum->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; //get subjects $group_cms->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; $output_cms_subjects = $group_cms->getCmsItems(); foreach($output_cms_subjects as $key => $i): $forum->subject_ids[] = $i['item_id']; endforeach; if (!empty($forum->subject_ids)) { $output_subjects = $forum->getSubjects(); } //setup blog ---------------------------------------------------------------- $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $group_id; //get blogs $group_cms->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; $output_cms_blogs = $group_cms->getCmsItems(); foreach($output_cms_blogs as $key => $i): $blog->blog_ids[] = $i['item_id']; endforeach; if (!empty($blog->blog_ids)) { $output_blogs = $blog->getBlogs(); } //setup poll ---------------------------------------------------------------- $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->section_type_id = $group_id; //get polls $group_cms->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; $output_cms_polls = $group_cms->getCmsItems(); foreach($output_cms_polls as $key => $i): $poll->poll_ids[] = $i['item_id']; endforeach; if (!empty($poll->poll_ids)) { $output_polls = $poll->getPolls(); } //library setup ----------------------------------------------------------------- $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $group_id; //get library items $group_cms->cms_item_type_id = $c_node['cms']['item_type']['group_library']; $output_library_items = $group_cms->getCmsItems(); foreach($output_library_items as $key => $i): $library->library_item_ids[] = $i['item_id']; endforeach; if (!empty($library->library_item_ids)) { $output_library = $library->getLibraryItems(); } //activity setup ---------------------------------------------------------------- $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $group_id; //get activities $group_cms->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; $output_cms_activities = $group_cms->getCmsItems(); foreach($output_cms_activities as $key => $i): $activity->activity_ids[] = $i['item_id']; endforeach; if (!empty($activity->activity_ids)) { $output_activities = $activity->getActivities(); } //task setup ---------------------------------------------------------------- $activity->task_user_status_ids = $c_node['activity']['task_user_status']; //get tasks $group_cms->cms_item_type_id = $c_node['cms']['item_type']['group_task']; $output_cms_tasks = $group_cms->getCmsItems(); foreach($output_cms_tasks as $key => $i): $activity->task_ids[] = $i['item_id']; endforeach; if (!empty($activity->task_ids)) { $output_tasks = $activity->getTasks(); } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); } if (!empty($output_library)) { $body->set('library', $output_library); } if (!empty($output_activities)) { $body->set('activities', $output_activities); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); } if (!empty($output_statistic)) { $body->set('group_statistic', $output_statistic); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); } if (!empty($output_polls)) { $body->set('polls', $output_polls); } if (!empty($output_group['group_title'])) { $template_pageLink = $lang['txt_group']; $template_pageLinkNote = $output_group['group_title']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_group_create.php 777 0 0 7713 10170663225 15636 0user_id = $me['user_id']; $output_profile = $user->getProfile(); //setup group require_once($c_node['dir']['class_path'] . 'GroupAdmin.class.php'); $group = new GroupAdmin($db, $me); $group->lang = $lang; $group->im = $im; $group->im->user_id = 0; $group->default_acs_ids = $c_acs; $group->default_acs_role_names = $lang['arr_acs']['role']; $group->group_file_allocation = $c_node['file']['default_max_group_space']; $group->acs = $group_acs; $group->status_ids = $c_node['group']['status']; $group->member_status_ids = $c_node['group']['member_status']; $group->setup = $c_node['group_setup']; $group->default_library_title = $lang['txt_default_library_title']; $group->default_library_synopsis = $lang['txt_default_library_synopsis']; $group->default_library_body = $lang['txt_default_library_body']; $group->default_section_title = $lang['txt_default_section_title']; $group->admin_message_text = readTxtFile($languageTextPath . "admin_group_create.txt.php"); $group->node_id = $c_node['node']['node_id']; $group->data = $data; $group->profile_id = $output_profile['profile_id']; $group->createGroup(); $display = "completed"; } else { //formCheck failed $output_group = $data; $display = "group_setup"; } } else { $display = "group_select"; } //move to template if (isset($display)) { $body->set('display', $display); } if (!empty($output_group)) { $body->set('group', $output_group); } $body->set('group_registration_type', $c_node['group']['registration_type']); $body->set('group_setup', $c_node['group_setup']); $body->set('language_id', $me['language_id']); include "inc/footer.inc.php"; // formCheck -------------------------------------------------------------------- // checks the form against given fields // tom calthrop - 9th December 2004 // function formCheck($data) { if (empty($data['group_title'])) { $GLOBALS['am_error_log'][] = array(11, null, null); } if (empty($data['group_synopsis'])) { $GLOBALS['am_error_log'][] = array(30, null, null); } if (empty($GLOBALS['am_error_log'])) { return true; } }//EO formCheck ?> aroundme_0_4_0/www/aroundme_0_4_0/g_group_edit.php 777 0 0 6725 10170663221 15316 0checkPermission($c_acs['arr_acs']['resource']['group_administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } //append language setup require_once($languageArrayPath . 'arr_user.lang.php'); require_once($languageArrayPath . 'arr_group.lang.php'); require_once($languageArrayPath . 'arr_language_name.lang.php'); require_once($languageArrayPath . 'arr_genre.lang.php'); //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'g_library.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'g_library_edit.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'group/'); if (isset($_REQUEST['edit_group'])) { $display = "edit_group"; } elseif (isset($_REQUEST['edit_group_rules'])) { $display = "edit_group_rules"; } elseif (isset($_POST['update_group'])) { $data['group_title'] = htmlspecialchars($data['group_title']); $data['group_synopsis'] = htmlspecialchars($data['group_synopsis']); $group->updateGroup($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: g_group_edit.php?group_id=" . $group_id . "&" . SID); exit; } } elseif (isset($_POST['delete_group'])) { $group->deleteGroup($group_id); } elseif (isset($_POST['update_group_rules'])) { $data['group_rules'] = htmlspecialchars($data['group_rules']); $group->updateGroupRules($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: g_group_edit.php?group_id=" . $group_id . "&" . SID); exit; } } else { //display group $output_group['display_group_home_synopsis'] = $wiki->transform($output_group['group_home_synopsis'], 'Xhtml'); } $output_user = $user->getUser($me['user_id']); //move to template if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_group)) { $body->set('group', $output_group); } if (isset($display)) { $body->set('display', $display); } $body->set('status_ids', $c_node['group']['status']); $body->set('datedropdown', $date->dateDropdown($output_group['group_election_date'], null,null, 10, 20)); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_groups.php 777 0 0 4462 10170663215 14473 0group_visibility = 1; $group->file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $group->file->thumb = $c_node['file']['image']['thumb'][2]['name']; if (isset($_POST['search'])) { $search = trim($_POST['search_text']); if (isset($_POST['search_genre_id'])) { $group->genre_id = $_POST['search_genre_id']; } $output_search_results = $group->getGroups($search); $display = "search"; } elseif (isset($_REQUEST['my_groups'])) { $output_my_groups = $group->getMyGroups(); $display = "mygroups"; } else { $group->limit = 25; $lastest_groups = $group->getGroups(); } //move to template if (!empty($lastest_groups)) { $body->set('latest_groups', $lastest_groups); } if (!empty($output_my_groups)) { $body->set('my_groups', $output_my_groups); } if (!empty($output_search_results)) { $body->set('search_results', $output_search_results); } if (isset($display)) { $body->set('display', $display); } if (!empty($search)) { $body->set('search', $search); } if (isset($search_genre_id)) { $body->set('search_genre_id', $search_genre_id); } $template_pageLink = "groups"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_library.php 777 0 0 20151 10170663212 14626 0checkPermission($c_acs['arr_acs']['resource']['group_library'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } require_once($c_node['dir']['class_path'] . 'Library.class.php'); require_once($c_node['dir']['class_path'] . 'Wiki/Wiki.php'); require_once($c_node['dir']['class_path'] . 'Bookmark.class.php'); require_once($c_node['dir']['class_path'] . 'Comment.class.php'); //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); if (isset($_REQUEST['page'])) { $page = $_REQUEST['page']; } if (isset($_REQUEST['library_id'])) { $library_id = $_REQUEST['library_id']; } if (isset($_REQUEST['history_library_id'])) { $history_library_id = $_REQUEST['history_library_id']; } //library setup $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $group_id; //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'g_library.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'g_library_edit.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'group/'); //ACS check - can we edit the library - if we are not a member we turn off the ability to make new links if (!$group_acs->checkPermission($c_acs['arr_acs']['resource']['group_library'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', ''); // turn off the ability to link pages $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', '#'); // turn off the ability to create new pages } // set an array of pages that exist in the library $pages = $library->getPages(); $wiki->setRenderConf('xhtml', 'wikilink', 'pages', $pages); //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['group_library'], $date); $comment->section_item_id = $group_id; $comment->user_id = $user_id; //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_section"; } elseif (isset($_POST['insert'])) { $comment->item_id = $library_id; $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; //update stats $statistic->statistic_type_id = $c_node['statistic']['group']['total_comments']; $statistic->setStatistic($comment->getCommentCount()); $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $group->user_id = $user_id; $statistic->setStatistic($comment->getCommentCount()); //goto the subject return header("Location: g_library.php?group_id=". $group_id . "&library_id=". $library_id . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } if (isset($_POST['search'])) { $search = trim($_POST['search_text']); $output_library_search_results = $library->searchLibrary($search); $display = "search"; } elseif (isset($_REQUEST['contents'])) { $output_contents = $library->getContents(); $display = "contents"; } elseif (isset($history_library_id)) { $output_history = $library->getHistory($history_library_id); $display = "history"; } elseif (isset($library_id)) { $output_library = $library->getPageID($library_id); //find out if this is the newest article $newest_doc = $library->getPageName($output_library['library_page_name']); if ($output_library['library_id'] == $newest_doc['library_id']) { $newest = true; } } elseif (isset($page)) { $output_library = $library->getPageName($page); $newest = true; } else { $output_library = $library->getPageDefault(); $newest = true; } if (isset($output_library['library_id'])) { $library_id = $output_library['library_id']; $library->user_id = $me['user_id']; $library->library_page_name = $output_library['library_page_name']; //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_library'], $date, $user_id); $bookmark->item_id = $library_id; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_library['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_library['bookmark']['recommend'] = 1; } if (isset($output_library['user_id'])) { $user->user_id = $output_library['user_id']; $output_author = $user->getProfile(); $output_author['profile_create_datetime'] = $date->formatDate($output_author['profile_create_datetime']); } //Parser library $output_library['library_body'] = $wiki->transform($output_library['library_body'], 'Xhtml'); $comment->item_id = $library_id; $output_comments = $comment->getComments($library_id, 1); } //get library image if (isset($output_library['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->file_id = $output_library['file_id']; $output_library['image'] = $file->getFileRecord(); } //move to template if (!empty($output_contents)) { $body->set('contents', $output_contents); } if (!empty($output_history)) { $body->set('history', $output_history); } if (!empty($newest)) { $body->set('newest', $newest); } if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($output_library)) { $body->set('library', $output_library); $template_pageLink = $lang['txt_library']; $template_pageLinkNote = $output_library['library_title']; } elseif (empty($display)) { // we will display a button to allow the user to create a first library item $body->set('library_first_page', $lang['txt_wiki_default']); } if (!empty($output_author)) { $body->set('author', $output_author); } if (!empty($output_library_search_results)) { $body->set('library_search_results', $output_library_search_results); } if (!empty($display)) { $body->set('display', $display); } if (!empty($search)) { $body->set('search', $search); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_library_edit.php 777 0 0 15524 10170663207 15647 0checkPermission($c_acs['arr_acs']['resource']['group_library'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_library.php?group_id=" . $output_group['group_id']."&".SID); exit; } if (isset($_REQUEST['library_id'])) { $library_id = $_REQUEST['library_id']; } elseif (isset($_REQUEST['page'])) { $page = $_REQUEST['page']; } else { header("Location: g_library.php?group_id=" . $group_id . "&" . SID); exit; } require_once($c_node['dir']['class_path'] . 'Library.class.php'); require_once($c_node['dir']['class_path'] . 'Wiki/Wiki.php'); //append language setup require_once($languageArrayPath . 'arr_group.lang.php'); //setup Library $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $group_id; $library->user_id = $user_id; //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'g_library.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'g_library_edit.php?group_id=' . $group_id . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'group/'); // set an array of pages that exist in the library $pages = $library->getPages(); $wiki->setRenderConf('xhtml', 'wikilink', 'pages', $pages); //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif $output_images = $file->getFiles(); if (isset($data)) {//post data received $data['library_body'] = stripslashes($data['library_body']); $data['library_body_display'] = $wiki->transform($data['library_body'], 'Xhtml'); $data['library_synopsis'] = stripslashes(htmlspecialchars($data['library_synopsis'])); $data['library_title'] = stripslashes(htmlspecialchars($data['library_title'])); $data['library_page_name'] = $page; if (isset($_POST['preview_library'])) { $data['library_body'] = htmlspecialchars($data['library_body']); $output_library = $data; $display = "preview_library"; } elseif (isset($_POST['edit_library_again'])) { $output_library = $data; $display = "add_library"; } elseif (isset($_POST['insert_library'])) { $insert = $library->insertLibrary($data); if (empty($GLOBALS['am_error_log'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->cms_item_type_id = $c_node['cms']['item_type']['group_library']; $cms->user_id = $user_id; $temp['language_id'] = $output_group['language_id']; $temp['genre_id'] = $output_group['genre_id']; $temp['item_id'] = $library->library_id; //insert node cms entry if (isset($data['cms_node'])) { $temp['level_id'] = $c_node['cms']['cms_level']['node']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //insert group cms entry if (isset($data['cms_group'])) { $temp['level_id'] = $c_node['cms']['cms_level']['group']['home']; if ($group['group_cms_auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); //update stats $statistic->section_item_id = $user_id; $statistic->statistic_type_id = $c_node['statistic']['group']['total_library_items']; $library->user_id = $user_id; $statistic->setStatistic($library->getLibraryItemCount()); header("Location: g_library.php?group_id=" . $group_id . "&page=" . $page . "&" . SID); exit; } else { $output_library = $data; $display = "add_library"; } } } elseif (isset($library_id)) {//if we have a library id we retrieve it $output_library = $library->getPageID($library_id); $display = "add_library"; } elseif (isset($page)) {//else we assign the new page name $output_library = $library->getPageName($page); if (empty($output_library)) { //is a new page $output_library['library_page_name'] = $page; } $display = "add_library"; } //handle new libraries - we've deleted all library items and now adding new one if (isset($output_library['library_page_name']) && !isset($output_library['library_id']) && ($output_library['library_page_name'] == $lang['txt_wiki_default'])) { $output_library['library_default'] = 1; } if (isset($output_library['user_id'])) { $user->user_id = $output_library['user_id']; $output_author = $user->getProfile(); $output_author['profile_create_datetime'] = $date->formatDate($output_author['profile_create_datetime']); } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_library)) { $body->set('library', $output_library); } if (!empty($display)) { $body->set('display', $display); } if (!empty($output_images)) { $body->set('images', $output_images); $body->set('image_thumbs', $c_node['file']['image']['thumb']); } if (!empty($output_author)) { $body->set('author', $output_author); } if (!empty($pages)) { $body->set('pages', $pages); } $body->set('cms_node_auto_publish', $c_node['cms']['node']['auto_publish']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_member_profile.php 777 0 0 15170 10170721451 16156 0user_id = $user_id; //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('freelink'); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); //ACS check - can we edit this user? if ($group_acs->checkPermission($c_acs['arr_acs']['resource']['group_membership'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id //get group roles $group_acs->group_id = $group_id; $group_roles = $group_acs->getGroupRoles(); } if (isset($_POST['update_membership'])) { $group->updateMembership($data); if (empty($GLOBALS['am_error_log'])) { header("Location: g_member_profile.php?group_id=" . $group_id . "&user_id=" . $user_id . "&" . SID); exit; } } //group member details $output_member = $group->getGroupMembership(); if (empty($output_member['user_id'])) { header("Location: g_group.php?group_id=" . $group_id . "&" . SID); exit; } if (isset($_POST['delete_membership_confirm'])) { $group->deleteMembership(); header("Location: g_groups.php?my_groups=1&".SID); exit; } elseif (isset($output_member['user_id'])) { if (isset($_POST['delete_membership'])) { $display_confirmation_delete = 1; } //get user and profile from membership $user->user_id = $output_member['user_id']; $user->profile_id = $output_member['profile_id']; $output_user = $user->getUser(); $output_profile = $user->getProfile(); //setup blog $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $group_id; $blog->user_id = $output_member['user_id']; $blog->limit = 5; $output_blogs = $blog->getBlogs(); //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->section_item_id = $group_id; $forum->limit = 5; $forum->user_id = $output_member['user_id']; $output_subjects = $forum->getSubjects(); //$output_replies = $forum->getRepliesByUser(); //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['group_forum_subject'], $date); $comment->section_item_id = $group_id; $comment->user_id = $output_member['user_id']; $output_comments = $comment->getComments(null, 1); //library setup $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $group_id; $library->user_id = $output_member['user_id']; $output_library = $library->getLibraryItems(); //setup statistics $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; $statistic->user_id = $output_member['user_id']; $output_statistics = $statistic->getStatistics(); //setup file $file->path="user"; $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; if (isset($output_profile['file_id'])) { $file->file_id = $output_profile['file_id']; $output_profile['image'] = $file->getFileRecord(); } elseif (isset($output_profile)) { $output_profile['image']['file_title'] = ""; $output_profile['image']['file'] = $file->noimage; } $output_profile['profile_summary'] = $wiki->transform($output_profile['profile_summary'], 'Xhtml'); //get profiles unset($user->file); $output_profiles = $user->getProfiles(); //display if this person is blocked require_once($c_node['dir']['class_path'] . 'SocialNetwork.class.php'); $sn = new Socialnetwork($me['user_id'], $db, $c_node['node']['node_id']); if ($sn->getBlockStatus($user_id)) { $display = "blocked"; } } //move to template if (!empty($display_confirmation_delete)) { $body->set('display_confirmation_delete', $display_confirmation_delete); } if (!empty($output_profiles)) { $body->set('profiles', $output_profiles); } if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_member)) { $body->set('member', $output_member); } if (!empty($output_library)) { $body->set('library', $output_library); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_statistics)) { $body->set('gm_statistics', $output_statistics); } if (isset($output_statistic)) { $body->set('group_statistic', $output_statistic); } if (!empty($group_roles)) { $body->set('group_roles', $group_roles); } $body->set('group_member_status_ids', $c_node['group']['member_status']); if (!empty($display)) { $body->set('display', $display); } if (!empty($output_member['profile_nic'])) { $template_pageLink = $lang['txt_member_profile']; $template_pageLinkNote = $output_member['profile_nic']; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_membership.php 777 0 0 10100 10170721372 15310 0checkPermission($c_acs['arr_acs']['resource']['group_membership'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } if (isset($_REQUEST['role_id']) && $_REQUEST['role_id'] > 0) { $role_id = $_REQUEST['role_id']; $group->role_id = $role_id; } //append language setup require_once($languageArrayPath . 'arr_user.lang.php'); require_once($languageArrayPath . 'arr_group.lang.php'); //we add the new members if (isset($_POST['invite_friends']) && isset($data)) { $ins_arr = $data['group_invite']; $group->node_id = $c_node['node']['node_id']; unset($group_acs->role_id); $role_default = $group_acs->getGroupRole(1); $group->member_status_id = $c_node['group']['member_status']['pending']; $rownums = count($ins_arr); for ($i=0; $i < $rownums; $i++) { $group->user_id = $ins_arr[$i]; //get their profile $group->insertMembership($data['group_invite_profile'][$i], $role_default['role_id']); } if (empty($GLOBALS['am_error_log'])) { header("Location: g_membership.php?group_id=" . $group_id . "&" . SID); exit; } } if (isset($_REQUEST['invite_members'])) { //get member ids $output_members = $group->getMembers(); if (!empty($output_members)) { foreach($output_members as $key => $i): $member_ids[] = $i['user_id']; endforeach; } //setup social network require_once($c_node['dir']['class_path'] . 'Socialnetwork.class.php'); $sn = new Socialnetwork($user_id, $db, $c_node['node']['node_id']); $sn->relation_type_ids = $c_node['user']['relation_type']; $sn->status_ids = $c_node['user']['status']; $sn->date = $date; $sn->user = $user; //get social network without member id's $friends = $sn->getFriends($me['user_id']); //remove member from friends if (!empty($friends)) { foreach($friends as $key => $f): foreach($member_ids as $key1 => $m): if ($f == $m) { unset($friends[$key]); } endforeach; endforeach; } $user->user_ids = $friends; $non_member_friends = $user->getProfiles(); $display = "invite_members"; } else { $output_members = $group->getMembers(); if (isset($output_members)) { //get the status of each member foreach($output_members as $key => $i): $output_members[$key]['online_status'] = $user->getStatus($i['active_time']); endforeach; } } //get count of each memberships role $group_roles = $group_acs->getGroupRoles(); //move to template if (!empty($group_roles)) { $body->set('group_roles', $group_roles); } if (!empty($output_group)) { $body->set('group', $output_group); } if (!empty($output_members)) { $body->set('members', $output_members); } if (!empty($non_member_friends)) { $body->set('non_member_friends', $non_member_friends); } if (isset($display)) { $body->set('display', $display); } if (isset($role_id)) { $body->set('search_role_id', $role_id); } $template_pageLink = $lang['txt_membership']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_poll.php 777 0 0 14450 10170663175 14145 0checkPermission($c_acs['arr_acs']['resource']['group_poll'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } if (isset($_REQUEST['poll_id'])) { $poll_id = $_REQUEST['poll_id']; } require_once($c_node['dir']['class_path'] . 'Poll.class.php'); require_once($c_node['dir']['class_path'] . 'Comment.class.php'); require_once($c_node['dir']['class_path'] . 'Bookmark.class.php'); //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->section_item_id = $group_id; //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['group_poll'], $date); $comment->section_item_id = $group_id; $comment->user_id = $user_id; //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_comment"; } elseif (isset($_POST['insert'])) { $comment->item_id = $poll_id; $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); $statistic->section_item_id = $group_id; //update stats $statistic->statistic_type_id = $c_node['statistic']['group']['total_comments']; $statistic->setStatistic($comment->getCommentCount()); $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $group->user_id = $user_id; $statistic->setStatistic($comment->getCommentCount()); //goto the subject return header("Location: g_poll.php?group_id=". $group_id . "&poll_id=". $poll_id . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } if (isset($poll_id)) { $poll->poll_id = $poll_id; $output_poll = $poll->getPoll(); $output_poll['current_answer']= $poll->pollUserCurrentVote($me['user_id']); if (isset($output_poll)) { $output_poll_history = $poll->pollUserVoteHistory($me['user_id']); } //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['group_poll'], $date, $user_id); $bookmark->item_id = $poll_id; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_poll['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_poll['bookmark']['recommend'] = 1; } if (isset($output_library['user_id'])) { $output_author = $user->getUser($output_library['user_id']); $output_author['user_create_datetime'] = $date->formatDate($output_author['user_create_datetime']); } $comment->item_id = $poll_id; $output_comments = $comment->getComments($poll_id, 1); //get users vote for each comment if (isset($output_comments)) { foreach($output_comments as $key => $i): $output_comments[$key]['vote'] = $poll->pollUserVoteHistory($i['user_id']); endforeach; } } else { //list polls $poll->before_start_timestamp = mktime(); $poll->after_end_timestamp = mktime(); $output_polls = $poll->getPolls(); unset($poll->before_start_timestamp, $poll->after_end_timestamp); $poll->before_end_timestamp = mktime(); $output_archive_polls = $poll->getPolls(); //ACS check if ($group_acs->checkPermission($c_acs['arr_acs']['resource']['group_poll'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id unset($poll->before_end_timestamp); $poll->after_start_timestamp = mktime(); $output_forthcoming_polls = $poll->getPolls(); } $display = "view_polls"; } //move to template if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($output_group)) { $body->set('group', $output_group); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_polls)) { $body->set('polls', $output_polls); } if (!empty($output_archive_polls)) { $body->set('archive_polls', $output_archive_polls); } if (!empty($output_forthcoming_polls)) { $body->set('forthcoming_polls', $output_forthcoming_polls); } if (!empty($output_poll)) { $datetime = date("Y-m-d H:i:s"); if ($output_poll['poll_start_datetime'] > $datetime) { $output_poll['allow_edit'] = 1; } $body->set('poll', $output_poll); } if (!empty($output_poll_history)) { $body->set('poll_history', $output_poll_history); } if (!empty($output_poll_usage)) { $body->set('poll_usage', $output_poll_usage); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_poll_edit.php 777 0 0 15020 10170663172 15141 0checkPermission($c_acs['arr_acs']['resource']['group_poll'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id header("Location: g_group.php?group_id=" . $output_group['group_id']."&".SID); exit; } require_once($c_node['dir']['class_path'] . 'Poll.class.php'); $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->section_item_id = $group_id; $poll->user_id = $user_id; if (isset($_REQUEST['poll_id'])) { $poll_id = $_REQUEST['poll_id']; $poll->poll_id = $poll_id; } if (isset($_POST['insert_poll'])) { $poll->insertPoll($data); if (empty($GLOBALS['am_error_log'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->section_item_id = $group_id; $cms->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; $cms->user_id = $user_id; $temp['language_id'] = $output_group['language_id']; $temp['genre_id'] = $output_group['genre_id']; $temp['item_id'] = $poll->poll_id; //insert node cms entry if (isset($data['cms_node'])) { $temp['level_id'] = $c_node['cms']['cms_level']['group']['home']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //insert group cms entry if (isset($data['cms_group'])) { $temp['level_id'] = $c_node['cms']['cms_level']['node']; if ($group['group_cms_auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['group'], $date); //update stats - total group polls $statistic->section_item_id = $group_id; $statistic->statistic_type_id = $c_node['statistic']['group']['total_polls']; $statistic->setStatistic($poll->getPollCount()); //update stats - total group member polls $statistic->section_item_id = $group_id; $statistic->statistic_type_id = $c_node['statistic']['group_member']['total_polls']; $poll->user_id = $me['user_id']; $statistic->user_id = $me['user_id']; $statistic->setStatistic($poll->getPollCount()); return header("Location: g_poll_edit.php?group_id=". $group_id . "&poll_id=" . $poll->poll_id . "&" . SID); exit; } else { $output_poll = $data; $display = "add_poll"; } } elseif (isset($_POST['update_poll'])) { $poll->updatePoll($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: g_poll.php?group_id=". $group_id . "&poll_id=" . $poll_id . "&view_poll=1&" . SID); exit; } else { $output_poll = $data; $display = "edit_poll"; } } elseif (isset($_POST['delete_poll'])) { $poll->deletePoll(); return header("Location: g_poll.php?group_id=". $group_id . "&" . SID); exit; } elseif (isset($_POST['insert_poll_option'])) { $poll->insertOption($data['option_body']); return header("Location: g_poll_edit.php?group_id=". $group_id . "&poll_id=" . $poll_id . "&view_poll=1&" . SID); exit; } elseif (isset($_POST['update_poll_option'])) { $poll->updateOption($data['option_id'], $data['option_body']); return header("Location: g_poll_edit.php?group_id=". $group_id . "&poll_id=" . $poll_id . "&view_poll=1&" . SID); exit; } elseif (isset($_POST['delete_poll_option'])) { $poll->deleteOption($data['option_id']); return header("Location: g_poll_edit.php?group_id=". $group_id . "&poll_id=" . $poll_id . "&view_poll=1&" . SID); exit; } elseif (isset($poll_id)) { $output_poll = $poll->getPoll(); $display = "edit_poll"; } else { $display = "add_poll"; } if (isset($poll_id)) { //You can delete before any comments are added or votes are given $output_poll_usage = $poll->getUserPollParticipation(); if (isset($_REQUEST['option_id'])) { //we edit an option $output_option = $_REQUEST['option_id']; } if (isset($output_poll)) { $output_poll_history = $poll->pollUserVoteHistory($me['user_id']); } } //move to template if (!empty($output_group)) { $body->set('group', $output_group); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_polls)) { $body->set('polls', $output_polls); } if (!empty($output_poll)) { $body->set('poll', $output_poll); } if (!empty($output_poll_usage)) { $body->set('poll_usage', $output_poll_usage); } if (!empty($output_option)) { $body->set('option', $output_option); } if (!empty($output_poll_history)) { $body->set('poll_history', $output_poll_history); } if (!empty($output_poll['poll_start_datetime'])) { $body->set('start_datedropdown', $date->dateDropdown($output_poll['poll_start_datetime'], 1, 'start')); } else { $tomorrow = date("Y-m-d 00:00:00", mktime()+(24*60*60)); $body->set('start_datedropdown', $date->dateDropdown($tomorrow, 1, 'start', 0, 5)); } if (!empty($output_poll['poll_end_datetime'])) { $body->set('end_datedropdown', $date->dateDropdown($output_poll['poll_end_datetime'], 1, 'end', 0, 5)); } else { $tomorrow_plus_seven = date("Y-m-d 00:00:00", mktime()+(24*7*60*60)); $body->set('end_datedropdown', $date->dateDropdown($tomorrow_plus_seven, 1, 'end', 0, 5)); } $body->set('cms_node_auto_publish', $c_node['cms']['node']['auto_publish']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_schedule.php 777 0 0 6137 10170663166 14756 0section_item_id = $group_id; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; $output_activities = $activity->getActivities(); $output_tasks = $activity->getTasks(); //setup calendar if(!isset($_REQUEST["time"])) { $time = mktime(); } else { $time = $_REQUEST["time"]; } $now = getdate($time); $sched = new Schedule($db, $now, $me['user_id']); //get date $sched->setScheduleBase(); if (!empty($output_activities)) { foreach($output_activities as $index => $activity_tmp): if(isset($activity_tmp)) { $activities[] = $sched->modifyActivityDate($activity_tmp); } endforeach; } $schedule = $sched->getSchedule(); // Get the schedule array $todo = $sched->getToDo(); // Get the todo array // Get last and next months timestamp $links["last"] = $date->getDayTime($time, -1); $links["next"] = $date->getDayTime($time, 1); // Get the calendar view month name $today = $date->getDayString($time); $name["last"] = $date->getDayString($time, -1); $name["next"] = $date->getDayString($time, 1); // Get the maximum number of activities at one hour $nr = floor($sched->getMax()); //move to template if (!empty($time)) { $body->set('time', $time); } if (!empty($schedule)) { $body->set('calendar', $schedule); } if (!empty($todo)) { $body->set('todo', $todo); } if (!empty($today)) { $body->set('today', $today); } if (!empty($links)) { $body->set('links', $links); } if (!empty($nr)) { $body->set('nr', $nr); } if (!empty($name)) { $body->set('name', $name); } if (!empty($output_group)) { $body->set('group', $output_group); } $template_pageLink = "activities"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/g_structure.php 777 0 0 3622 10170663163 15213 0group_id = $group_id; $group_roles = $group_acs->getGroupRoles(); $group->member_status_id = $c_node['group']['member_status']['active']; if (isset($group_roles)) { foreach($group_roles as $key => $i): $group->role_id = $i['role_id']; $group_roles[$key]['total_members'] = $group->getCountMembers(); endforeach; } $lang['txt_node_rules'] = nl2br($lang['txt_node_rules']); //move to template if (!empty($group_roles)) { $body->set('group_roles', $group_roles); } if (!empty($output_group)) { $body->set('group', $output_group); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/get_file.php 777 0 0 3011 10170723437 14414 0 aroundme_0_4_0/www/aroundme_0_4_0/inc/ 777 0 0 0 10162630010 12601 5aroundme_0_4_0/www/aroundme_0_4_0/inc/footer.inc.php 777 0 0 10040 10170700540 15463 0 6) { array_splice($breadcrumb, 0, 1); } $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; if (!isset($template_pageLinkNote)) { $template_pageLinkNote = ""; } if (isset($breadcrumb)) { $prev_breadcrumb = count($breadcrumb); if ($prev_breadcrumb < 1) { $prev_breadcrumb = 1; } $prev_breadcrumb = $prev_breadcrumb-1; if (isset($breadcrumb[$prev_breadcrumb]['url'])){ $prev_url = $breadcrumb[$prev_breadcrumb]['url']; } else { $prev_url = ""; } $page_name_prev = explode(".",basename($prev_url)); if ($page_name_prev[0] != $page_name[0]) { array_push($breadcrumb, array('breadcrumb_url'=> $url, 'breadcrumb_title'=>$template_pageLink, 'breadcrumb_note'=>$template_pageLinkNote)); $_SESSION['s_breadcrumb'] = $breadcrumb; } } } // TEMPLATE OUTPUT ----------------------------------------------------------------------- // error reporting if (!empty($GLOBALS['am_error_log'])) { if (isset($c_node['node']['debug_mode'])) { $tpl->set('error_handling', $c_node['node']['debug_mode']); } $tpl->set('log', $GLOBALS['am_error_log']); } // language $tpl->set('lang', $lang); $body->set('lang', $lang); // acs and user $tpl->set('resource_ids', $c_acs['arr_acs']['resource']); $body->set('resource_ids', $c_acs['arr_acs']['resource']); $tpl->set('privilege_ids', $c_acs['arr_acs']['privilege']); $body->set('privilege_ids', $c_acs['arr_acs']['privilege']); $tpl->user_acs = $user_acs; $body->user_acs = $user_acs; if (isset($group_acs)) { $body->group_acs = $group_acs; $tpl->group_acs = $group_acs; } $tpl->set('me', $me); $body->set('me', $me); // date $tpl->set('today', $date->getToday()); // general interface, url and template $tpl->set('templatePath', $template_path); $body->set('templatePath', $template_path); $body->set('page_url', $_SERVER['REQUEST_URI']); $body->set('page_name', basename($_SERVER['REQUEST_URI'])); $tpl->set('breadcrumb', $_SESSION['s_breadcrumb']); $body->set('page_name_short', $page_name[0]); $tpl->set('page_name_short', $page_name[0]); if (!empty($shoutbox)) { $tpl->set('shoutbox', $shoutbox); } if (isset($template_pagetitle)) { $tpl->set('pageTitle', $template_pagetitle); } if (isset($menu_section)) { $tpl->set('section', $menu_section); } // PROCESS TEMPLATE ----------------------------------------------------------------------- $template_file = $page_name[0] . ".tpl.php"; if (isset($_REQUEST['abuse_report'])) { //if page is reported as abuse we redirect $_SESSION['report_abuse_url'] = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $_SESSION['report_abuse_body'] = $body->fetch($template_file); header("Location: report_abuse.php?" . SID); exit; } else { $tpl->set('content', $body->fetch($template_file)); echo $tpl->fetch('default.tpl.php'); } // TIDY UP ----------------------------------------------------------------------- $db->Close(); ?> aroundme_0_4_0/www/aroundme_0_4_0/inc/functions.inc.php 777 0 0 10572 10170664040 16213 0"; } elseif ($arr_file['file_suffix'] == "pdf") { echo ""; } elseif ($arr_file['file_suffix'] == "txt") { echo ""; } elseif ($arr_file['file_suffix'] == "swf" && isset($style) && $style == "thumb") { echo ""; } elseif ($arr_file['file_suffix'] == "swf" && empty($style)) { $swf = $c_node['dir']['asset_path'] . $arr_file['file']; print <<< eof eof; } } /* * Trim * tom calthrop * 10th Jan 2004 */ function dots($num, $string) { if (strlen($string) > $num) { $string = substr_replace($string, '...', $num); } return $string; } /* * Read file from hard disk and return * tom calthrop * 22nd April 2004 */ function readTxtFile($source) { $handle = fopen($source, "rb"); $output = ""; do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } $output .= $data; } while (true); fclose($handle); $output = addslashes($output); //$output = str_replace("\\\"", "\"", $output); //$output = str_replace("'", "´", $output); return $output; } /* * searchTextFormat * takes a search string, highlights it in the supplied txt * and strips unwanted data * * tom calthrop * 10th April 2004 */ function searchTextFormat($search, $txt) { //remove all html $pattern = array ("']*?>.*?'si", // Strip out javascript "'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags "'([\r\n])[\s]+'", // Strip out white space "'&(quot|#34);'i" // Replace HTML entities ); $replace = array ("", "", "\\1", "\"" ); $txt = preg_replace($pattern, $replace, $txt); //show 20 chars before first highlighted word $search_start_pos = (strlen($txt) - strlen(stristr($txt,$search))-20); if ($search_start_pos > 20) { $txt = substr($txt,$search_start_pos); $txt = "..." . $txt; } //reduce string length to 150 char if (strlen($txt) > 150) { $txt = substr($txt,0, 160); $txt = $txt . "..."; } //make the search word red $txt = preg_replace("/($search)/i","\\0",$txt); return $txt; } /* * compare * general function for usort (used in SocialNetwork.class.php * 8th January 2005 */ function compare($a, $b) { if($a["degree"]==$b["degree"]) return 0; elseif($a["degree"]<$b["degree"]) return -1; else return 1; } ?> aroundme_0_4_0/www/aroundme_0_4_0/inc/header.inc.php 777 0 0 12731 10170714741 15436 0Connect($c_node['db']['host'], $c_node['db']['user'] , $c_node['db']['pass'] , $c_node['db']['db']); $db->prefix = $c_node['db']['prefix']; //SETUP DATE ----------------------------------------------------------------------- require_once($c_node['dir']['class_path'] . 'Date.class.php'); $date = new Date(); // SETUP USER ----------------------------------------------------------------------- require_once($c_node['dir']['class_path'] . 'User.class.php'); $user = new User($db, $date); $user->relation_type = $c_node['user']['relation_type']['approved']; //not sure we need this - tom 7th dec 2004 $user->status_ids = $c_node['user']['status']; $user->authUser(); $me = array( 'user_id'=> $_SESSION['s_user_id'], 'role_id'=> $_SESSION['s_role_id'], 'firstname'=> $_SESSION['s_firstname'], 'surname'=> $_SESSION['s_surname'], 'language_id'=> $_SESSION['s_language_id'], 'language_ids'=> $_SESSION['s_language_ids'], 'template_id'=> $_SESSION['s_user_template'], 'homepage'=> $_SESSION['s_homepage'] ); // SETUP UP USER ACS require_once($c_node['dir']['class_path'] . 'Acs.class.php'); $user_acs = new Acs($me['role_id'], $db, $c_acs['arr_section']['user']); //1 = section=1 = user //SETUP USER MESSAGES require_once($c_node['dir']['class_path'] . 'IM.class.php'); $im = new IM($me['user_id'], $db, $c_node['messaging']['message_box_max_size']); // Setting the message status coding $im->setStatus($c_node['messaging']['message_status_unread'], $c_node['messaging']['message_status_read']); $im->setBoxes($c_node['messaging']['message_in_box'], $c_node['messaging']['message_save_box'], $c_node['messaging']['message_out_box']); //get inbox unread message count $me['mail'] = $im->messageCount(); //SETUP SHOUT ----------------------------------------------------------------------- require_once($c_node['dir']['class_path'] . 'Shout.class.php'); $shout = new Shout($db, $date); $shoutbox = $shout->getShout(); print_r($shoutbox); //SETUP FILE ----------------------------------------------------------------------- require_once($c_node['dir']['class_path'] . 'File.class.php'); $file = new File($db, $c_acs['arr_section']['user'], $c_node['file'], $c_node['dir']); $file->path = "user"; // SETUP TEMPLATE ------------------------------------------------------------------- $template_path = $c_node['dir']['template_path']; if (isset($me['template_id'])) { $template_name = $me['template_id']; } else { $template_name = $c_node['node']['template_default_name']; } $template_path = $template_path . $template_name . "/"; require_once($c_node['dir']['class_path'] . 'Template.class.php'); $tpl = & new Template($template_path); // This is the outter template $body = & new Template($template_path); // This is the inner template $page_name_full = basename($_SERVER['REQUEST_URI']); $page_name = explode(".",$page_name_full); // SETUP LANGUAGE ----------------------------------------------------------------------- $languagePath = "language/" . $me['language_id'] . "/" . $template_name . "/"; $languageArrayPath = $languagePath . "arrays/"; $languageTextPath = $languagePath . "texts/"; require_once($languagePath . 'outer.lang.php'); require_once($languageArrayPath . 'arr_links.lang.php'); require_once($languageArrayPath . 'arr_error.lang.php'); require_once($languagePath . $page_name[0] .'.lang.php'); // ACS CHECKS ----------------------------------------------------------------------- if (!$user_acs->checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id $tpl->set('show_node_admin_link', 1); } // RETREIVE FOR VARS ----------------------------------------------------------------------- if (isset($_POST['data'])) { $data = $_POST['data']; } ?> aroundme_0_4_0/www/aroundme_0_4_0/inc/header_activity.inc.php 777 0 0 4275 10170664032 17333 0activity_task_type = $c_node['activity']['task_user_status']; $activity->user_id = $user_id; if (isset($_REQUEST['activity_id'])) { $activity_id = $_REQUEST['activity_id']; $activity->activity_id = $activity_id; } if (isset($_REQUEST['group_id']) && $_REQUEST['group_id'] > 0) { $group_id = $_REQUEST['group_id']; } if (isset($_REQUEST['task_id'])) { $task_id = $_REQUEST['task_id']; $activity->task_id = $task_id; } //setup file require_once($c_node['dir']['class_path'] . 'File.class.php'); $file = new File($db, $c_acs['arr_section']['group'], $c_node['file'], $c_node['dir']); ?> aroundme_0_4_0/www/aroundme_0_4_0/inc/header_group.inc.php 777 0 0 5747 10170664030 16636 0path = "group"; //get group details require_once($c_node['dir']['class_path'] . 'Group.class.php'); $group = new Group($db, $date, $file); $group->user_id = $me['user_id']; $group->registration_types = $c_node['group']['registration_type']; if (isset($group_id)) { $file->section_item_id = $group_id; $group->group_id = $group_id; $output_group = $group->getGroup(); if (empty($output_group['group_id'])) { header("Location: g_groups.php?" . SID); exit; } //is the group status active if ($page_name[0] != "g_apply" && ($output_group['status_id'] != $c_node['group']['status']['active'])) { header("Location: g_apply.php?group_id=" . $group_id . "&" . SID); exit; } $output_group['member'] = $group->getGroupMembership(); if ($page_name[0] != "g_apply" && (empty($output_group['member']['status_id']) || $output_group['member']['status_id'] != $c_node['group']['member_status']['active'])) { header("Location: g_apply.php?group_id=" . $group_id . "&" . SID); exit; } //setup acs $group_acs = new Acs(null, $db, $c_acs['arr_section']['group']); $group_acs->group_id = $group_id; if (isset($output_group['member']['role_id'])) { $group_acs->role_id = $output_group['member']['role_id']; } } ?> aroundme_0_4_0/www/aroundme_0_4_0/inc/header_my.inc.php 777 0 0 2402 10170664024 16113 0user_id = $user_id; $file->section_item_id = $user_id; $user->file = $file; $output_user = $user->getUser(); ?> aroundme_0_4_0/www/aroundme_0_4_0/inc/header_sn.inc.php 777 0 0 4302 10170715423 16107 0relation_type_ids = $c_node['user']['relation_type']; $sn->status_ids = $c_node['user']['status']; $sn->tree = $_SESSION['s_social_network']; //user details $user->user_id = $user_id; $degree_path = $sn->getDegree($user_id); //we check that the user has not blocked me or if we have no relationship path if (empty($degree_path) || !$sn->checkUserBlocked($user_id)) { $page_name[0] = "err_not_in_sn"; include "inc/footer.inc.php"; exit; } else { //we get the profile id from the sn table if (!empty($degree_path)) { $degree_profile = $user->getDegreeProfiles($degree_path['degree']); } if (!empty($degree_profile[0]['profile_id'])) { $user->profile_id = $degree_profile[0]['profile_id']; } $output_profile = $user->getProfile(); } ?> aroundme_0_4_0/www/aroundme_0_4_0/index.php 777 0 0 2110 10170663153 13742 0 aroundme_0_4_0/www/aroundme_0_4_0/js/ 777 0 0 0 10152641256 12461 5aroundme_0_4_0/www/aroundme_0_4_0/js/functions.js 777 0 0 2337 10170664062 15117 0// ----------------------------------------------------------------------- // This file is part of aroundme // // Copyright (C) 2003, 2005 Barnraiser // http://www.barnraiser.org/ // info@barnraiser.org // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) any // later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with program; see the file COPYING. If not, write to the Free // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // ----------------------------------------------------------------------- //puts browser window at top (out of frames) - stops bug with registering from inside hotmail frame. if (self != top){ if (document.images) top.location.replace(document.location.href); else top.location.href = document.location.href; } aroundme_0_4_0/www/aroundme_0_4_0/language/ 777 0 0 0 10170664073 13632 5aroundme_0_4_0/www/aroundme_0_4_0/language/1/ 777 0 0 0 10152641254 13766 5aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/ 777 0 0 0 10170067724 16073 5aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/a_activity.lang.php 777 0 0 5101 10170664322 21735 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/a_calendar.lang.php 777 0 0 3242 10170664316 21661 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/a_common.lang.php 777 0 0 4754 10170664313 21406 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/a_schedule.lang.php 777 0 0 2436 10170664307 21710 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/add_friend.lang.php 777 0 0 12 10166532321 21612 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/ 777 0 0 0 10166340170 17366 5aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_abuse_status.lang.php 777 0 0 2765 10170664665 24477 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_acs.lang.php 777 0 0 11707 10170664660 22552 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_activities.lang.php 777 0 0 7135 10170664655 24134 0 value="1" daily
value="3" weekly
value="9" monthly
value="10" yearly
aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_activity.lang.php 777 0 0 4425 10170664653 23621 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_cms.lang.php 777 0 0 3567 10170664650 22552 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_error.lang.php 777 0 0 7136 10170664645 23121 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_genre.lang.php 777 0 0 5040 10170664642 23055 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_group.lang.php 777 0 0 6735 10170664637 23131 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_homepage.lang.php 777 0 0 3663 10170664635 23555 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_language_name.lang.php 777 0 0 2234 10170673527 24544 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_links.lang.php 777 0 0 2624 10170664626 23104 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_task_user_status.lang.php 777 0 0 2504 10170664623 25361 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/arrays/arr_user.lang.php 777 0 0 6203 10170664620 22731 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/error.lang.php 777 0 0 3062 10170664302 20734 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_acs.lang.php 777 0 0 5177 10170664277 20703 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_activity.lang.php 777 0 0 5064 10170664274 21761 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_activity_edit.lang.php 777 0 0 10020 10170664272 22770 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_activity_task_edit.lang.php 777 0 0 4522 10170664267 24010 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_apply.lang.php 777 0 0 4171 10170664264 21247 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_blog.lang.php 777 0 0 3374 10170664261 21046 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_blog_edit.lang.php 777 0 0 5170 10170664255 22052 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_calendar.lang.php 777 0 0 3202 10170664252 21662 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_cms.lang.php 777 0 0 3641 10170664246 20705 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_common.lang.php 777 0 0 14115 10170664243 21426 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_files_edit.lang.php 777 0 0 5010 10170664240 22214 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_forum.lang.php 777 0 0 3460 10170664234 21247 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_forum_subject.lang.php 777 0 0 3374 10170664227 22774 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_forum_subject_edit.lang.php 777 0 0 6340 10170664224 23772 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_forum_topic_edit.lang.php 777 0 0 3214 10170664221 23443 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_group.lang.php 777 0 0 3564 10170664215 21257 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_group_create.lang.php 777 0 0 11265 10170664212 22614 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_group_edit.lang.php 777 0 0 6724 10170664206 22265 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_groups.lang.php 777 0 0 2630 10170664202 21427 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_library.lang.php 777 0 0 4720 10170664177 21571 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_library_edit.lang.php 777 0 0 5500 10170664174 22570 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_member_profile.lang.php 777 0 0 5511 10170664171 23105 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_membership.lang.php 777 0 0 5274 10170664166 22263 0Once you've invited them the group administrator(s) and moderator(s) will either accept or reject their membership as per the instructions laid out under the group rules."; $lang['txt_user_name'] = "name"; $lang['txt_user_acquaintances'] = "acquaintances"; $lang['txt_role'] = "role"; $lang['txt_user_hometown'] = "home town"; $lang['txt_user_join_date'] = "community join date"; $lang['txt_user_nic'] = "nic"; $lang['txt_all_roles'] = "all roles"; $lang['txt_member_status'] = "status"; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_poll.lang.php 777 0 0 4236 10170664164 21071 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_poll_edit.lang.php 777 0 0 5460 10170664161 22073 0
You can edit or delete your poll providing that it has received no votes or comments. The poll will only be visible after the start date and time. Votes and comments can only be received after that time and before the end date and time."; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_schedule.lang.php 777 0 0 2436 10170664532 21716 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/g_structure.lang.php 777 0 0 3251 10170664526 22161 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/mag_common.lang.php 777 0 0 3326 10170664523 21727 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/mag_item.lang.php 777 0 0 4270 10170664520 21371 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/mag_list.lang.php 777 0 0 2252 10170664516 21411 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/mag_overview.lang.php 777 0 0 2475 10170664512 22307 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/msg_common.lang.php 777 0 0 6010 10170664507 21744 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/msg_compose.lang.php 777 0 0 4030 10170664503 22115 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/msg_item.lang.php 777 0 0 2755 10170664501 21420 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/msg_list.lang.php 777 0 0 2251 10170664476 21437 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_blog.lang.php 777 0 0 5661 10170664473 21253 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_bookmarks.lang.php 777 0 0 3603 10170664470 22307 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_common.lang.php 777 0 0 6461 10170664465 21620 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_files.lang.php 777 0 0 5011 10170664462 21415 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_library.lang.php 777 0 0 3320 10170664460 21756 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_library_edit.lang.php 777 0 0 5630 10170664455 22775 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_membership.lang.php 777 0 0 5604 10170664453 22456 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_overview.lang.php 777 0 0 5003 10170664447 22165 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_profile.lang.php 777 0 0 10414 10170664444 21776 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_publishing.lang.php 777 0 0 3573 10170664441 22467 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/my_shoutbox.lang.php 777 0 0 3510 10170664436 22171 0Add a shout and let everyone know.

Think before you shout, your friends and aquaintances will be able to see a log of your shouts, so don't write anything you may regret later because even begging the administrators won't get it removed."; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_abuse_reports.lang.php 777 0 0 5237 10170664432 23477 0failure to resolve a proven abuse instance is again the law (Act on Responsibility for Electronic Bulletin Boards - Swedish Code of Statutes: SFS 1998:112). If you are unsure how to process this report we recommend that you refer to the Barnraiser manual. This is available to the Barnraiser membership upon request.

If you are not a member of Barnraiser and you wish to create your own community we urge you to review the laws of your country regarding this matter. In many countries failure by you to comply will result in a fine or at worst case imprisonment.

All correspondence should be stored in the admin forum. Updating the status will automatically assign the report to you.

"; $lang['txt_from'] = "from"; $lang['txt_assigned'] = "assigned"; $lang['txt_abuse_note'] = "authors note"; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_acs.lang.php 777 0 0 3117 10170664427 21367 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_admin.lang.php 777 0 0 2256 10170664425 21712 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_cms.lang.php 777 0 0 3642 10170664423 21402 0aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_common.lang.php 777 0 0 3372 10170664420 22105 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_group.lang.php 777 0 0 4756 10170664416 21765 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_newsletter.lang.php 777 0 0 5315 10170664412 23011 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_register_user.lang.php 777 0 0 6710 10170664407 23503 0

Your place of birth should be the city, town or village you were born in and the place of residence is the city, town or village you live in now.

Remember to put your correct date of birth. If you ever forget your password we will ask you for this before we give you a new one.

"; $lang['txt_invited_personal'] = "Join my friends in this community!"; $lang['txt_male'] = "male"; $lang['txt_nickname'] = "nickname"; $lang['txt_reg_legal'] = "I agree to observe the laws of my country within this site. For countries that are not open or do not support human rights and democracy, I agree that this site has the right to impose site rules as defined by Swedish law."; $lang['txt_surname'] = "surname"; $lang['txt_welcome'] = "Demo Join text. Simply fill in the form to the right and come on in!"; $lang['txt_index_intro_post_reg'] = "Thank you for completing registration with us."; $lang['txt_instructions2'] = "Check your email! You will receive an email from us with a link in it. Press the link to complete registration.
"; $lang['txt_lang_selection'] = "languages I can read"; $lang['txt_preview'] = "check your information and if correct press 'register'"; $lang['txt_default_profile_name'] = "default"; $lang['txt_default_profile_hometown'] = "stockholm"; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_structure.lang.php 777 0 0 5272 10170664404 22660 0

As part of their mission they maintain 'aroundme', the software platform that this community is build upon.

Visit Barnraiser at www.barnraiser.org to find out more about their work.

"; $lang['txt_contact'] = "place your organisations contact details here."; $lang['txt_administration'] = "place information about the administrators here. Include a description of contact procedures."; $lang['txt_structure'] = "describe the structure, goals and mission of your organisation. Divulge any information regarding policy, decision making procedure and structure that may affect the members rights."; $lang['txt_notes'] = "place any notes or tips you wish to make to your membership."; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/node_user.lang.php 777 0 0 5053 10170664401 21570 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/outer.lang.php 777 0 0 4273 10170664376 20761 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/pre_common.lang.php 777 0 0 2552 10170664374 21755 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/report_abuse.lang.php 777 0 0 4305 10170664371 22304 0The community administrator will send you a message informing you of what action has been taken.When you press the 'SEND REPORT' button we will get informed about the page you were looking at. Please tell us any other information you think may help us.

"; $lang['txt_page'] = "page"; $lang['txt_page_txt'] = "The following content will be sent along wiht your report to the community administrator"; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_blocked.lang.php 777 0 0 2725 10170664365 21724 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_blog.lang.php 777 0 0 3375 10170664363 21244 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_common.lang.php 777 0 0 10246 10170664360 21621 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_friends.lang.php 777 0 0 2336 10170664354 21747 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_invite.lang.php 777 0 0 4540 10170664351 21607 0Simply type in their email addresses and press 'INVITE NOW!'."; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_library.lang.php 777 0 0 4272 10170664346 21763 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_network.lang.php 777 0 0 4107 10170664344 22003 0

Social networking is built upon the idea of degrees of relationship to you, so you are the center of your network and thus you are degree zero. Your friends are one degree away and their friends are two degrees away from you and so on.

"; $lang['txt_outstanding_invites'] = "outstanding invites"; $lang['txt_outstanding_invites_intro'] = "people you have invited to join you and who have not yet joined"; $lang['txt_your_social_network'] = "your social network"; $lang['txt_your_social_network_intro'] = "all the people in your network"; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_profile.lang.php 777 0 0 5324 10170664341 21751 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_publishing.lang.php 777 0 0 2736 10170664336 22465 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_recommended.lang.php 777 0 0 3255 10170664332 22574 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/sn_statistics.lang.php 777 0 0 3025 10170664327 22503 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/ 777 0 0 0 10154417665 17247 5aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/admin_group_create.txt.php 777 0 0 402 10131730564 24453 0Hi Admin, An aroundme member wishes to start a group on your node. Please visit your group admin page and look at group number ID_OF_GROUP to complete their application. The following notes were added by the applicant: NOTE Thank you! The aroundme Team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/group_setup_rules.lang.php 777 0 0 1037 10156064262 24543 0

1. I agree that I will observe the laws of Sweden.
2. As part of that I am aware of the BBS act(1998:112) and how I must comply with it within 24 hours otherwise my group will be removed prior to complience.

"; $lang['txt_group_hidden_rules'] = "These are the rules for hidden groups."; $lang['txt_group_visible_rules'] = "These are the rules for visible groups."; ?>aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/im_abuse_reported.txt.php 777 0 0 355 10143747137 24332 0Hi Admin, An instance of abuse has been reported in this node. Please visit your abuse admin page and look at abuse report ID_OF_REPORT and action. The following notes were added by the applicant: NOTE Thank you! The aroundme Team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/im_abuse_reported_thanks.txt.php 777 0 0 413 10143737224 25671 0Hi NAME, Thank you very much for reporting an instance of abuse in this community. The community administrator(s) have been informed and will contact you shortly. If you need to contact them please quote reference number REF_NUMBER. Thank you! The aroundme Team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/im_invite.txt.php 777 0 0 477 10131730575 22625 0Hi, Can you add me to your friends list? NAME '''Click the button below to add this person to your social network.''' ''Remember, you can block this person by pressing the 'block', button in their profile.'' ''If you have an problems please contact your aroundme administrator.'' Kind regards The aroundme team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/im_invitee_joined.txt.php 777 0 0 231 10131730611 24275 0Hi, You asked NAME to join you in aroundme. NAME just registered and is now in your Social network. Go and say hello:) Kind regards The aroundme team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/im_new_friend.txt.php 777 0 0 173 10131730624 23433 0Hi NAME, You have a new friend! FRIEND was just added to your friends list. Why not go and say hello:) The aroundme team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/im_welcome.txt.php 777 0 0 111 10131730636 22741 0Hi NAME, Welcome to aroundme. Hope you like it here! The aroundme team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/mail_abuse_reported.txt.php 777 0 0 361 10143737052 24637 0Hi Node Admin, An instance of abuse has been reported a node. Please visit your abuse admin page and look at abuse report ID_OF_REPORT and action. URL The following notes were added by the applicant: NOTE Thank you! The aroundme Team aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/mail_invite.txt.php 777 0 0 141 10131730647 23126 0USERMESSAGE URL NAME This email was sent to you from Barnraiser. http://www.barnraiser.org/ aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/message.lang.php 777 0 0 1247 10161576000 22376 0 aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/node_rules.lang.php 777 0 0 2667 10164756153 23134 0contributing your work
  • "; $bullet_start = "
      "; $bullet_end = "
    "; } else { $eol = "\n"; $bullet = " - "; $bullet_start = ""; $bullet_end = ""; } $ReportBody = ""; $ReportBody .= "---------------------" . $eol; $ReportBody .= "Unit Test Information" . $eol; $ReportBody .= "---------------------" . $eol; $ReportBody .= "phpmailer version: " . $this->Mail->Version . $eol; $ReportBody .= "Content Type: " . $this->Mail->ContentType . $eol; if(strlen($this->Mail->Host) > 0) $ReportBody .= "Host: " . $this->Mail->Host . $eol; // If attachments then create an attachment list if(count($this->Mail->attachment) > 0) { $ReportBody .= "Attachments:" . $eol; $ReportBody .= $bullet_start; for($i = 0; $i < count($this->Mail->attachment); $i++) { $ReportBody .= $bullet . "Name: " . $this->Mail->attachment[$i][1] . ", "; $ReportBody .= "Encoding: " . $this->Mail->attachment[$i][3] . ", "; $ReportBody .= "Type: " . $this->Mail->attachment[$i][4] . $eol; } $ReportBody .= $bullet_end . $eol; } // If there are changes then list them if(count($this->ChangeLog) > 0) { $ReportBody .= "Changes" . $eol; $ReportBody .= "-------" . $eol; $ReportBody .= $bullet_start; for($i = 0; $i < count($this->ChangeLog); $i++) { $ReportBody .= $bullet . $this->ChangeLog[$i][0] . " was changed to [" . $this->ChangeLog[$i][1] . "]" . $eol; } $ReportBody .= $bullet_end . $eol . $eol; } // If there are notes then list them if(count($this->NoteLog) > 0) { $ReportBody .= "Notes" . $eol; $ReportBody .= "-----" . $eol; $ReportBody .= $bullet_start; for($i = 0; $i < count($this->NoteLog); $i++) { $ReportBody .= $bullet . $this->NoteLog[$i] . $eol; } $ReportBody .= $bullet_end; } // Re-attach the original body $this->Mail->Body .= $eol . $eol . $ReportBody; } /** * Check which default settings have been changed for the report. * @private * @returns void */ function CheckChanges() { if($this->Mail->Priority != 3) $this->AddChange("Priority", $this->Mail->Priority); if($this->Mail->Encoding != "8bit") $this->AddChange("Encoding", $this->Mail->Encoding); if($this->Mail->CharSet != "iso-8859-1") $this->AddChange("CharSet", $this->Mail->CharSet); if($this->Mail->Sender != "") $this->AddChange("Sender", $this->Mail->Sender); if($this->Mail->WordWrap != 0) $this->AddChange("WordWrap", $this->Mail->WordWrap); if($this->Mail->Mailer != "mail") $this->AddChange("Mailer", $this->Mail->Mailer); if($this->Mail->Port != 25) $this->AddChange("Port", $this->Mail->Port); if($this->Mail->Helo != "localhost.localdomain") $this->AddChange("Helo", $this->Mail->Helo); if($this->Mail->SMTPAuth) $this->AddChange("SMTPAuth", "true"); } /** * Adds a change entry. * @private * @returns void */ function AddChange($sName, $sNewValue) { $cur = count($this->ChangeLog); $this->ChangeLog[$cur][0] = $sName; $this->ChangeLog[$cur][1] = $sNewValue; } /** * Adds a simple note to the message. * @public * @returns void */ function AddNote($sValue) { $this->NoteLog[] = $sValue; } /** * Adds all of the addresses * @public * @returns void */ function SetAddress($sAddress, $sName = "", $sType = "to") { switch($sType) { case "to": $this->Mail->AddAddress($sAddress, $sName); break; case "cc": $this->Mail->AddCC($sAddress, $sName); break; case "bcc": $this->Mail->AddBCC($sAddress, $sName); break; } } ///////////////////////////////////////////////// // UNIT TESTS ///////////////////////////////////////////////// /** * Try a plain message. */ function test_WordWrap() { $this->Mail->WordWrap = 40; $my_body = "Here is the main body of this message. It should " . "be quite a few lines. It should be wrapped at the " . "40 characters. Make sure that it is."; $nBodyLen = strlen($my_body); $my_body .= "\n\nThis is the above body length: " . $nBodyLen; $this->Mail->Body = $my_body; $this->Mail->Subject .= ": Wordwrap"; $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Try a plain message. */ function test_Low_Priority() { $this->Mail->Priority = 5; $this->Mail->Body = "Here is the main body. There should be " . "a reply to address in this message."; $this->Mail->Subject .= ": Low Priority"; $this->Mail->AddReplyTo("nobody@nobody.com", "Nobody (Unit Test)"); $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Simple plain file attachment test. */ function test_Multiple_Plain_FileAttachment() { $this->Mail->Body = "Here is the text body"; $this->Mail->Subject .= ": Plain + Multiple FileAttachments"; if(!$this->Mail->AddAttachment("rocks.png")) { $this->assert(false, $this->Mail->ErrorInfo); return; } if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) { $this->assert(false, $this->Mail->ErrorInfo); return; } $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Simple plain string attachment test. */ function test_Plain_StringAttachment() { $this->Mail->Body = "Here is the text body"; $this->Mail->Subject .= ": Plain + StringAttachment"; $sAttachment = "These characters are the content of the " . "string attachment.\nThis might be taken from a ". "database or some other such thing. "; $this->Mail->AddStringAttachment($sAttachment, "string_attach.txt"); $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Plain quoted-printable message. */ function test_Quoted_Printable() { $this->Mail->Body = "Here is the main body"; $this->Mail->Subject .= ": Plain + Quoted-printable"; $this->Mail->Encoding = "quoted-printable"; $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Try a plain message. */ function test_Html() { $this->Mail->IsHTML(true); $this->Mail->Subject .= ": HTML only"; $this->Mail->Body = "This is a test message written in HTML.
    " . "Go to " . "http://phpmailer.sourceforge.net/ for new versions of " . "phpmailer.

    Thank you!"; $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Simple HTML and attachment test */ function test_HTML_Attachment() { $this->Mail->Body = "This is the HTML part of the email."; $this->Mail->Subject .= ": HTML + Attachment"; $this->Mail->IsHTML(true); if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) { $this->assert(false, $this->Mail->ErrorInfo); return; } $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * An embedded attachment test. */ function test_Embedded_Image() { $this->Mail->Body = "Embedded Image: \"phpmailer\"" . "Here is an image!"; $this->Mail->Subject .= ": Embedded Image"; $this->Mail->IsHTML(true); if(!$this->Mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png", "base64", "image/png")) { $this->assert(false, $this->Mail->ErrorInfo); return; } $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * An embedded attachment test. */ function test_Multi_Embedded_Image() { $this->Mail->Body = "Embedded Image: \"phpmailer\"" . "Here is an image!"; $this->Mail->Subject .= ": Embedded Image + Attachment"; $this->Mail->IsHTML(true); if(!$this->Mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png", "base64", "image/png")) { $this->assert(false, $this->Mail->ErrorInfo); return; } if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) { $this->assert(false, $this->Mail->ErrorInfo); return; } $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Simple multipart/alternative test. */ function test_AltBody() { $this->Mail->Body = "This is the HTML part of the email."; $this->Mail->AltBody = "Here is the text body of this message. " . "It should be quite a few lines. It should be wrapped at the " . "40 characters. Make sure that it is."; $this->Mail->WordWrap = 40; $this->AddNote("This is a mulipart alternative email"); $this->Mail->Subject .= ": AltBody + Word Wrap"; $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } /** * Simple HTML and attachment test */ function test_AltBody_Attachment() { $this->Mail->Body = "This is the HTML part of the email."; $this->Mail->AltBody = "This is the text part of the email."; $this->Mail->Subject .= ": AltBody + Attachment"; $this->Mail->IsHTML(true); if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) { $this->assert(false, $this->Mail->ErrorInfo); return; } $this->BuildBody(); $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); $fp = fopen("message.txt", "w"); fwrite($fp, $this->Mail->CreateHeader() . $this->Mail->CreateBody()); fclose($fp); } function test_MultipleSend() { $this->Mail->Body = "Sending two messages without keepalive"; $this->BuildBody(); $subject = $this->Mail->Subject; $this->Mail->Subject = $subject . ": SMTP 1"; $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); $this->Mail->Subject = $subject . ": SMTP 2"; $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); } function test_SmtpKeepAlive() { $this->Mail->Body = "This was done using the SMTP keep-alive."; $this->BuildBody(); $subject = $this->Mail->Subject; $this->Mail->SMTPKeepAlive = true; $this->Mail->Subject = $subject . ": SMTP keep-alive 1"; $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); $this->Mail->Subject = $subject . ": SMTP keep-alive 2"; $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); $this->Mail->SmtpClose(); } function test_Error() { $this->Mail->Subject .= ": This should be sent"; $this->BuildBody(); $this->Mail->ClearAllRecipients(); // no addresses should cause an error $this->assert($this->Mail->IsError() == false, "Error found"); $this->assert($this->Mail->Send() == false, "Send succeeded"); $this->assert($this->Mail->IsError(), "No error found"); $this->assertEquals('You must provide at least one ' . 'recipient email address.', $this->Mail->ErrorInfo); $this->Mail->AddAddress(get("mail_to")); $this->assert($this->Mail->Send(), "Send failed"); } } /** * Create and run test instance. */ if(isset($HTTP_GET_VARS)) $global_vars = $HTTP_GET_VARS; else $global_vars = $_REQUEST; if(isset($global_vars["submitted"])) { echo "Test results:
    "; $suite = new TestSuite( "phpmailerTest" ); $testRunner = new TestRunner; $testRunner->run($suite); echo "


    "; } function get($sName) { global $global_vars; if(isset($global_vars[$sName])) return $global_vars[$sName]; else return ""; } ?>

    phpmailer Unit Test

    By entering a SMTP hostname it will automatically perform tests with SMTP.
    To Address: "/>
    Cc Address: "/>
    SMTP Hostname: "/>

    aroundme_0_4_0/www/aroundme_0_4_0/class/Mail/test/phpunit.php 777 0 0 24273 7451337142 17312 0 // OntoSys, Inc // // $Id: phpunit.php,v 1.1 2002/03/30 19:32:17 bmatzelle Exp $ // Copyright (c) 2000 Fred Yankowski // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the "Software"), to deal in the Software without // restriction, including without limitation the rights to use, copy, // modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS // BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING); /* interface Test { function run(&$aTestResult); function countTestCases(); } */ function trace($msg) { return; print($msg); flush(); } class Exception { /* Emulate a Java exception, sort of... */ var $message; function Exception($message) { $this->message = $message; } function getMessage() { return $this->message; } } class Assert { function assert($boolean, $message=0) { if (! $boolean) $this->fail($message); } function assertEquals($expected, $actual, $message=0) { if ($expected != $actual) { $this->failNotEquals($expected, $actual, "expected", $message); } } function assertRegexp($regexp, $actual, $message=false) { if (! preg_match($regexp, $actual)) { $this->failNotEquals($regexp, $actual, "pattern", $message); } } function failNotEquals($expected, $actual, $expected_label, $message=0) { // Private function for reporting failure to match. $str = $message ? ($message . ' ') : ''; $str .= "($expected_label/actual)
    "; $htmlExpected = htmlspecialchars($expected); $htmlActual = htmlspecialchars($actual); $str .= sprintf("
    %s\n--------\n%s
    ", $htmlExpected, $htmlActual); $this->fail($str); } } class TestCase extends Assert /* implements Test */ { /* Defines context for running tests. Specific context -- such as instance variables, global variables, global state -- is defined by creating a subclass that specializes the setUp() and tearDown() methods. A specific test is defined by a subclass that specializes the runTest() method. */ var $fName; var $fResult; var $fExceptions = array(); function TestCase($name) { $this->fName = $name; } function run($testResult=0) { /* Run this single test, by calling the run() method of the TestResult object which will in turn call the runBare() method of this object. That complication allows the TestResult object to do various kinds of progress reporting as it invokes each test. Create/obtain a TestResult object if none was passed in. Note that if a TestResult object was passed in, it must be by reference. */ if (! $testResult) $testResult = $this->_createResult(); $this->fResult = $testResult; $testResult->run(&$this); $this->fResult = 0; return $testResult; } function countTestCases() { return 1; } function runTest() { $name = $this->name(); // Since isset($this->$name) is false, no way to run defensive checks $this->$name(); } function setUp() /* expect override */ { //print("TestCase::setUp()
    \n"); } function tearDown() /* possible override */ { //print("TestCase::tearDown()
    \n"); } //////////////////////////////////////////////////////////////// function _createResult() /* protected */ { /* override this to use specialized subclass of TestResult */ return new TestResult; } function fail($message=0) { //printf("TestCase::fail(%s)
    \n", ($message) ? $message : ''); /* JUnit throws AssertionFailedError here. We just record the failure and carry on */ $this->fExceptions[] = new Exception(&$message); } function error($message) { /* report error that requires correction in the test script itself, or (heaven forbid) in this testing infrastructure */ printf('ERROR: ' . $message . '
    '); $this->fResult->stop(); } function failed() { return count($this->fExceptions); } function getExceptions() { return $this->fExceptions; } function name() { return $this->fName; } function runBare() { $this->setup(); $this->runTest(); $this->tearDown(); } } class TestSuite /* implements Test */ { /* Compose a set of Tests (instances of TestCase or TestSuite), and run them all. */ var $fTests = array(); function TestSuite($classname=false) { if ($classname) { // Find all methods of the given class whose name starts with // "test" and add them to the test suite. We are just _barely_ // able to do this with PHP's limited introspection... Note // that PHP seems to store method names in lower case, and we // have to avoid the constructor function for the TestCase class // superclass. This will fail when $classname starts with // "Test" since that will have a constructor method that will // get matched below and then treated (incorrectly) as a test // method. So don't name any TestCase subclasses as "Test..."! if (floor(phpversion()) >= 4) { // PHP4 introspection, submitted by Dylan Kuhn $names = get_class_methods($classname); while (list($key, $method) = each($names)) { if (preg_match('/^test/', $method) && $method != "testcase") { $this->addTest(new $classname($method)); } } } else { $dummy = new $classname("dummy"); $names = (array) $dummy; while (list($key, $value) = each($names)) { $type = gettype($value); if ($type == "user function" && preg_match('/^test/', $key) && $key != "testcase") { $this->addTest(new $classname($key)); } } } } } function addTest($test) { /* Add TestCase or TestSuite to this TestSuite */ $this->fTests[] = $test; } function run(&$testResult) { /* Run all TestCases and TestSuites comprising this TestSuite, accumulating results in the given TestResult object. */ reset($this->fTests); while (list($na, $test) = each($this->fTests)) { if ($testResult->shouldStop()) break; $test->run(&$testResult); } } function countTestCases() { /* Number of TestCases comprising this TestSuite (including those in any constituent TestSuites) */ $count = 0; reset($fTests); while (list($na, $test_case) = each($this->fTests)) { $count += $test_case->countTestCases(); } return $count; } } class TestFailure { /* Record failure of a single TestCase, associating it with the exception(s) that occurred */ var $fFailedTestName; var $fExceptions; function TestFailure(&$test, &$exceptions) { $this->fFailedTestName = $test->name(); $this->fExceptions = $exceptions; } function getExceptions() { return $this->fExceptions; } function getTestName() { return $this->fFailedTestName; } } class TestResult { /* Collect the results of running a set of TestCases. */ var $fFailures = array(); var $fRunTests = 0; var $fStop = false; function TestResult() { } function _endTest($test) /* protected */ { /* specialize this for end-of-test action, such as progress reports */ } function getFailures() { return $this->fFailures; } function run($test) { /* Run a single TestCase in the context of this TestResult */ $this->_startTest($test); $this->fRunTests++; $test->runBare(); /* this is where JUnit would catch AssertionFailedError */ $exceptions = $test->getExceptions(); if ($exceptions) $this->fFailures[] = new TestFailure(&$test, &$exceptions); $this->_endTest($test); } function countTests() { return $this->fRunTests; } function shouldStop() { return $this->fStop; } function _startTest($test) /* protected */ { /* specialize this for start-of-test actions */ } function stop() { /* set indication that the test sequence should halt */ $fStop = true; } function countFailures() { return count($this->fFailures); } } class TextTestResult extends TestResult { /* Specialize TestResult to produce text/html report */ function TextTestResult() { $this->TestResult(); // call superclass constructor } function report() { /* report result of test run */ $nRun = $this->countTests(); $nFailures = $this->countFailures(); printf("

    %s test%s run
    ", $nRun, ($nRun == 1) ? '' : 's'); printf("%s failure%s.
    \n", $nFailures, ($nFailures == 1) ? '' : 's'); if ($nFailures == 0) return; print("

      \n"); $failures = $this->getFailures(); while (list($i, $failure) = each($failures)) { $failedTestName = $failure->getTestName(); printf("
    1. %s\n", $failedTestName); $exceptions = $failure->getExceptions(); print("
        "); while (list($na, $exception) = each($exceptions)) printf("
      • %s\n", $exception->getMessage()); print("
      "); } print("
    \n"); } function _startTest($test) { printf("%s ", $test->name()); flush(); } function _endTest($test) { $outcome = $test->failed() ? "FAIL" : "ok"; printf("$outcome
    \n"); flush(); } } class TestRunner { /* Run a suite of tests and report results. */ function run($suite) { $result = new TextTestResult; $suite->run($result); $result->report(); } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Mail/test/rocks.png 777 0 0 5 7532514726 16631 0PNG aroundme_0_4_0/www/aroundme_0_4_0/class/Message.class.php 777 0 0 11760 10170677766 16502 0db = $db; $this->message_id = $message_id; }//EO Message // setMessageId -------------------------------------------------------------------- // erik sundelof - 29th Nov 2004 // function setMessageId($message_id) { $this->message_id = $message_id; }//EO setMessageId // setStatus -------------------------------------------------------------------- // Set message status // erik sundelof - 29th Nov 2004 // function setStatus($status) { $query = " UPDATE " . $this->db->prefix . "_user_message SET message_status=". $status . " WHERE message_id=". $this->message_id ; // Setting the user to online $this->db->Execute($query); $this->status = $status; }//EO setStatus // getStatus -------------------------------------------------------------------- // get message status // erik sundelof - 29th Nov 2004 // function getStatus() { return $this->status; }//EO getStatus // setBoxes -------------------------------------------------------------------- // Set message box coding // erik sundelof - 29th Nov 2004 // function setBoxes($inbox, $savebox, $outbox) { $this->boxes["in_box"] = $inbox; $this->boxes["save_box"] = $savebox; $this->boxes["out_box"] = $outbox; }//EO setBoxes // getMessageBox -------------------------------------------------------------------- // Get the name of the box // erik sundelof - 29th Nov 2004 // function getMessageBox($message_box) { if ($message_box == $this->boxes['out_box']) { $boxname = "out_box"; } else if ($message_box == $this->boxes['save_box']) { $boxname = "save_box"; } else if ($message_box == $this->boxes['in_box']) { $boxname = "in_box"; } return $boxname; }//EO getMessageBox // getMessage -------------------------------------------------------------------- // Setting the status of the message to read // erik sundelof - 29th Nov 2004 // function getMessage() { // Getting the box id $query = "SELECT m.message_box FROM " . $this->db->prefix . "_user_message m WHERE m.message_id = " . $this->message_id; $result = $this->db->Execute($query); $message_box = $result->fields["message_box"]; // Selection of messages is differs for different boxes... if ($message_box == $this->boxes['out_box']) { $join = "m.to_user_id=p.user_id"; } else if ($message_box == $this->boxes['save_box']) { $join = "m.owner_user_id=p.user_id"; } else if ($message_box == $this->boxes['in_box']) { $join = "m.from_user_id=p.user_id"; } // Forming query and selecting the messages with the correct owner id:s... // The \" m.to_user_id, m.owner_user_id, m.from_user_id \" are there so that one can track // everything about the users linked to that particular message outside the class. $query = " SELECT p.profile_nic, p.file_id, m.message_id, m.owner_user_id, m.to_user_id, m.from_user_id, m.message_type, m.message_box, m.message_status, m.message_subject, m.message_body, m.message_create_datetime FROM " . $this->db->prefix . "_user_message m LEFT JOIN " . $this->db->prefix . "_user_profile p on ". $join ." WHERE p.profile_default=1 and m.message_id = " . $this->message_id; ; $result = $this->db->Execute($query); if (isset($result->fields)) { $output_message = $result->fields; $result->Close(); return $output_message; } else { $error_info = "function=getMessage class=Message.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getMessage } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Poll.class.php 777 0 0 45100 10170677762 16013 0db = $db; $this->section_id = $section_id; $this->date = $date; }//EO Poll // getPoll -------------------------------------------------------------------- // returns a single record from the DB // tom calthrop - 24th Feb 2004 // function getPoll() { $query = " SELECT p.* FROM " . $this->db->prefix . "_poll p WHERE p.poll_id=" . $this->poll_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $temp['display_poll_start_datetime'] = $this->date->formatDate($temp['poll_start_datetime']); $temp['display_poll_end_datetime'] = $this->date->formatDate($temp['poll_end_datetime']); $temp['options'] = $this->getOptions(); $temp['total_votes'] = $this->total_votes; //get percentages foreach($temp['options'] as $key => $i): $temp['options'][$key]['percent'] = 0; if ($i['votes'] > 0) { $percent = round((100/$this->total_votes)* $i['votes']); $temp['options'][$key]['percent'] = $percent; } endforeach; $result->Close(); return $temp; } else { $error_info = "function=getPoll class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getPoll // getOptions -------------------------------------------------------------------- // get the options for the poll // tom calthrop - 24th Feb 2004 // function getOptions() { $total_votes = 0; $query = " SELECT option_id, option_body, option_create_datetime FROM " . $this->db->prefix . "_poll_option WHERE poll_id=" . $this->poll_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['votes'] = $this->answerSummary($temp1['option_id']); $total_votes = $total_votes + $temp1['votes']; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); $this->total_votes = $total_votes; return $temp; } else { $error_info = "function=getOptions class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getOptions // answerSummary -------------------------------------------------------------------- // returns count of the ansers received per poll option given // tom calthrop - 24th Feb 2004 // function answerSummary($option_id) { $query = " SELECT count(answer_id) as total FROM " . $this->db->prefix . "_poll_answer WHERE current_answer=1 and option_id=" . $option_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $result->Close(); return $temp['total']; } else { $error_info = "function=answerSummary class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO answerSummary // pollUserCurrentVote -------------------------------------------------------------------- // returns the current vote for a user // tom calthrop - 24th Feb 2004 // function pollUserCurrentVote($user_id = null) { if (empty($user_id)) { $user_id = $this->user_id; } $query = " SELECT answer_id, poll_id, current_answer, answer_create_datetime, option_id FROM " . $this->db->prefix . "_poll_answer WHERE user_id=" . $user_id . " and poll_id=" . $this->poll_id . " and current_answer=1 order by answer_create_datetime" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $result->Close(); return $temp; } else { $error_info = "function=pollUserCurrentVote class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO pollUserCurrentVote // getPolls -------------------------------------------------------------------- // returns multiple rows of polls // tom calthrop - 24th Feb 2004 // function getPolls() { $query = " SELECT poll_id, section_item_id, poll_question, poll_anon, vote_required, poll_create_datetime, poll_start_datetime, poll_end_datetime FROM " . $this->db->prefix . "_poll WHERE section_id=" . $this->section_id . " AND " ; if (isset($this->section_item_id)) { $query .= "section_item_id=" . $this->section_item_id . " AND "; } if (isset($this->before_start_timestamp)) { $datetime = date("Y-m-d H:i:s", $this->before_start_timestamp); $datetime = $this->db->DBDate($datetime); $query .= "poll_start_datetime <= " . $datetime . " AND "; } if (isset($this->after_start_timestamp)) { $datetime = date("Y-m-d H:i:s", $this->after_start_timestamp); $datetime = $this->db->DBDate($datetime); $query .= "poll_start_datetime >= " . $datetime . " AND "; } if (isset($this->before_end_timestamp)) { $datetime = date("Y-m-d H:i:s", $this->before_end_timestamp); $datetime = $this->db->DBDate($datetime); $query .= "poll_end_datetime <= " . $datetime . " AND "; } if (isset($this->after_end_timestamp)) { $datetime = date("Y-m-d H:i:s", $this->after_end_timestamp); $datetime = $this->db->DBDate($datetime); $query .= "poll_end_datetime >= " . $datetime . " AND "; } if (isset($this->poll_ids)) { $poll_ids = ""; foreach($this->poll_ids as $key => $i): $poll_ids .= $i; if (count($this->poll_ids) > $key+1) { $poll_ids .=","; } endforeach; $query .= "poll_id in (" . $poll_ids . ") AND "; } $query .="1=1 "; if (isset($this->order_by)) { $query .= "order by " . $this->order_by; } else { $query .= "order by poll_question"; } if (isset($this->limit)) { $result = $this->db->SelectLimit($query, $this->limit); } else { $result = $this->db->Execute($query); } $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['display_poll_start_datetime'] = $this->date->formatDate($temp1['poll_start_datetime'], 1); $temp1['display_poll_end_datetime'] = $this->date->formatDate($temp1['poll_end_datetime'], 1); $this->poll_id = $temp1['poll_id']; $temp1['options'] = $this->getOptions(); $temp1['total_votes'] = $this->total_votes; //get percentages if (isset($temp1['options'])) { foreach($temp1['options'] as $key => $i): $temp1['options'][$key]['percent'] = 0; if ($i['votes'] > 0) { $percent = round((100/$this->total_votes)* $i['votes']); $temp1['options'][$key]['percent'] = $percent; } endforeach; } array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getPolls class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getPolls // updatePoll -------------------------------------------------------------------- // updates a single poll record in DB // tom calthrop - 24th Feb 2004 // function updatePoll($data) { $poll_start_datetime = $_POST['start_year']."-".$_POST['start_month']."-".$_POST['start_day']." ".$_POST['start_hour'].":".$_POST['start_minute'].":00"; $poll_end_datetime = $_POST['end_year']."-".$_POST['end_month']."-".$_POST['end_day']." ".$_POST['end_hour'].":".$_POST['end_minute'].":00"; if (isset($data['poll_anon'])) { $poll_anon = 1; } else { $poll_anon = "null"; } if (isset($data['vote_required'])) { $vote_required = 1; } else { $vote_required = "null"; } $query = " UPDATE " . $this->db->prefix . "_poll SET poll_question='" . $data['poll_question'] . "', poll_start_datetime='" . $poll_start_datetime . "', poll_end_datetime ='" . $poll_end_datetime . "', poll_anon=" . $poll_anon . ", vote_required=" . $vote_required . " WHERE poll_id=" . $this->poll_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updatePoll class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO updatePoll // insertPoll -------------------------------------------------------------------- // inserts a single poll record in DB // tom calthrop - 24th Feb 2004 // function insertPoll($data) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $poll_start_datetime = $_POST['start_year']."-".$_POST['start_month']."-".$_POST['start_day']." ".$_POST['start_hour'].":".$_POST['start_minute'].":00"; $poll_end_datetime = $_POST['end_year']."-".$_POST['end_month']."-".$_POST['end_day']." ".$_POST['end_hour'].":".$_POST['end_minute'].":00"; if (isset($data['poll_anon'])) { $poll_anon = $data['poll_anon']; } else { $poll_anon = "null"; } if (isset($data['vote_required'])) { $vote_required = $data['vote_required']; } else { $vote_required = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_poll (section_id, section_item_id, poll_question, poll_start_datetime, poll_end_datetime, poll_anon, poll_create_datetime, user_id, vote_required ) VALUES ( " . $this->section_id . ", " . $this->section_item_id . ", '" . $data['poll_question'] . "', '" . $poll_start_datetime . "', '" . $poll_end_datetime . "', " . $poll_anon . ", " . $datetime . ", " . $this->user_id . ", " . $vote_required . " )" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $query = " SELECT poll_id FROM " . $this->db->prefix . "_poll WHERE section_id=" . $this->section_id . " AND section_item_id=" . $this->section_item_id . " AND poll_create_datetime=" . $datetime ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields['poll_id'])) { $this->poll_id = $result->fields['poll_id']; } else { $error_info = "function=insertPoll class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } else { $error_info = "function=insertPoll class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO insertPoll // deletePoll -------------------------------------------------------------------- // inserts a single poll record in DB // tom calthrop - 24th Feb 2004 // function deletePoll() { $query = " DELETE FROM " . $this->db->prefix . "_poll WHERE poll_id=" . $this->poll_id ; $result = $this->db->Execute($query); if (empty($result->fields)) { $error_info = "function=deletePoll class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO deletePoll // insertOption -------------------------------------------------------------------- // inserts a single poll record in DB // tom calthrop - 24th Feb 2004 // function insertOption($option_body) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_poll_option (poll_id, option_body, option_create_datetime, user_id) VALUES ( " . $this->poll_id . ", '" . $option_body . "', " . $datetime . ", " . $this->user_id . " )" ; $result = $this->db->Execute($query); if (empty($result->fields)) { $error_info = "function=insertOption class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO insertOption // updateOption -------------------------------------------------------------------- // updates a single poll record in DB // tom calthrop - 24th Feb 2004 // function updateOption($option_id, $option_body) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " UPDATE " . $this->db->prefix . "_poll_option SET option_body='" . $option_body . "', option_edit_datetime=" . $datetime . ", user_id=" . $this->user_id . " WHERE option_id=" . $option_id ; $result = $this->db->Execute($query); if (empty($result->fields)) { $error_info = "function=updateOption class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO updateOption // deleteOption -------------------------------------------------------------------- // deletes a single poll record in DB // tom calthrop - 24th Feb 2004 // function deleteOption($option_id) { $query = " DELETE FROM " . $this->db->prefix . "_poll_option WHERE option_id=" . $option_id ; $result = $this->db->Execute($query); if (empty($result->fields)) { $error_info = "function=deleteOption class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO deleteOption // pollUserVoteHistory -------------------------------------------------------------------- // returns the history of the votes given by a user to a poll (used in forum subjects) // tom calthrop - 24th Feb 2004 // function pollUserVoteHistory($user_id) { //display a poll $query = " SELECT pa.answer_create_datetime, o.option_body FROM " . $this->db->prefix . "_poll_answer pa, " . $this->db->prefix . "_poll_option o where pa.option_id = o.option_id and pa.user_id=" . $user_id . " and pa.poll_id=" . $this->poll_id . " order by pa.answer_create_datetime" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['answer_create_datetime'] = $this->date->formatDate($temp1['answer_create_datetime'],1); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=pollUserVoteHistory class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO pollUserVoteHistory // getUserPollParticipation -------------------------------------------------------------------- // returns the history of the polls and votes by a given user (for user publishing page) // tom calthrop - 11th December 2004 // function getUserPollParticipation () { $query = " SELECT p.poll_question, pa.answer_create_datetime, o.option_body FROM " . $this->db->prefix . "_poll p, " . $this->db->prefix . "_poll_option o, " . $this->db->prefix . "_poll_answer pa WHERE p.poll_id=o.poll_id and o.option_id=pa.option_id and pa.user_id=" . $this->user_id . " and pa.current_answer=1 and p.poll_anon is null order by pa.answer_create_datetime desc" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['answer_create_datetime'] = $this->date->formatDate($temp1['answer_create_datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getUserPollParticipation class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getUserPollParticipation // updateAnswer -------------------------------------------------------------------- // update defaults and insert new answer // tom calthrop - 28th December 2004 // function updateAnswer($option_id) { $query = " UPDATE " . $this->db->prefix . "_poll_answer SET current_answer=null WHERE poll_id=" . $this->poll_id . " AND user_id=" . $this->user_id ; $result = $this->db->Execute($query); //insert record $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_poll_answer ( user_id, poll_id, option_id, current_answer, answer_create_datetime ) VALUES ( " . $this->user_id . ", " . $this->poll_id . ", " . $option_id . ", 1, " . $datetime . " )" ; $result = $this->db->Execute($query); }//EO updateAnswer // getPollCount -------------------------------------------------------------------- // will get the coutn of unique page names // tom calthrop - 27th December 2004 // function getPollCount() { $query = " SELECT poll_id as total FROM " . $this->db->prefix . "_poll WHERE section_id=" . $this->section_id . " and section_item_id=" . $this->section_item_id . " and " ; if (isset($this->user_id)) { $query .= "user_id=" . $this->user_id . " and "; } $query .= "1=1 "; $result = $this->db->Execute($query); if (isset($result->fields['total'])) { return $result->fields['total']; } else { $error_info = "function=getPollCount class=Poll.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getPollCount } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Schedule.class.php 777 0 0 25343 10170663465 16643 0db = $db; $this->id = $id; $this->mh = $now['mon']; $this->da = $now['mday']; $this->yr = $now['year']; $this->schedule = array(); // Initialize calendar $this->todo = array(); // Initialize calendar }//EO Schedule // setScheduleBase -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function setScheduleBase() { //setup calendar array $this->daysinmonth = date("t",mktime(0, 0, 0, $this->mh, 1, $this->yr)); //populate the calendar array with dates //fill the calendar for ($i=0; $i < 24; $i++) { $temp = array( 'today' => date("h:00",mktime($i,0,0,$this->mh,$this->da,$this->yr)), 'hour' => $i, 'content' => array() ); array_push($this->schedule, $temp); } }//EO setScheduleBase // getMax -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function getMax() { $value = 0; for ($i=0; $i < 24; $i++) { $value = count($this->schedule[$i]['content'])>$value ? count($this->schedule[$i]['content']) : $value; } return $value; }//EO getMax // getSchedule -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function getSchedule() { return $this->schedule; }//EO getSchedule // getToDo -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function getToDo() { return $this->todo; }//EO getToDo // modifyActivityDate -------------------------------------------------------------------- // Recalculate the dates so that the matches up the structure of the populating algortihm // Erik Sundelf, 3rd June 2004 // function modifyActivityDate($activity) { $activity_date = $this->calculateDate($activity); if(!empty($activity_date[0])) { $activity[5] = $activity_date[0]; $activity["activity_start_datetime"] = $activity_date[0]; } if(!empty($activity_date[1])) { $activity[6] = $activity_date[1]; $activity["activity_end_datetime"] = $activity_date[1]; } return $activity; }//EO modifyActivityDate // populateActivity -------------------------------------------------------------------- // Erik Sundelf, 3rd June 2004 // function populateActivity($activity) { if(!empty($activity["activity_start_datetime"])) $start = strtotime($activity[5]); else $start = 0; if(!empty($activity["activity_end_datetime"])) $end = strtotime($activity[6]); else $end = 0; // Defines useful dates $time_start = mktime(0, 0, 1, $this->mh, $this->da, $this->yr); $time_end = mktime(23, 59, 59, $this->mh, $this->da, $this->yr); if($start>=$time_start & $start<=$time_end) { if($end<=$time_end) { $hs = date("G", $start); $he = date("G", $end); } else { $hs = date("G", $start); $he = 23; } } elseif($end>=$time_start & $end<=$time_end) { $hs = 0; $he = date("G", $end); } elseif($start<$time_start & $end>$time_end) { if(!empty($activity["activity_frequency"])) { if(!empty($activity["activity_start_hour"]) & !empty($activity["activity_end_hour"])) { $hs = $activity["activity_start_hour"]; $he = $activity["activity_end_hour"]-1; if($he<$hs) $he = $hs; } else { $he = $hs = 1; } } } if(!empty($activity["activity_frequency"]) & empty($activity["activity_start_hour"]) & empty($activity["activity_end_hour"])) { $hs = $he = 1; } // Corrects hours if incorrect if(isset($hs)) { if($hs<0) { $hs = 0; } } // Corrects hours if incorrect if(isset($he)) { if($he>23) { $he = 23; } } if(isset($hs) & isset($he)) { for($h = $hs; $h < $he+1; $h++) { if(isset($activity["activity_frequency"])) { if($activity["activity_frequency"]==3){ // Weekly $weekday = date("w", mktime(0, 1, 1, $this->mh, $this->da, $this->yr))+1; $start_weekday = $activity["activity_start_weekday"]; if(empty($activity["activity_end_weekday"])) $end_weekday = $activity["activity_start_weekday"]; else $end_weekday = $activity["activity_end_weekday"]; if($start_weekday<=$weekday & $end_weekday>=$weekday) { if(!empty($activity["activity_start_hour"]) & !empty($activity["activity_end_hour"])) array_push($this->schedule[$h]['content'], $activity); else array_push($this->todo, $activity); } } elseif ($activity["activity_frequency"]==9) { // Monthly $start_day = $activity["activity_start_day"]; if(empty($activity["activity_end_day"])) $end_day = $activity["activity_start_day"]; else $end_day = $activity["activity_end_day"]; if($start_day<=$this->da & $end_day>=$this->da) { if(empty($activity["activity_start_hour"]) & empty($activity["activity_end_hour"])) array_push($this->todo, $activity); else array_push($this->schedule[$h]['content'], $activity); } } elseif ($activity["activity_frequency"]==10) { // Yearly $start_day = $activity["activity_start_day"]; if(empty($activity["activity_end_day"])) $end_day = $activity["activity_start_day"]; else $end_day = $activity["activity_end_day"]; if($start_day<=$this->da & $end_day>=$this->da & $activity["activity_start_month"]<=$this->mh & $activity["activity_end_month"]>=$this->mh) { if(empty($activity["activity_start_hour"]) & empty($activity["activity_end_hour"])) array_push($this->todo, $activity); else array_push($this->schedule[$h]['content'], $activity); } } else { if(empty($activity["activity_start_hour"]) & empty($activity["activity_end_hour"])) array_push($this->todo, $activity); else array_push($this->schedule[$h]['content'], $activity); } } else array_push($this->schedule[$h]['content'], $activity); } } }//EO populateActivity // calculateDate -------------------------------------------------------------------- // Calculate starting date // Erik Sundelf, 3rd June 2004 // function calculateDate($activity){ $sec[0] = (!empty($activity['activity_start_sec'])) ? $activity['activity_start_sec'] : "01"; $min[0] = (!empty($activity['activity_start_min'])) ? $activity['activity_start_min'] : "01"; $hour[0] = (!empty($activity['activity_start_hour'])) ? $activity['activity_start_hour'] : "01"; $day[0] = (!empty($activity['activity_start_day'])) ? $activity['activity_start_day'] : 1; $month[0] = (!empty($activity['activity_start_month'])) ? $activity['activity_start_month'] : $this->mh; $year[0] = (!empty($activity['activity_start_year'])) ? $activity['activity_start_year'] : $this->yr; $sec[1] = (!empty($activity['activity_end_sec'])) ? $activity['activity_end_sec'] : "01"; $min[1] = (!empty($activity['activity_end_min'])) ? $activity['activity_end_min'] : "01"; $hour[1] = (!empty($activity['activity_end_hour'])) ? $activity['activity_end_hour']-1 : "01"; $day[1] = (!empty($activity['activity_end_day'])) ? $activity['activity_end_day'] : $this->daysinmonth; $month[1] = (!empty($activity['activity_end_month'])) ? $activity['activity_end_month'] : $this->mh; $year[1] = (!empty($activity['activity_end_year'])) ? $activity['activity_end_year'] : $this->yr; if($hour[0]>$hour[1]) $hour[1] = $hour[0]; for($i = 0; $i<=1; $i++) $activity_date[$i] = mktime($hour[$i], $min[$i], $sec[$i], $month[$i], $day[$i], $year[$i]); //$activity_date[$i] = strtotime($year[$i]."-".$month[$i]."-".$day[$i]." ".$hour[$i].":".$min[$i].":".$sec[$i]); // Redefining the end date so that it matches the activities if(isset($activity["activity_frequency"]) && $activity["activity_frequency"]>0) { $freq = $activity["activity_frequency"]; if($freq==3 | $freq==1) { $activity_date[0] = mktime(0, 0, 0, $this->mh, 1, $this->yr); $activity_date[1] = strtotime("+1 month -1 day", $activity_date[0]); } } if(!empty($activity["activity_start_datetime"])) $activity_date[0] = ($activity_date[0]>=strtotime($activity["activity_start_datetime"])) ? $activity_date[0] : strtotime($activity["activity_start_datetime"]); if(!empty($activity["activity_end_datetime"])) $activity_date[1] = ($activity_date[1]>=strtotime($activity["activity_end_datetime"])) ? $activity_date[1] : strtotime($activity["activity_end_datetime"]); $activity_date[0] = ($activity_date[0]<=mktime(0, 0, 0, $this->mh, 1, $this->yr)) ? date("Y-n-j G:i:s", mktime(0, 0, 0, $this->mh, 1, $this->yr)) : date("Y-n-j G:i:s", $activity_date[0]); $activity_date[1] = ($activity_date[1]<=mktime(0, 0, 0, $this->mh, $this->daysinmonth, $this->yr)) ? date("Y-n-j G:i:s", mktime(0, 0, 0, $this->mh, $this->daysinmonth, $this->yr)) : date("Y-n-j G:i:s", $activity_date[1]); if(empty($activity["activity_frequency"])) { $activity_date[0] = $activity['activity_start_datetime']; $activity_date[1] = $activity['activity_end_datetime']; } return $activity_date; }//EO calculateDate } aroundme_0_4_0/www/aroundme_0_4_0/class/Shout.class.php 777 0 0 10156 10170715171 16175 0db = $db; $this->date = $date; }//EO Shout // getShout -------------------------------------------------------------------- // returns single row from DB // tom calthrop - 8th Nov 2004 // function getShout() { $query = " SELECT s.shoutbox_id, s.shoutbox_body, s.shoutbox_create_datetime, s.user_id, p.profile_nic FROM " . $this->db->prefix . "_shoutbox s LEFT JOIN " . $this->db->prefix . "_user_profile p on s.user_id=p.user_id WHERE p.profile_default=1 order by s.shoutbox_create_datetime desc" ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields)) { $temp = $result->fields; $result->Close(); if (isset($temp['shoutbox_id'])) { $temp['shoutbox_create_datetime'] = $this->date->formatDate($temp['shoutbox_create_datetime']); return $temp; } } else { $error_info = "function=getShout class=Shout.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getShout // getShouts -------------------------------------------------------------------- // returns multiple rows from DB // tom calthrop - 8th Nov 2004 // function getShouts() { $query = " SELECT s.shoutbox_body, s.shoutbox_create_datetime, s.user_id, p.profile_nic FROM " . $this->db->prefix . "_shoutbox s LEFT JOIN " . $this->db->prefix . "_user_profile p ON s.user_id=p.user_id WHERE p.profile_default=1 AND " ; if (isset($this->user_id)) { $query .= "s.user_id=" . $this->user_id . " AND "; } $query .= "1=1 "; $query .= "order by s.shoutbox_create_datetime desc"; if (isset($this->limit)) { $result = $this->db->SelectLimit($query, $this->limit); } else { $result = $this->db->Execute($query); } if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['shoutbox_create_datetime'] = $this->date->formatDate($temp1['shoutbox_create_datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getShouts class=Shout.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getShouts // insertShout -------------------------------------------------------------------- // inserts row into DB // tom calthrop - 8th Nov 2004 // function insertShout($data) { $datetime = $this->db->DBTimeStamp(mktime()); $shout_text = htmlspecialchars($data['shout_text']); $query = " INSERT INTO " . $this->db->prefix . "_shoutbox (shoutbox_body, user_id, shoutbox_create_datetime) values ('" . $shout_text . "', " . $this->user_id . ", " . $datetime . ")" ; $result = $this->db->Execute($query); return header("Location: my_shoutbox.php?".SID); exit; }//EO insertShout } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/SocialNetwork.class.php 777 0 0 50461 10170677750 17674 0user_id = $user_id; $this->db = $db; if (isset($node_id)) { $this->node_id = $node_id; } if (isset($max_degree)) { $this->max_degree = $max_degree; } } // getFriends -------------------------------------------------------------------- // get friends of a user (degree=1) // erik sundelof - 8th January 2004 // function getFriends($user_id){ $query = " SELECT r.user_id_friend FROM " . $this->db->prefix . "_user_relation r, " . $this->db->prefix . "_user u WHERE r.user_id=" . $user_id . " AND r.user_id_friend=u.user_id AND r.user_id_friend!=" . $this->user_id . " AND r.relation_type_id=" . $this->relation_type_ids['approved'] . " AND u.status_id=" . $this->status_ids['active'] . " order by r.user_id_friend" ; //echo $query . "
    "; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields["user_id_friend"]; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getFriends class=getSocialNetwork.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getFriends // createNetwork -------------------------------------------------------------------- // erik sundelof - 8th January 2004 // function createNetwork($user_id=null, $degree=0, $path=null){ if (!isset($path)) { $path = array(); } //statistics if (!isset($this->sn_degree_count[$degree])) { $this->sn_degree_count[$degree] = 1; } else { $this->sn_degree_count[$degree] = $this->sn_degree_count[$degree]+1; } if(empty($user_id)){ $user_id = $this->user_id; $path[] = $user_id; $this->tree = array(); } else { $path[] = $user_id; $temp1 = array( "relation" => $path, "user_id" => $user_id, "degree" => $degree); $this->tree[$user_id][] = $temp1; } if($degree<$this->max_degree) { $tmp = $this->getFriends($user_id); if(!empty($tmp)){ foreach($tmp as $key => $user_id_friend){ $this->tree = $this->createNetwork($user_id_friend, ($degree+1), $path); } } return $this->tree; } else { return $this->tree; } }//EO createNetwork // getDegree -------------------------------------------------------------------- // erik sundelof - 8th January 2004 // function getDegree($user_id_friend){ if ($this->user_id != $user_id_friend) { if (isset($this->tree[$user_id_friend])) { usort($this->tree[$user_id_friend], "compare"); return $this->tree[$user_id_friend][0]; } else { return false; } } else { return array("degree" => 0); //me therefore degree = 0 } }//EO getDegree // getDegreePaths -------------------------------------------------------------------- // erik sundelof - 8th January 2004 // function getDegreePaths($user_id_friend){ if (isset($this->tree[$user_id_friend])) { usort($this->tree[$user_id_friend], "compare"); return $this->tree[$user_id_friend]; } else { return false; } }//EO getDegreePaths // updateSnStatistics -------------------------------------------------------------------- // tom calthrop - 8th January 2004 // function updateSnStatistics(){ if (!empty($this->sn_degree_count)) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); foreach($this->sn_degree_count as $key => $i): $query = " UPDATE " . $this->db->prefix . "_sn SET sn_total=" . $i . ", sn_update_datetime=" . $datetime . " WHERE user_id=" . $this->user_id . " AND degree_id=" . $key ; //echo $query; $this->db->Execute($query); endforeach; } }//EO updateSnStatistics // getNewestAcquaintance -------------------------------------------------------------------- // receives social network array and looks through it to get newest date // tom calthrop - 25th April 2004 // function getNewestAcquaintance() { $newestDate = "0000-00-00 00:00:00"; if (isset($this->sn_arr)) { foreach ($this->sn_arr as $key => $r) : if (!empty($r['acquaintance'])) { foreach ($r['acquaintance'] as $key => $i) : if ($newestDate <= $i['user_create_datetime']) { $newestDate = $i['user_create_datetime']; $newest_profile_id = $i['profile_id']; } endforeach; } endforeach; } if (isset($newest_profile_id)) { return $newest_profile_id; } }//EO getNewestAcquaintance // getBlockStatus -------------------------------------------------------------------- // returns true if a user is blocked or not // tom calthrop - 25th April 2004 // function getBlockStatus($user_id_friend) { $query = " SELECT user_id_blocked FROM " . $this->db->prefix . "_user_blocked WHERE user_id_blocker=" . $this->user_id . " and user_id_blocked=" . $user_id_friend ; $result = $this->db->Execute($query); if (isset($result->fields)) { $result->Close(); if (isset($result->fields['user_id_blocked'])) { return true; } } else { $error_info = "function=getBlockStatus class=getSocialNetwork.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getBlockStatus // setBlockUser -------------------------------------------------------------------- // sets a user to blocked status // tom calthrop - 25th April 2004 // function setBlockUser($user_id_friend, $block_description) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_user_blocked (user_id_blocker, user_id_blocked, block_description, block_datetime) values ( " . $this->user_id . ", " . $user_id_friend . ", '" . $block_description . "', " . $datetime . " )" ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=blockUser class=getSocialNetwork.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO setBlockUser // unSetBlockUser -------------------------------------------------------------------- // sets a user to blocked status // tom calthrop - 25th April 2004 // function unSetBlockUser($user_id_friend) { $query = " DELETE FROM " . $this->db->prefix . "_user_blocked WHERE user_id_blocker=" . $this->user_id . " and user_id_blocked=" . $user_id_friend ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=unblockUser class=getSocialNetwork.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO unSetBlockUser // insertRelation -------------------------------------------------------------------- // inserts a users relationship to another user // tom calthrop - 19th April 2004 // function insertRelation ($relation_id, $relation_type_id) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); if (!$this->checkRelation($this->user_id, $relation_id)) { $query = "INSERT INTO " . $this->db->prefix . "_user_relation (user_id, user_id_friend, node_id, relation_create_datetime, relation_type_id) VALUES ( '" . $this->user_id . "', '" . $relation_id . "', '" . $this->node_id . "', " . $datetime . ", '" . $relation_type_id . "' )" ; $result = $this->db->Execute($query); if ($result) { if (!$this->checkRelation($relation_id, $this->user_id)) { $query = "INSERT INTO " . $this->db->prefix . "_user_relation (user_id, user_id_friend, node_id, relation_create_datetime, relation_type_id) VALUES ( '" . $relation_id . "', '" . $this->user_id . "', '" . $this->node_id . "', " . $datetime . ", '" . $relation_type_id . "' )" ; $result = $this->db->Execute($query); if ($result) { return true; } } } } }//EO insertRelation // updateRelation -------------------------------------------------------------------- // updates a users relationship to another user // tom calthrop - 19th April 2004 // function updateRelation ($relation_id) { if ($this->checkRelation($this->user_id, $relation_id)) { $query = "UPDATE " . $this->db->prefix . "_user_relation SET relation_type_id=" . $this->relation_type_ids['approved'] . " WHERE user_id=" . $this->user_id . " and user_id_friend=" . $relation_id . " limit 1" ; //echo $query; $result = $this->db->Execute($query); if (isset($result)) { if ($this->checkRelation($relation_id, $this->user_id)) { $query = "UPDATE " . $this->db->prefix . "_user_relation SET relation_type_id=" . $this->relation_type_ids['approved'] . " WHERE user_id=" . $relation_id . " and user_id_friend=" . $this->user_id . " limit 1" ; //echo $query; $result = $this->db->Execute($query); if (isset($result)) { $_SESSION['s_social_network'] = $this->createNetwork(); $this->updateSnStatistics(); return true; } } } } }//EO updateRelation // checkRelation -------------------------------------------------------------------- // checks userA has a relationship with userB // tom calthrop - 19th April 2004 // function checkRelation($user_id, $relation_id) { $query = " SELECT user_id FROM " . $this->db->prefix . "_user_relation where user_id=" . $user_id . " and user_id_friend=" . $relation_id ; $result = $this->db->Execute($query); if (isset($result->fields['user_id']) && $result->fields['user_id'] > 0) { return true; } }//EO checkRelation // getBlockedUsers -------------------------------------------------------------------- // returns all blocked users to a user // tom calthrop - 24th April 2004 // function getBlockedUsers() { $query = " SELECT b.user_id_blocked, b.block_datetime, b.block_description, b.profile_id_blocked, p.profile_nic FROM " . $this->db->prefix . "_user_blocked b LEFT JOIN " . $this->db->prefix . "_user_profile p ON b.user_id_blocked=p.user_id WHERE b.user_id_blocker=" . $this->user_id . " AND p.profile_default=1 order by p.profile_nic" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['block_datetime'] = $this->date->formatDate($temp1['block_datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } }//EO getBlockedUsers // sendInvite -------------------------------------------------------------------- // send an invite from sn_invite.php // tom calthrop - 24th April 2004 // function sendInvite($data) { //prepare data if (empty($data['to'])) { $GLOBALS['am_error_log'][] = array(2, null, null); } if (empty($GLOBALS['am_error_log'])) { $data['to'] = trim($data['to']); $emails = preg_split("/[\s,]+/", $data['to']); $this->total_emails_sent = 0; //check each email foreach($emails as $key => $i): if(!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,8}$/', $i)) { $GLOBALS['am_error_log'][] = array(3, null, $i); //email invalid } else { //check to see if we have already invited them $query = " SELECT DISTINCT user_id FROM " . $this->db->prefix . "_user_invited WHERE invited_email='" . $i ."' AND user_id=" . $this->me['user_id'] ; $result = $this->db->Execute($query); if(!isset($result->fields['user_id'])) { //check to see if user in User table $query = " SELECT user_id FROM " . $this->db->prefix . "_user WHERE user_email='" . $i . "'" ; $result = $this->db->Execute($query); if (isset($result->fields['user_id'])) { //check I am not daft enough to invite myself if($result->fields['user_id'] != $this->me['user_id']) { //get the degree and see if they are in my social network already $degree_path = $this->getDegree($result->fields['user_id']); if (!empty($degree_path)) { $GLOBALS['am_error_log'][] = array(32, 1, $i); //already in social network } elseif($this->checkUserBlocked($result->fields['user_id'])) {//we check that the user has not blocked me //send internal instant message to user $body_file_im_txt = str_replace("NAME", $this->me['firstname'], $this->body_im_file); // add a br_relation record with a level of "approval_pending" if ($this->insertRelation($result->fields['user_id'], $this->relation_type_ids['approval_pending'])) { //send IM $this->im->sendMessage($result->fields['user_id'], $this->txt_subject_im_invite, $body_file_im_txt, 1); $this->total_emails_sent++; } } } } else { //send email $body_file_mail_txt = str_replace("USERMESSAGE", $data['message'], $this->body_mail_file); $body_file_mail_txt = str_replace("NAME", $this->me['firstname'], $body_file_mail_txt); $url = "http://" . $_SERVER['HTTP_HOST']; if (dirname ($_SERVER['PHP_SELF']) != "/") { $url .= dirname ($_SERVER['PHP_SELF']); //trim off last directory as we use the www directory for register.php $last_dir_pos = strrpos($url, "/"); $url = substr($url, 0, $last_dir_pos); $url .= "/"; } $url .= "register.php?invitee=" . $this->me['user_id'] . "&email=" . htmlspecialchars($i) . "&language_id=" . $this->me['language_id']; $body_file_mail_txt = str_replace("URL", $url, $body_file_mail_txt); $body_file_mail_txt = stripslashes($body_file_mail_txt); //send email to email address $this->mail->Subject = $data['subject']; $this->mail->Body = $body_file_mail_txt; $this->mail->ClearAddresses(); $this->mail->AddAddress($i, ''); if(!$this->mail->Send()) { $GLOBALS['am_error_log'][] = array(18, null, $this->mail->ErrorInfo); } else { $this->total_emails_sent++; } //insert record into user invitee table. $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_user_invited ( invited_email, user_id, invite_create_datetime ) VALUES ( '" . $i ."', " . $this->me['user_id'] . ", " . $datetime . ")" ; $result = $this->db->Execute($query); } } else { $GLOBALS['am_error_log'][] = array(31, 1, $i); //email invalid } } endforeach; } }//EO sendInvite // getPendingRelations -------------------------------------------------------------------- // get pending relations (and delete old ones) // tom calthrop - 24th April 2004 // function getPendingRelations () { //delete anything older than 3 months ---------------------------- $datetime = date(mktime()-(86400*21)); $datetime = $this->db->DBDate($datetime); $query = " DELETE FROM " . $this->db->prefix . "_user_relation where user_id=" . $this->user_id . " and relation_type_id=" . $this->relation_type_ids['approval_pending'] . " and relation_create_datetime < " . $datetime ; $result = $this->db->Execute($query); $query = " DELETE FROM " . $this->db->prefix . "_user_relation where user_id_friend=" . $this->user_id . " and relation_type_id=" . $this->relation_type_ids['approval_pending'] . " and relation_create_datetime < " . $datetime ; $result = $this->db->Execute($query); $query = " DELETE FROM " . $this->db->prefix . "_user_invited where user_id=" . $this->user_id . " and invite_create_datetime < " . $datetime ; $result = $this->db->Execute($query); //Get Pending relations ------------------------------------------- $temp = array(); //get relations pending from users already registered. $query = " SELECT r.relation_create_datetime as datetime, u.user_email as email FROM " . $this->db->prefix . "_user_relation r LEFT JOIN " . $this->db->prefix . "_user u ON r.user_id=u.user_id where r.user_id=" . $this->user_id . " and r.relation_type_id=" . $this->relation_type_ids['approval_pending'] . " order by r.relation_create_datetime" ; $result = $this->db->Execute($query); if (isset($result->fields)) { while (!$result->EOF) { $temp1 = $result->fields; $temp1['datetime'] = $this->date->formatDate($temp1['datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); } //get the pending requests for emails for used not in DB $query = " SELECT DISTINCT invited_email as email, invite_create_datetime as datetime FROM " . $this->db->prefix . "_user_invited ui where ui.user_id=" . $this->user_id . " order by ui.invite_create_datetime" ; $result = $this->db->Execute($query); if (isset($result->fields)) { while (!$result->EOF) { $temp1 = $result->fields; $temp1['datetime'] = $this->date->formatDate($temp1['datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); } return $temp; }//EO getPendingRelations // getSocialNetworkSummary -------------------------------------------------------------------- // tom calthrop - 4th January 2005 // function getSocialNetworkSummary () { $query = " SELECT profile_id, degree_id, sn_total FROM " . $this->db->prefix . "_sn WHERE user_id=" . $this->user_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getSocialNetworkSummary class=SocialNetwork.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getSocialNetworkSummary // checkUserBlocked -------------------------------------------------------------------- //check if the $to_user_id has blocked me //tom calthrop - 21st April 2004 function checkUserBlocked($to_user_id) { if ($to_user_id == $this->user_id) { return true; } else { $query = " SELECT user_id_blocker FROM " . $this->db->prefix . "_user_blocked WHERE user_id_blocker = " . $to_user_id . " and user_id_blocked = " . $this->user_id ; $result = $this->db->Execute($query); if (empty($result->fields['user_id_blocker'])) { return true; } } }//EO checkUserBlocked } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Statistic.class.php 777 0 0 15260 10170701225 17036 0db = $db; $this->section_id = $section_id; $this->date = $date; } // EO constructor // getStatistics --------------------------------------------------------------- // returns statistics // tom calthrop - 20th December 2004 // function getStatistics() { $query = " SELECT s.statistic_type_id, s.total FROM " . $this->db->prefix . "_statistic s WHERE " ; if (isset($this->section_id)) { $query .= "s.section_id=" . $this->section_id . " AND "; } if (isset($this->section_item_id)) { $query .= "s.section_item_id=" . $this->section_item_id . " AND "; } if (isset($this->user_id)) { $query .= "s.user_id=" . $this->user_id . " AND "; } if (isset($this->no_user_id)) { $query .= "s.user_id is null AND "; } $query .= "1=1 "; $query .= "order by s.statistic_type_id"; //echo $query; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getStatistics class=Statistic.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getStatistics // getNodeStatistics --------------------------------------------------------------- // returns node statistics // tom calthrop - 11th April 2004 // function getNodeStatistics() { $query = " SELECT count(user_id) as total_users FROM " . $this->db->prefix . "_user WHERE status_id=" . $this->user_status['active'] ; $result = $this->db->Execute($query); if ($result->fields['total_users']) { $temp['total_users'] = $result->fields['total_users']; $result->Close(); } //total groups $query = " SELECT count(group_id) as total_groups FROM " . $this->db->prefix . "_group" ; $result = $this->db->Execute($query); if (isset($result->fields['total_groups'])) { $temp['total_groups'] = $result->fields['total_groups']; $result->Close(); } //total online now $timestamp = $this->db->UserTimeStamp(mktime()-(60*15), "YmdHis"); //last 15 minutes $query = " SELECT count(user_id) as total_online_users FROM " . $this->db->prefix . "_user WHERE active_time > " . $timestamp ; $result = $this->db->Execute($query); if ($result->fields['total_online_users']) { $temp['total_online_users'] = $result->fields['total_online_users']; $result->Close(); } $datetime = date("Y-m-d H:i:s"); $datetime = $this->date->formatDate($datetime); $temp['today'] = $datetime; return $temp; }//EO getNodeStatistics // setStatistic -------------------------------------------------------------------- // set a statistic for the group // tom calthrop - 21st Feb 2004 // function setStatistic ($total = null) { if (empty($total)) { $total = 0; } $query = " DELETE FROM " . $this->db->prefix . "_statistic WHERE statistic_type_id=" . $this->statistic_type_id . " AND section_id=" . $this->section_id . " AND section_item_id=" . $this->section_item_id ; if (isset($this->user_id)) { $query .= " AND user_id=" . $this->user_id; } $result = $this->db->Execute($query); if (empty($this->user_id)) { $this->user_id = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_statistic ( section_id, section_item_id, statistic_type_id, total, user_id ) values ( " . $this->section_id . ", " . $this->section_item_id . ", " . $this->statistic_type_id . ", " . $total . ", " . $this->user_id . ")" ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=setStatistic class=Statistic.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO setStatistic // getStatistic --------------------------------------------------------------- // returns a statistic // tom calthrop - 20th December 2004 // function getStatistic() { $query = " SELECT s.total FROM " . $this->db->prefix . "_statistic s WHERE " ; if (isset($this->section_id)) { $query .= "s.section_id=" . $this->section_id . " AND "; } if (isset($this->statistic_type_id)) { $query .= "s.statistic_type_id=" . $this->statistic_type_id . " AND "; } if (isset($this->section_item_id)) { $query .= "s.section_item_id=" . $this->section_item_id . " AND "; } if (isset($this->user_id)) { $query .= "s.user_id=" . $this->user_id . " AND "; } if (isset($this->no_user_id)) { $query .= "s.user_id=null AND "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields['total'])) { $result->Close(); return $result->fields['total']; } else { $error_info = "function=getStatistic class=Statistic.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getStatistic } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Template.class.php 777 0 0 4470 10131727632 16632 0path = $path; } /** * Set the path to the template files. * * @param string $path path to template files * * @return void */ function set_path($path) { $this->path = $path; } /** * Set a template variable. * * @param string $name name of the variable to set * @param mixed $value the value of the variable * * @return void */ function set($name, $value) { $this->vars[$name] = $value; } /** * Open, parse, and return the template file. * * @param string string the template file name * * @return string */ function fetch($file) { extract($this->vars); // Extract the vars to local namespace ob_start(); // Start output buffering include($this->path . $file); // Include the file $contents = ob_get_contents(); // Get the contents of the buffer ob_end_clean(); // End buffering and discard return $contents; // Return the contents } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/User.class.php 777 0 0 77046 10170677733 16037 0db = $db; $this->date = $date; }//EO User // checkLogin -------------------------------------------------------------------- // checks if the person can log in // tom calthrop - 19th April 2004 // function checkLogin($email, $password){ if(empty($email)) $GLOBALS['am_error_log'][] = array(2, null, null); else{ $query = " SELECT user_id FROM " . $this->db->prefix . "_user WHERE user_email='" . $email . "'" ; $result = $this->db->Execute($query); if(empty($result->fields['user_id'])) $GLOBALS['am_error_log'][] = array(24, null, null); } // Check whether the password is in the database and correct if(empty($password)) $GLOBALS['am_error_log'][] = array(25, null, null); else{ if(empty($GLOBALS['am_error_log'])) { $query = " SELECT user_id, status_id FROM " . $this->db->prefix . "_user WHERE user_email='" . $email . "' AND user_password='" . MD5($password) . "'" ; $result = $this->db->Execute($query); if(empty($result->fields['user_id'])) { $GLOBALS['am_error_log'][] = array(19, null, null); } if($result->fields['status_id'] != $this->status_ids['active']) { $GLOBALS['am_error_log'][] = array(26, null, null); } } } }//EO checkLogin // loginUser -------------------------------------------------------------------- // logs in the user // tom calthrop - 19th April 2004 // function loginUser($email, $password, $node_id) { $query = "SELECT u.user_id, u.role_id, u.user_email, u.user_firstname, u.user_surname, u.user_homepage, t.template_title, u.language_id, MD5(UNIX_TIMESTAMP() + user_id + RAND(UNIX_TIMESTAMP())) AS session_id FROM " . $this->db->prefix . "_user u, " . $this->db->prefix . "_template t WHERE u.template_id = t.template_id AND user_email='" . $email . "' AND user_password='" . MD5($password) . "'" ; $result = $this->db->Execute($query); if (isset($result->fields['user_id'])){ // Starts a session if (empty($_SESSION)) { session_start(); } $this->user_id = $result->fields['user_id']; // Sets the sessionvariables $_SESSION['s_user_id'] = $result->fields['user_id']; $_SESSION['s_email'] = $result->fields['user_email']; $_SESSION['s_firstname'] = $result->fields['user_firstname']; $_SESSION['s_surname'] = $result->fields['user_surname']; $_SESSION['s_role_id'] = $result->fields['role_id']; $_SESSION['s_md5'] = md5($result->fields['session_id']); $_SESSION['s_language_id'] = $result->fields['language_id']; $_SESSION['s_homepage'] = $result->fields['user_homepage']; $_SESSION['s_user_template'] = $result->fields['template_title']; $_SESSION['s_breadcrumb'] = array(); $_SESSION['s_language_ids'] = $this->getLanguages(); $timestamp = $this->db->DBTimeStamp(mktime()); $query = "INSERT INTO " . $this->db->prefix . "_user_session ( session_md5, session_firstused, session_lastused, session_ip, user_id ) values ( '" . $_SESSION['s_md5'] . "', " . $timestamp . ", " . $timestamp . ", '" . $_SERVER['REMOTE_ADDR'] . "', '" . $this->user_id . "' )" ; $this->db->Execute($query); if (isset($result)) { //get friends and aquintances $this->sn->user_id = $result->fields['user_id']; $_SESSION['s_social_network'] = $this->sn->createNetwork(); $this->sn->updateSnStatistics(); //set total logins statistic $this->statistic->section_item_id = $this->user_id; $this->statistic->statistic_type_id = $this->total_login_stat_id; $total_logins = $this->statistic->getStatistic(); if (empty($total_logins)) { $total_logins = 0; } $total_logins++; $this->statistic->setStatistic($total_logins); //set locale if (isset($result->fields['language_id'])) { $this->setLocale(); } return header("Location: " . $this->aroundme_dir . $result->fields['user_homepage']."?".SID); exit; } else { $GLOBALS['am_error_log'][] = array(1, 1, $this->db->ErrorMsg()); } } else { $GLOBALS['am_error_log'][] = array(19, null, null); } }//EO loginUser // setLocale -------------------------------------------------------------------- // setup local language for date setting etc // tom calthrop - 19th April 2004 // function setLocale($language_id = null) { if ($language_id == "2") { //Albanian setlocale(LC_ALL,"alb"); } elseif ($language_id == "3") { //Serbian setlocale(LC_ALL,"sr"); } else { //We default to English setlocale(LC_ALL,"eng"); } } function logoffUser () { if (!isset($_SESSION)) { session_start(); } $_SESSION = array(); session_destroy(); }//EO setLocale // authUser -------------------------------------------------------------------- // check that the user is authorised for entry into system // tom calthrop - 19th April 2004 // function authUser () { session_start(); // Check for a session-variable containing the session-id, if none go to login page if(empty($_SESSION['s_md5'])) { header("Location: index.php?" . SID); exit; } // Authenticate user $query = " SELECT session_md5 FROM " . $this->db->prefix . "_user_session WHERE user_id = " . $_SESSION['s_user_id'] . " order by session_id desc limit 1"; $result = $this->db->Execute($query); // Checks if the session-id in the database and in the session-variables agree if($result->fields['session_md5'] != $_SESSION['s_md5']) { $this->logoffUser(); header("Location: index.php?" . SID); exit; } // Check if user is locked $query = " SELECT status_id FROM " . $this->db->prefix . "_user WHERE user_id = " . $_SESSION['s_user_id'] ; $result = $this->db->Execute($query); // If user is not active... if($result->fields['status_id'] != $this->status_ids['active']) { header("Location: index.php?" . SID); exit; } // Setting the user to online $timestamp = $this->db->DBTimeStamp(mktime()); $query = " UPDATE " . $this->db->prefix . "_user_session SET session_lastused=" . $timestamp . " WHERE session_md5='". $_SESSION['s_md5'] . "'" ; $result = $this->db->Execute($query); $query = " UPDATE " . $this->db->prefix . "_user SET active_time=" . $timestamp . " WHERE user_id=". $_SESSION['s_user_id'] ; $result = $this->db->Execute($query); // Logging out people who have not been active for 12 hours - they wil be directed // to the login-page as their session-id will not match the database session-id $logout_timestamp = $timestamp-(720*60); $query = " SELECT user_id FROM " . $this->db->prefix . "_user WHERE " . $logout_timestamp . " > active_time" ; $result = $this->db->Execute($query); // Logout if not active for 720 minutes // Going through the list and changing the sessions-ids, // which forces "really" inactive users to log on again.... if (isset($result->fields)) { while (!$result->EOF) { $user_id = $result->fields['user_id']; $query = " UPDATE " . $this->db->prefix . "_user_session SET session_md5 is null WHERE user_id=" . $user_id ; $this->db->Execute($query); $result->MoveNext(); } } }//EO authUser // getStatus -------------------------------------------------------------------- // gets the current status of the user // tom calthrop - 19th April 2004 // function getStatus($active_time = null){ $status = 4; //offline $time[1] = 0; //online $time[2] = 15; //idle $time[3] = 20; // sleeping $time[4] = 30; //offline foreach($time as $key => $t): $timedif = $this->db->UserTimeStamp(mktime()-(60*$t), "YmdHis"); if($active_time <= $timedif) { $status = $key; } endforeach; return $status; }//EO getStatus // getStatus -------------------------------------------------------------------- // change the user's status... NOT YET FULLY WORKING! // tom calthrop - 19th April 2004 // function setStatus($status){ $time[2] = 15; $time[4] = 20; $time[6] = 30; $query = " UPDATE " . $this->db->prefix . "_user SET active_time=UNIX_TIMESTAMP()-60*" . $time[$status] . " WHERE user_id=". $_SESSION["s_user_id"] ; $this->db->Execute($query); }//EO getStatus // getUser -------------------------------------------------------------------- // retrieves single DB row for user // tom calthrop - 19th April 2004 // function getUser($user_id = null) { if (empty($user_id) && isset($this->user_id)) { $user_id = $this->user_id; } $query = " SELECT u.user_id, u.user_hometown, u.role_id, u.user_create_datetime, u.language_id, u.template_id, u.user_firstname, u.user_surname, u.user_email, u.user_dob, u.user_gender, u.user_number, u.active_time, u.status_id, u.user_file_allocation, u.user_homepage FROM " . $this->db->prefix . "_user u WHERE " ; if (isset($user_id)) { $query .= "u.user_id=" . $user_id . " and "; } if (isset($this->user_email)) { $query .= "u.user_email='" . $this->user_email . "' and "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields['user_id'])) { $temp = $result->fields; $temp['display_user_create_datetime'] = $this->date->formatDate($temp['user_create_datetime']); $this->user_id = $temp['user_id']; $result->Close(); return $temp; } else { header("Location: sn_network.php?" . SID); exit; } }//EO getUser // emailVerification -------------------------------------------------------------------- // sends user an email with the password // tom calthrop - 19th April 2004 // function emailVerification($password, $email, $firstname, $language_id, $txt_template){ //pick up the language file $body_file_txt = readTxtFile($this->aroundme_dir . "language/" . $language_id . "/" . $this->language_dir . "/texts/" . $txt_template); $body_file_txt = str_replace("\\\"", "\"", $body_file_txt); $body_file_txt = str_replace("USERNAME", $firstname, $body_file_txt); $body_file_txt = str_replace("EMAIL", $email, $body_file_txt); $body_file_txt = str_replace("PASSWORD", $password, $body_file_txt); //create URL $url = "http://" . $_SERVER['HTTP_HOST']; if (dirname ($_SERVER['PHP_SELF']) != "/") { $url .= dirname ($_SERVER['PHP_SELF']); //if the aroundme directory is not barnraiser/aroundme..." then we need // to create a url for the upper directory, hence we trim off the last //part of the url //aroundme is not barn... if the node_register_user form is completed and not the // standard registration form if (empty($this->aroundme_dir)) { $last_dir_pos = strrpos($url, "/"); $url = substr($url, 0, $last_dir_pos); } $url .= "/"; } $url .= "setup.php?em=" . $email . "&language_id=" . $language_id; if (isset($user->invitee_id)) { $url = $url . "invitee=" . $this->user_id; } $body_file_txt = str_replace("URL", $url, $body_file_txt); //send email to barnraiser $this->mail->Body = $body_file_txt; $this->mail->AddAddress($email, $firstname); if(!$this->mail->Send()) { $error_info = "function=emailVerification class=User.class.php -- Mailer Error: -- " . $this->mail->ErrorInfo; $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO emailVerification // getLanguages -------------------------------------------------------------------- // get the languages that the user can read // tom calthrop - 18th Nov 2004 // function getLanguages() { $query = " SELECT language_id FROM " . $this->db->prefix . "_user_language WHERE user_id=" . $this->user_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { array_push($temp, $result->fields['language_id']); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getLanguages class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getLanguages // getProfile -------------------------------------------------------------------- // gets the user profile // tom calthrop - 19th December 2004 // function getProfile($profile_id = null) { if (empty($profile_id) && isset($this->profile_id)) { $profile_id = $this->profile_id; } $query = " SELECT p.profile_id, p.profile_name, p.profile_summary, p.profile_nic, p.profile_msn_account, p.profile_yahoo_account, p.profile_icq_account, p.file_id, p.profile_skype_account, p.profile_hometown, p.user_id, p.profile_create_datetime, p.profile_mobile_phone, p.profile_default, u.active_time, p.profile_gender, p.profile_allow_comments, p.profile_allow_msg FROM " . $this->db->prefix . "_user_profile p, " . $this->db->prefix . "_user u WHERE p.user_id=u.user_id AND " ; if (isset($profile_id)) { $query .= "p.profile_id=" . $profile_id . " AND "; } if (empty($profile_id)) { $query .= " p.profile_default=1 AND p.user_id=" . $this->user_id . " AND " ; } $query .= "1=1"; //echo $query; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $temp['display_profile_create_datetime'] = $this->date->formatDate($temp['profile_create_datetime'], 1); //if the user is me we set to "online", else we find the status if (isset($_SESSION['s_user_id']) && $_SESSION['s_user_id'] == $temp['user_id']) { $temp['online_status'] = 1; } else { $temp['online_status'] = $this->getStatus($temp['user_id']); } $result->Close(); return $temp; } else { $error_info = "function=getProfile class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getProfile // getTemplates -------------------------------------------------------------------- // gets the available templates // tom calthrop - 17th April 2004 // function getTemplates() { $query = " SELECT t.template_id, t.template_title FROM " . $this->db->prefix . "_template t order by t.template_title" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { array_push($temp, $result->fields); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getTemplates class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getTemplates // getTemplate -------------------------------------------------------------------- // gets the available templates // tom calthrop - 17th April 2004 // function getTemplate($template_id) { $query = " SELECT t.template_title FROM " . $this->db->prefix . "_template t WHERE t.template_id =" . $template_id ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $result->Close(); return $temp; } else { $error_info = "function=getTemplate class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getTemplate // deleteLanguages -------------------------------------------------------------------- // deletes languages that a user can read // tom calthrop - 18th Nov 2004 // function deleteLanguages() { $query = " DELETE FROM " . $this->db->prefix . "_user_language WHERE user_id=" . $this->user_id ; $result = $this->db->Execute($query); if (isset($result)) { return true; } else { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } }//EO deleteLanguages // getProfiles -------------------------------------------------------------------- // gets the available profile // tom calthrop - 17th April 2004 // function getProfiles() { $query = " SELECT p.profile_id, p.profile_name, p.profile_nic, p.profile_default, p.file_id, p.profile_create_datetime, p.profile_hometown, p.user_id, p.profile_allow_msg, u.active_time FROM " . $this->db->prefix . "_user_profile p, " . $this->db->prefix . "_user u WHERE p.user_id=u.user_id AND " ; if (isset($this->user_ids)) { $user_ids = ""; foreach($this->user_ids as $key => $i): $user_ids .= $i; if (count($this->user_ids) > $key+1) { $user_ids .=","; } endforeach; $query .="p.user_id in (" . $user_ids . ") AND p.profile_default=1 AND "; } else { $query .= "p.user_id=" . $this->user_id . " AND "; } $query .= "1=1 "; if (isset($this->orderby)) { $query .= "order by " . $this->orderby; } else { $query .= "order by p.profile_name"; } //echo $query; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; if (isset($this->file)) { if (isset($temp1['file_id'])) { $this->file->file_id = $temp1['file_id']; $temp1['image'] = $this->file->getFileRecord(); } else { $temp1['image']['file_title'] = ""; $temp1['image']['file'] = $this->file->noimage; } } $temp1['profile_create_datetime'] = $this->date->formatDate($temp1['profile_create_datetime'], 1); //if the user is me we set to "online", else we find the status if (isset($_SESSION['s_user_id']) && $_SESSION['s_user_id'] == $temp1['user_id']) { $temp1['online_status'] = 1; } else { $temp1['online_status'] = $this->getStatus($temp1['user_id']); } array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getProfiles class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getProfiles // updateUser -------------------------------------------------------------------- // update non administration columns in user // tom calthrop - 19th December 2004 // function updateUser($data) { if(empty($data['user_hometown'])) { $GLOBALS['am_error_log'][] = array(10, null, null); } if (empty($data['language_ids'])) { $GLOBALS['am_error_log'][] = array(28, null, null); } if(empty($data['user_firstname'])) { $GLOBALS['am_error_log'][] = array(5, null, null); } // Check the password if(!empty($data['user_password1']) || !empty($data['user_password2'])) { if(empty($data['user_password1']) != empty($data['user_password2'])) { $GLOBALS['am_error_log'][] = array(15, null, null); } if(strlen($data['user_password1']) < 5) { $GLOBALS['am_error_log'][] = array(16, null, null); } } if (empty($GLOBALS['am_error_log'])) { $data['user_dob'] = $this->db->DBDate($data['user_dob']); $query = " UPDATE " . $this->db->prefix . "_user SET user_firstname = '" . $data['user_firstname'] . "', user_surname = '" . $data['user_surname'] . "', language_id = " . $data['language_id'] . ", template_id = " . $data['template_id'] . ", user_hometown = '" . $data['user_hometown'] . "', user_dob = " . $data['user_dob'] . ", user_homepage='" . $data['user_homepage'] . "', user_gender = '" . $data['user_gender'] . "' " ; if (!empty($data['user_password1'])) { $query .= ", user_password = '" . md5($data['user_password1']) . "'"; } $query .= " WHERE user_id=" . $this->user_id ; $_SESSION['s_language_id'] = $data['language_id']; $result = $this->db->Execute($query); if (empty($result)) { $GLOBALS['am_error_log'][] = array(1, 1, $query . "-" . $this->db->ErrorMsg()); } } } //EO updateUser; // insertLanguages -------------------------------------------------------------------- // inserts languages that a user can read // tom calthrop - 18th Nov 2004 // function insertLanguages($in_arr) { $rownums = count ($in_arr); for ($i=0; $i < $rownums; $i++) { $query = " INSERT INTO " . $this->db->prefix . "_user_language (user_id, language_id) VALUES ( " . $this->user_id . ", " . $in_arr[$i] . ")" ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=insertLanguages class=UserAdmin.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } }//EO insertLanguages // createPassword -------------------------------------------------------------------- // creates a password // tom calthrop - 19th April 2004 // function createPassword(){ // creates a password $totallength = 8; $salt = "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789"; srand((double)microtime()*1000000); $password = ""; for ($i = 0; $i < $totallength; $i++) { $password .= substr ($salt, rand() % strlen($salt), 1); } return $password; }//EO createPassword // insertProfile -------------------------------------------------------------------- // inserts a profile // tom calthrop - 27th December 2004 // function insertProfile($data) { if (empty($data['profile_nic'])) { $GLOBALS['am_error_log'][] = array(7, null, null); } if (empty($data['profile_hometown'])) { $GLOBALS['am_error_log'][] = array(10, null, null); } if (empty($GLOBALS['am_error_log'])) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); if (empty($data['profile_default'])) { $data['profile_default'] = "null"; } if (empty($data['file_id'])) { $data['file_id'] = "null"; } if (isset($data['profile_allow_msg'])) { $data['profile_allow_msg'] = 1; } else { $data['profile_allow_msg'] = "null"; } if (empty($data['profile_gender']) || (isset($data['profile_gender']) && $data['profile_gender']<=0)) { $data['profile_gender'] = "null"; } if (empty($data['profile_allow_comments'])) { $data['profile_allow_comments'] = "null"; } if (empty($data['profile_allow_msg'])) { $data['profile_allow_msg'] = "null"; } $query = " INSERT INTO " . $this->db->prefix . "_user_profile ( user_id, profile_default, profile_name, profile_summary, profile_nic, profile_create_datetime, profile_msn_account, profile_yahoo_account, profile_icq_account, profile_mobile_phone, profile_skype_account, profile_hometown, profile_gender, profile_allow_comments, profile_allow_msg, file_id ) values ( " . $this->user_id . ", " . $data['profile_default'] . ", '" . $data['profile_name'] . "', '" . $data['profile_summary'] . "', '" . $data['profile_nic'] . "', " . $datetime . ", '" . $data['profile_msn_account'] . "', '" . $data['profile_yahoo_account'] . "', '" . $data['profile_icq_account'] . "', '" . $data['profile_mobile_phone'] . "', '" . $data['profile_skype_account'] . "', '" . $data['profile_hometown'] . "', '" . $data['profile_gender'] . "', '" . $data['profile_allow_comments'] . "', '" . $data['profile_allow_msg'] . "', " . $data['file_id'] . ")" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $query = " SELECT profile_id FROM " . $this->db->prefix . "_user_profile where user_id=" . $this->user_id . " and profile_create_datetime=" . $datetime ; $result = $this->db->SelectLimit($query, 1); if (isset($result->fields['profile_id'])) { $this->profile_id = $result->fields['profile_id']; } else { $error_info = "function=insertProfile class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } else { $error_info = "function=insertProfile class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } }//EO insertProfile // updateProfile -------------------------------------------------------------------- // upates a profile // tom calthrop - 27th December 2004 // function updateProfile($data) { if (empty($data['profile_nic'])) { $GLOBALS['am_error_log'][] = array(7, null, null); } if (empty($data['profile_hometown'])) { $GLOBALS['am_error_log'][] = array(10, null, null); } if (empty($GLOBALS['am_error_log'])) { $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); if (empty($data['file_id'])) { $data['file_id'] = "null"; } if (empty($data['profile_gender']) || (isset($data['profile_gender']) && $data['profile_gender']<=0)) { $data['profile_gender'] = "null"; } if (empty($data['profile_allow_comments'])) { $data['profile_allow_comments'] = "null"; } if (empty($data['profile_allow_msg'])) { $data['profile_allow_msg'] = "null"; } $query = " UPDATE " . $this->db->prefix . "_user_profile SET profile_name='" . $data['profile_name'] . "', profile_summary='" . $data['profile_summary'] . "', profile_nic='" . $data['profile_nic'] . "', profile_msn_account='" . $data['profile_msn_account'] . "', profile_yahoo_account='" . $data['profile_yahoo_account'] . "', profile_icq_account='" . $data['profile_icq_account'] . "', profile_mobile_phone='" . $data['profile_mobile_phone'] . "', profile_skype_account='" . $data['profile_skype_account'] . "', profile_hometown='" . $data['profile_hometown'] . "', profile_gender=" . $data['profile_gender'] . ", profile_allow_comments=" . $data['profile_allow_comments'] . ", profile_allow_msg=" . $data['profile_allow_msg'] . ", file_id=" . $data['file_id'] . " WHERE profile_id=" . $this->profile_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateProfile class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } }//EO updateProfile // deleteProfile -------------------------------------------------------------------- // deletes a profile // tom calthrop - 27th December 2004 // function deleteProfile($profile_id) { $query = " DELETE FROM " . $this->db->prefix . "_user_profile WHERE profile_id=" . $profile_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=deleteProfile class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO deleteProfile // updateDefaultProfile -------------------------------------------------------------------- // updates the DB with the default profile ID // tom calthrop - 22nd December 2004 // function updateDefaultProfile($default_profile_id) { $query = " UPDATE " . $this->db->prefix . "_user_profile SET profile_default=null WHERE user_id=" . $this->user_id ; $result = $this->db->Execute($query); $query = " UPDATE " . $this->db->prefix . "_user_profile SET profile_default=1 WHERE profile_id=" . $default_profile_id ; $result = $this->db->Execute($query); }//EO updateDefaultProfile // getDegreeProfiles -------------------------------------------------------------------- // gets the available profile // tom calthrop - 17th April 2004 // function getDegreeProfiles($degree_id=null) { $query = " SELECT profile_id, degree_id FROM " . $this->db->prefix . "_sn WHERE user_id=" . $this->user_id . " AND " ; if (isset($degree_id)) { $query .= "degree_id=" . $degree_id . " AND "; } $query .= "1=1"; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getDegreeProfiles class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getDegreeProfiles // updateDegreeProfiles -------------------------------------------------------------------- // update profile degree // tom calthrop - 8th January 2005 // function updateDegreeProfiles($data) { if (!empty($data)) { foreach($data as $key => $i): $query = " UPDATE " . $this->db->prefix . "_sn SET profile_id=" . $i . " WHERE degree_id=" . $key . " and user_id=" . $this->user_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateDegreeProfiles class=User.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } endforeach; } } //EO updateDegreeProfiles } aroundme_0_4_0/www/aroundme_0_4_0/class/UserAdmin.class.php 777 0 0 32660 10170677723 17000 0db->prefix . "_user u order by u.user_id"; ; $result = $this->db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['display_user_create_datetime'] = $this->date->formatDate($temp1['user_create_datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $error_info = "function=getAllUsers class=UserAdmin.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO getAllUsers; // updateAdminUser -------------------------------------------------------------------- // update administration columns in user // tom calthrop - 6th December 2004 // function updateAdminUser($data) { if (isset($data['user_file_allocation']) && $data['user_file_allocation'] > 0) { $user_file_allocation = $data['user_file_allocation']; } else { $user_file_allocation = "null"; } $query = " UPDATE " . $this->db->prefix . "_user SET user_number='" . $data['user_number'] . "', role_id=" . $data['role_id'] . ", user_file_allocation=" . $user_file_allocation . ", status_id=" . $data['status_id'] . " WHERE user_id=" . $this->user_id ; $result = $this->db->Execute($query); if (empty($result)) { $error_info = "function=updateAdminUser class=UserAdmin.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } //EO updateAdminUser; // savePassword -------------------------------------------------------------------- // creates a password // tom calthrop - 19th April 2004 // function savePassword($password, $email){ $query = " UPDATE " . $this->db->prefix . "_user SET user_password=md5('" . $password . "') WHERE user_email='" . $email . "'" ; $result = $this->db->Execute($query); }//EO savePassword // newPassword -------------------------------------------------------------------- // creates a new password and saves it // tom calthrop - 19th April 2004 // function newPassword($email){ // Creates a new password $password = $this->createPassword(); // Saves the password $this->savePassword($password, $email); }//EO newPassword // checkRegister -------------------------------------------------------------------- // checks the registration form // tom calthrop - 19th April 2004 // function checkRegister($data){ // Check the email if(empty($data['user_email'])) $GLOBALS['am_error_log'][] = array(2, null, null); else { if(!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,8}$/', $data['user_email'])) { $GLOBALS['am_error_log'][] = array(3, null, $data['user_email']); } $query = " SELECT user_id FROM " . $this->db->prefix . "_user WHERE user_email='" . $data['user_email'] . "'" ; $result = $this->db->Execute($query); if(!empty($result->fields["user_id"])) { $GLOBALS['am_error_log'][] = array(4, null, $data['user_email']); } } // Check the firstname if(empty($data['user_firstname'])) { $GLOBALS['am_error_log'][] = array(5, null, null); } // Check the surname if(empty($data['user_surname'])) { $GLOBALS['am_error_log'][] = array(6, null, null); } // Check the nic if(empty($data['user_nic'])) { $GLOBALS['am_error_log'][] = array(7, null, null); } // Check the gender if(empty($data['user_gender'])) { $GLOBALS['am_error_log'][] = array(8, null, null); } // Check the place of residence if(empty($data['user_hometown'])) { $GLOBALS['am_error_log'][] = array(10, null, null); } // Check the languacreatePassword(); $tmp = md5($password); $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_user SET user_email='" . $data['user_email'] . "', user_firstname='" . $data['user_firstname'] . "', user_password='" . $tmp . "', user_surname='" . $data['user_surname'] . "', user_gender='" . $data['user_gender'] . "', user_hometown='" . $data['user_hometown'] . "', user_dob='" . $data['user_dob'] . "', user_create_datetime=" . $datetime . ", template_id=" . $this->template_id . ", user_file_allocation=" . $this->user_image_allocation . ", user_homepage='" . $this->page_default . "', status_id=" . $this->status_id . ", language_id=" . $data['language_id'] ; $result = $this->db->Execute($query); if (!empty($result)) { $query = " SELECT user_id FROM " . $this->db->prefix . "_user WHERE user_email='" . $data['user_email'] . "'" ; $result = $this->db->Execute($query); if (isset($result->fields)) { $user_id = $result->fields['user_id']; $this->user_id = $user_id; //add readable languages to language table $this->insertLanguages($data['language_ids']); // creates an entry in am_user_session $query = " INSERT INTO " . $this->db->prefix . "_user_session SET user_id=" . $user_id ; $result = $this->db->Execute($query); //insert the default profile $query = " INSERT INTO " . $this->db->prefix . "_user_profile SET user_id=" . $user_id . ", profile_name='" . $this->txt_default_profile_name . "', profile_hometown='" . $this->txt_default_profile_hometown . "', profile_default=1, profile_create_datetime=" . $datetime . ", profile_nic='" . $data['user_nic'] . "'" ; $result = $this->db->Execute($query); $query = " SELECT profile_id FROM " . $this->db->prefix . "_user_profile WHERE user_id=" . $user_id . " AND profile_default=1" ; $result = $this->db->Execute($query); //create social network table entries if (isset($result->fields['profile_id'])) { if (!isset($this->max_degree)) { $this->max_degree = 4; } for ($i = 1; $i <= $this->max_degree; $i++) { $query = " INSERT INTO " . $this->db->prefix . "_sn SET user_id=" . $user_id . ", degree_id=" . $i . ", profile_id=" . $result->fields['profile_id'] . ", sn_update_datetime=" . $datetime ; $this->db->Execute($query); } } // Email verification email $this->emailVerification($password, $data['user_email'], $data['user_firstname'], $data['language_id'], 'registration.txt.php'); } else { $error_info = "function=registerUser class=UserAdmin.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } } else { $error_info = "function=registerUser class=UserAdmin.class.php -- " . $query . " -- " . $this->db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO registerUser // setupUser -------------------------------------------------------------------- // sets up the user from the setup.php page // tom calthrop - 20th December 2004 // function setupUser($data) { //update the user $query = " UPDATE " . $this->db->prefix . "_user set status_id=" . $this->status_id . ", user_password = '" . md5($data['user_password1']) . "' WHERE user_id = " . $data['user_id'] ; $result = $this->db->Execute($query); if (isset($result)) { //send welcome IM to user $body_welcome_txt = str_replace("NAME", $this->user_firstname, $this->body_welcome_txt); $this->im->sendMessage($data['user_id'], $this->subject_im_welcome, $body_welcome_txt); //we check for who invitees $query = " SELECT DISTINCT invitee_user_id FROM " . $this->db->prefix . "_user_invited WHERE invited_email='" . $this->user_email . "'" ; $result = $this->db->Execute($query); if (isset($result->fields)) { //we send an IM to each invitee and add this user to the social network while (!$result->EOF) { $invitee_id = $result->fields['invitee_user_id']; $this->insertRelation($invitee_id, $this->relation_type['approved']); $body_invitee_txt = str_replace("NAME", $this->user_firstname, $this->body_invitee_txt); $this->im->sendMessage($invitee_id, $this->subject_im_joined, $body_invitee_txt); $result->MoveNext(); } $result->Close(); } //we delete those records $query = " DELETE FROM " . $this->db->prefix . "_user_invited WHERE invited_email='" . $this->user_email . "'" ; $result = $this->db->Execute($query); } }//EO userSetup // userSetupInvites -------------------------------------------------------------------- // if invites are allowed from setup.php we send them using this function // tom calthrop - 20th December 2004 // function userSetupInvites($data) { //prepare data $emails = trim($data['to']); $emails = preg_split("/[\s,]+/", $emails); //check each email foreach($emails as $key => $i): //check to see if user in User table $query = " SELECT user_id FROM " . $this->db->prefix . "_user WHERE user_email='" . $i . "'" ; $result = $this->db->Execute($query); if(!empty($result->fields['user_id']) && $result->fields['user_id'] != $this->user_id) { //send internal instant message to user $body_file_im_txt = str_replace("NAME", $this->user_firstname, $this->body_file_im_txt); if($this->sn->checkUserBlocked($result->fields['user_id'])) {//we check that the user has not blocked me //check we do not already have a relation record if (!$this->sn->checkRelation($result->fields['user_id'], $this->relation_type['pending'])) { $this->sn->insertRelation($result->fields['user_id'], $this->relation_type['pending']); $this->im->sendMessage($result->fields['user_id'], $this->subject_im_friendship_invite, $body_file_im_txt, 1); } } } else { //send email $body_file_mail_txt = str_replace("USERMESSAGE", $this->txt_invite, $this->body_file_mail_txt); $body_file_mail_txt = str_replace("NAME", $this->user_firstname, $body_file_mail_txt); $url = "http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . "/register.php?invitee=" . $data['user_id'] . "&email=" . htmlspecialchars($i) . "&language_id=" . $this->user_language_id; $body_file_mail_txt = str_replace("URL", $url, $body_file_mail_txt); $body_file_mail_txt = stripslashes($body_file_mail_txt); $this->mail->Body = $body_file_mail_txt; $this->mail->ClearAddresses(); $this->mail->AddAddress($i, ''); if(!$this->mail->Send()) { $GLOBALS['am_error_log'][] = array(18, null, $this->mail->ErrorInfo); } //insert record into user invitee table. $datetime = date("Y-m-d H:i:s"); $datetime = $this->db->DBDate($datetime); $query = " INSERT INTO " . $this->db->prefix . "_user_invited (invited_email, invitee_user_id, invite_create_datetime) VALUES ( '" . $i ."', " . $data['user_id'] . ", " . $datetime . ")" ; $result = $this->db->Execute($query); } endforeach; }//EO userSetupInvites } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/ 777 0 0 0 10163121544 14050 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/ 777 0 0 0 10163121546 14755 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki.php 777 0 0 77660 10170530633 15610 0 * * @package Text_Wiki * * @version 0.23.1 * * @license LGPL * */ class Text_Wiki { /** * * The default list of rules, in order, to apply to the source text. * * @access public * * @var array * */ var $rules = array( 'Prefilter', 'Delimiter', 'Code', 'Function', 'Html', 'Raw', 'Include', 'Embed', 'Anchor', 'Heading', 'Toc', 'Horiz', 'Break', 'Blockquote', 'List', 'Deflist', 'Table', 'Image', 'Phplookup', 'Center', 'Newline', 'Paragraph', 'Url', 'Freelink', 'Interwiki', 'Wikilink', 'Colortext', 'Strong', 'Bold', 'Emphasis', 'Italic', 'Tt', 'Superscript', 'Revise', 'Tighten', 'Shockwaveflash' ); /** * * The list of rules to not-apply to the source text. * * @access public * * @var array * */ var $disable = array( 'Html', 'Include', 'Embed' ); /** * * Custom configuration for rules at the parsing stage. * * In this array, the key is the parsing rule name, and the value is * an array of key-value configuration pairs corresponding to the $conf * property in the target parsing rule. * * For example: * * * $parseConf = array( * 'Include' => array( * 'base' => '/path/to/scripts/' * ) * ); * * * Note that most default rules do not need any parsing configuration. * * @access public * * @var array * */ var $parseConf = array(); /** * * Custom configuration for rules at the rendering stage. * * Because rendering may be different for each target format, the * first-level element in this array is always a format name (e.g., * 'Xhtml'). * * Within that first level element, the subsequent elements match the * $parseConf format. That is, the sub-key is the rendering rule name, * and the sub-value is an array of key-value configuration pairs * corresponding to the $conf property in the target rendering rule. * * @access public * * @var array * */ var $renderConf = array( 'Docbook' => array(), 'Latex' => array(), 'Pdf' => array(), 'Plain' => array(), 'Rtf' => array(), 'Xhtml' => array() ); /** * * Custom configuration for the output format itself. * * Even though Text_Wiki will render the tokens from parsed text, * the format itself may require some configuration. For example, * RTF needs to know font names and sizes, PDF requires page layout * information, and DocBook needs a section hierarchy. This array * matches the $conf property of the the format-level renderer * (e.g., Text_Wiki_Render_Xhtml). * * In this array, the key is the rendering format name, and the value is * an array of key-value configuration pairs corresponding to the $conf * property in the rendering format rule. * * @access public * * @var array * */ var $formatConf = array( 'Docbook' => array(), 'Latex' => array(), 'Pdf' => array(), 'Plain' => array(), 'Rtf' => array(), 'Xhtml' => array() ); /** * * The delimiter for token numbers of parsed elements in source text. * * @access public * * @var string * */ var $delim = "\xFF"; /** * * The tokens generated by rules as the source text is parsed. * * As Text_Wiki applies rule classes to the source text, it will * replace portions of the text with a delimited token number. This * is the array of those tokens, representing the replaced text and * any options set by the parser for that replaced text. * * The tokens array is sequential; each element is itself a sequential * array where element 0 is the name of the rule that generated the * token, and element 1 is an associative array where the key is an * option name and the value is an option value. * * @access private * * @var array * */ var $tokens = array(); /** * * The source text to which rules will be applied. * * This text will be transformed in-place, which means that it will * change as the rules are applied. * * @access private * * @var string * */ var $source = ''; /** * * Array of rule parsers. * * Text_Wiki creates one instance of every rule that is applied to * the source text; this array holds those instances. The array key * is the rule name, and the array value is an instance of the rule * class. * * @access private * * @var array * */ var $parseObj = array(); /** * * Array of rule renderers. * * Text_Wiki creates one instance of every rule that is applied to * the source text; this array holds those instances. The array key * is the rule name, and the array value is an instance of the rule * class. * * @access private * * @var array * */ var $renderObj = array(); /** * * Array of format renderers. * * @access private * * @var array * */ var $formatObj = array(); /** * * Array of paths to search, in order, for parsing and rendering rules. * * @access private * * @var array * */ var $path = array( 'parse' => array(), 'render' => array() ); /** * * The directory separator character. * * @access private * * @var string * */ var $_dirSep = DIRECTORY_SEPARATOR; /** * * Constructor. * * @access public * * @param array $rules The set of rules to load for this object. * */ function Text_Wiki($rules = null) { if (is_array($rules)) { $this->rules = $rules; } $this->addPath( 'parse', $this->fixPath(dirname(__FILE__)) . 'Wiki/Parse/' ); $this->addPath( 'render', $this->fixPath(dirname(__FILE__)) . 'Wiki/Render/' ); } /** * * Set parser configuration for a specific rule and key. * * @access public * * @param string $rule The parse rule to set config for. * * @param array|string $arg1 The full config array to use for the * parse rule, or a conf key in that array. * * @param string $arg2 The config value for the key. * * @return void * */ function setParseConf($rule, $arg1, $arg2 = null) { $rule = ucwords(strtolower($rule)); if (! isset($this->parseConf[$rule])) { $this->parseConf[$rule] = array(); } // if first arg is an array, use it as the entire // conf array for the rule. otherwise, treat arg1 // as a key and arg2 as a value for the rule conf. if (is_array($arg1)) { $this->parseConf[$rule] = $arg1; } else { $this->parseConf[$rule][$arg1] = $arg2; } } /** * * Get parser configuration for a specific rule and key. * * @access public * * @param string $rule The parse rule to get config for. * * @param string $key A key in the conf array; if null, * returns the entire conf array. * * @return mixed The whole conf array if no key is specified, * or the specific conf key value. * */ function getParseConf($rule, $key = null) { $rule = ucwords(strtolower($rule)); // the rule does not exist if (! isset($this->parseConf[$rule])) { return null; } // no key requested, return the whole array if (is_null($key)) { return $this->parseConf[$rule]; } // does the requested key exist? if (isset($this->parseConf[$rule][$key])) { // yes, return that value return $this->parseConf[$rule][$key]; } else { // no return null; } } /** * * Set renderer configuration for a specific format, rule, and key. * * @access public * * @param string $format The render format to set config for. * * @param string $rule The render rule to set config for in the format. * * @param array|string $arg1 The config array, or the config key * within the render rule. * * @param string $arg2 The config value for the key. * * @return void * */ function setRenderConf($format, $rule, $arg1, $arg2 = null) { $format = ucwords(strtolower($format)); $rule = ucwords(strtolower($rule)); if (! isset($this->renderConf[$format])) { $this->renderConf[$format] = array(); } if (! isset($this->renderConf[$format][$rule])) { $this->renderConf[$format][$rule] = array(); } // if first arg is an array, use it as the entire // conf array for the render rule. otherwise, treat arg1 // as a key and arg2 as a value for the render rule conf. if (is_array($arg1)) { $this->renderConf[$format][$rule] = $arg1; } else { $this->renderConf[$format][$rule][$arg1] = $arg2; } } /** * * Get renderer configuration for a specific format, rule, and key. * * @access public * * @param string $format The render format to get config for. * * @param string $rule The render format rule to get config for. * * @param string $key A key in the conf array; if null, * returns the entire conf array. * * @return mixed The whole conf array if no key is specified, * or the specific conf key value. * */ function getRenderConf($format, $rule, $key = null) { $format = ucwords(strtolower($format)); $rule = ucwords(strtolower($rule)); if (! isset($this->renderConf[$format]) || ! isset($this->renderConf[$format][$rule])) { return null; } // no key requested, return the whole array if (is_null($key)) { return $this->renderConf[$format][$rule]; } // does the requested key exist? if (isset($this->renderConf[$format][$rule][$key])) { // yes, return that value return $this->renderConf[$format][$rule][$key]; } else { // no return null; } } /** * * Set format configuration for a specific rule and key. * * @access public * * @param string $format The format to set config for. * * @param string $key The config key within the format. * * @param string $val The config value for the key. * * @return void * */ function setFormatConf($format, $arg1, $arg2 = null) { if (! is_array($this->formatConf[$format])) { $this->formatConf[$format] = array(); } // if first arg is an array, use it as the entire // conf array for the format. otherwise, treat arg1 // as a key and arg2 as a value for the format conf. if (is_array($arg1)) { $this->formatConf[$format] = $arg1; } else { $this->formatConf[$format][$arg1] = $arg2; } } /** * * Get configuration for a specific format and key. * * @access public * * @param string $format The format to get config for. * * @param mixed $key A key in the conf array; if null, * returns the entire conf array. * * @return mixed The whole conf array if no key is specified, * or the specific conf key value. * */ function getFormatConf($format, $key = null) { // the format does not exist if (! isset($this->formatConf[$format])) { return null; } // no key requested, return the whole array if (is_null($key)) { return $this->formatConf[$format]; } // does the requested key exist? if (isset($this->formatConf[$format][$key])) { // yes, return that value return $this->formatConf[$format][$key]; } else { // no return null; } } /** * * Inserts a rule into to the rule set. * * @access public * * @param string $name The name of the rule. Should be different from * all other keys in the rule set. * * @param string $tgt The rule after which to insert this new rule. By * default (null) the rule is inserted at the end; if set to '', inserts * at the beginning. * * @return void * */ function insertRule($name, $tgt = null) { $name = ucwords(strtolower($name)); if (! is_null($tgt)) { $tgt = ucwords(strtolower($tgt)); } // does the rule name to be inserted already exist? if (in_array($name, $this->rules)) { // yes, return return null; } // the target name is not null, and not '', but does not exist // in the list of rules. this means we're trying to insert after // a target key, but the target key isn't there. if (! is_null($tgt) && $tgt != '' && ! in_array($tgt, $this->rules)) { return false; } // if $tgt is null, insert at the end. We know this is at the // end (instead of resetting an existing rule) becuase we exited // at the top of this method if the rule was already in place. if (is_null($tgt)) { $this->rules[] = $name; return true; } // save a copy of the current rules, then reset the rule set // so we can insert in the proper place later. // where to insert the rule? if ($tgt == '') { // insert at the beginning array_unshift($this->rules, $name); return true; } // insert after the named rule $tmp = $this->rules; $this->rules = array(); foreach ($tmp as $val) { $this->rules[] = $val; if ($val == $tgt) { $this->rules[] = $name; } } return true; } /** * * Delete (remove or unset) a rule from the $rules property. * * @access public * * @param string $rule The name of the rule to remove. * * @return void * */ function deleteRule($name) { $name = ucwords(strtolower($name)); $key = array_search($name, $this->rules); if ($key !== false) { unset($this->rules[$key]); } } /** * * Change from one rule to another in-place. * * @access public * * @param string $old The name of the rule to change from. * * @param string $new The name of the rule to change to. * * @return void * */ function changeRule($old, $new) { $old = ucwords(strtolower($old)); $new = ucwords(strtolower($new)); $key = array_search($old, $this->rules); if ($key !== false) { $this->rules[$old] = $new; } } /** * * Enables a rule so that it is applied when parsing. * * @access public * * @param string $rule The name of the rule to enable. * * @return void * */ function enableRule($name) { $name = ucwords(strtolower($name)); $key = array_search($name, $this->disable); if ($key !== false) { unset($this->disable[$key]); } } /** * * Disables a rule so that it is not applied when parsing. * * @access public * * @param string $rule The name of the rule to disable. * * @return void * */ function disableRule($name) { $name = ucwords(strtolower($name)); $key = array_search($name, $this->disable); if ($key === false) { $this->disable[] = $name; } } /** * * Parses and renders the text passed to it, and returns the results. * * First, the method parses the source text, applying rules to the * text as it goes. These rules will modify the source text * in-place, replacing some text with delimited tokens (and * populating the $this->tokens array as it goes). * * Next, the method renders the in-place tokens into the requested * output format. * * Finally, the method returns the transformed text. Note that the * source text is transformed in place; once it is transformed, it is * no longer the same as the original source text. * * @access public * * @param string $text The source text to which wiki rules should be * applied, both for parsing and for rendering. * * @param string $format The target output format, typically 'xhtml'. * If a rule does not support a given format, the output from that * rule is rule-specific. * * @return string The transformed wiki text. * */ function transform($text, $format = 'Xhtml') { $this->parse($text); return $this->render($format); } /** * * Sets the $_source text property, then parses it in place and * retains tokens in the $_tokens array property. * * @access public * * @param string $text The source text to which wiki rules should be * applied, both for parsing and for rendering. * * @return void * */ function parse($text) { // set the object property for the source text $this->source = $text; // reset the tokens. $this->tokens = array(); // apply the parse() method of each requested rule to the source // text. foreach ($this->rules as $name) { // do not parse the rules listed in $disable if (! in_array($name, $this->disable)) { // load the parsing object $this->loadParseObj($name); // load may have failed; only parse if // an object is in the array now if (is_object($this->parseObj[$name])) { $this->parseObj[$name]->parse(); } } } } /** * * Renders tokens back into the source text, based on the requested format. * * @access public * * @param string $format The target output format, typically 'xhtml'. * If a rule does not support a given format, the output from that * rule is rule-specific. * * @return string The transformed wiki text. * */ function render($format = 'Xhtml') { // the rendering method we're going to use from each rule $format = ucwords(strtolower($format)); // the eventual output text $output = ''; // when passing through the parsed source text, keep track of when // we are in a delimited section $in_delim = false; // when in a delimited section, capture the token key number $key = ''; // load the format object $this->loadFormatObj($format); // pre-rendering activity if (is_object($this->formatObj[$format])) { $output .= $this->formatObj[$format]->pre(); } // load the render objects foreach (array_keys($this->parseObj) as $rule) { $this->loadRenderObj($format, $rule); } // pass through the parsed source text character by character $k = strlen($this->source); for ($i = 0; $i < $k; $i++) { // the current character $char = $this->source{$i}; // are alredy in a delimited section? if ($in_delim) { // yes; are we ending the section? if ($char == $this->delim) { // yes, get the replacement text for the delimited // token number and unset the flag. $key = (int)$key; $rule = $this->tokens[$key][0]; $opts = $this->tokens[$key][1]; $output .= $this->renderObj[$rule]->token($opts); $in_delim = false; } else { // no, add to the dlimited token key number $key .= $char; } } else { // not currently in a delimited section. // are we starting into a delimited section? if ($char == $this->delim) { // yes, reset the previous key and // set the flag. $key = ''; $in_delim = true; } else { // no, add to the output as-is $output .= $char; } } } // post-rendering activity if (is_object($this->formatObj[$format])) { $output .= $this->formatObj[$format]->post(); } // return the rendered source text. return $output; } /** * * Returns the parsed source text with delimited token placeholders. * * @access public * * @return string The parsed source text. * */ function getSource() { return $this->source; } /** * * Returns tokens that have been parsed out of the source text. * * @access public * * @param array $rules If an array of rule names is passed, only return * tokens matching these rule names. If no array is passed, return all * tokens. * * @return array An array of tokens. * */ function getTokens($rules = null) { if (is_null($rules)) { return $this->tokens; } else { settype($rules, 'array'); $result = array(); foreach ($this->tokens as $key => $val) { if (in_array($val[0], $rules)) { $result[] = $val; } } return $result; } } /** * * Add a token to the Text_Wiki tokens array, and return a delimited * token number. * * @access public * * @param array $options An associative array of options for the new * token array element. The keys and values are specific to the * rule, and may or may not be common to other rule options. Typical * options keys are 'text' and 'type' but may include others. * * @param boolean $id_only If true, return only the token number, not * a delimited token string. * * @return string|int By default, return the number of the * newly-created token array element with a delimiter prefix and * suffix; however, if $id_only is set to true, return only the token * number (no delimiters). * */ function addToken($rule, $options = array(), $id_only = false) { // increment the token ID number. note that if you parse // multiple times with the same Text_Wiki object, the ID number // will not reset to zero. static $id; if (! isset($id)) { $id = 0; } else { $id ++; } // force the options to be an array settype($options, 'array'); // add the token $this->tokens[$id] = array( 0 => $rule, 1 => $options ); // return a value if ($id_only) { // return the last token number return $id; } else { // return the token number with delimiters return $this->delim . $id . $this->delim; } } /** * * Set or re-set a token with specific information, overwriting any * previous rule name and rule options. * * @access public * * @param int $id The token number to reset. * * @param int $rule The rule name to use. * * @param array $options An associative array of options for the * token array element. The keys and values are specific to the * rule, and may or may not be common to other rule options. Typical * options keys are 'text' and 'type' but may include others. * * @return void * */ function setToken($id, $rule, $options = array()) { // reset the token $this->tokens[$id] = array( 0 => $rule, 1 => $options ); } /** * * Load a rule parser class file. * * @access public * * @return bool True if loaded, false if not. * */ function loadParseObj($rule) { $rule = ucwords(strtolower($rule)); $file = $rule . '.php'; $class = "Text_Wiki_Parse_$rule"; if (! class_exists($class)) { $loc = $this->findFile('parse', $file); if ($loc) { // found the class include_once $loc; } else { // can't find the class $this->parseObj[$rule] = null; return false; } } $this->parseObj[$rule] =& new $class($this); } /** * * Load a rule-render class file. * * @access public * * @return bool True if loaded, false if not. * */ function loadRenderObj($format, $rule) { $format = ucwords(strtolower($format)); $rule = ucwords(strtolower($rule)); $file = "$format/$rule.php"; $class = "Text_Wiki_Render_$format" . "_$rule"; if (! class_exists($class)) { // load the class $loc = $this->findFile('render', $file); if ($loc) { // found the class include_once $loc; } else { // can't find the class return false; } } $this->renderObj[$rule] =& new $class($this); } /** * * Load a format-render class file. * * @access public * * @return bool True if loaded, false if not. * */ function loadFormatObj($format) { $format = ucwords(strtolower($format)); $file = $format . '.php'; $class = "Text_Wiki_Render_$format"; if (! class_exists($class)) { $loc = $this->findFile('render', $file); if ($loc) { // found the class include_once $loc; } else { // can't find the class return false; } } $this->formatObj[$format] =& new $class($this); } /** * * Add a path to a path array. * * @access public * * @param string $type The path-type to add (parse or render). * * @param string $dir The directory to add to the path-type. * * @return void * */ function addPath($type, $dir) { $dir = $this->fixPath($dir); if (! isset($this->path[$type])) { $this->path[$type] = array($dir); } else { array_unshift($this->path[$type], $dir); } } /** * * Get the current path array for a path-type. * * @access public * * @param string $type The path-type to look up (plugin, filter, or * template). If not set, returns all path types. * * @return array The array of paths for the requested type. * */ function getPath($type = null) { if (is_null($type)) { return $this->path; } elseif (! isset($this->path[$type])) { return array(); } else { return $this->path[$type]; } } /** * * Searches a series of paths for a given file. * * @param array $type The type of paths to search (template, plugin, * or filter). * * @param string $file The file name to look for. * * @return string|bool The full path and file name for the target file, * or boolean false if the file is not found in any of the paths. * */ function findFile($type, $file) { // get the set of paths $set = $this->getPath($type); // start looping through them foreach ($set as $path) { $fullname = $path . $file; if (file_exists($fullname) && is_readable($fullname)) { return $fullname; } } // could not find the file in the set of paths return false; } /** * * Append a trailing '/' to paths, unless the path is empty. * * @access private * * @param string $path The file path to fix * * @return string The fixed file path * */ function fixPath($path) { $len = strlen($this->_dirSep); if (! empty($path) && substr($path, -1 * $len, $len) != $this->_dirSep) { return $path . $this->_dirSep; } else { return $path; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/ 777 0 0 0 10170525451 16030 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse.php 777 0 0 14562 10125347570 16660 0 * * @package Text_Wiki * * $Id: Parse.php,v 1.2 2004/09/25 19:05:13 pmjones Exp $ * */ class Text_Wiki_Parse { /** * * Configuration options for this parser rule. * * @access public * * @var string * */ var $conf = array(); /** * * Regular expression to find matching text for this rule. * * @access public * * @var string * * @see parse() * */ var $regex = null; /** * * The name of this rule for new token array elements. * * @access public * * @var string * */ var $rule = null; /** * * A reference to the calling Text_Wiki object. * * This is needed so that each rule has access to the same source * text, token set, URLs, interwiki maps, page names, etc. * * @access public * * @var object */ var $wiki = null; /** * * Constructor for this parser rule. * * @access public * * @param object &$obj The calling "parent" Text_Wiki object. * */ function Text_Wiki_Parse(&$obj) { // set the reference to the calling Text_Wiki object; // this allows us access to the shared source text, token // array, etc. $this->wiki =& $obj; // set the name of this rule; generally used when adding // to the tokens array. strip off the Text_Wiki_Parse_ portion. // text_wiki_parse_ // 0123456789012345 $tmp = substr(get_class($this), 16); $this->rule = ucwords(strtolower($tmp)); // override config options for the rule if specified if (isset($this->wiki->parseConf[$this->rule]) && is_array($this->wiki->parseConf[$this->rule])) { $this->conf = array_merge( $this->conf, $this->wiki->parseConf[$this->rule] ); } } /** * * Abstrct method to parse source text for matches. * * Applies the rule's regular expression to the source text, passes * every match to the process() method, and replaces the matched text * with the results of the processing. * * @access public * * @see Text_Wiki_Parse::process() * */ function parse() { $this->wiki->source = preg_replace_callback( $this->regex, array(&$this, 'process'), $this->wiki->source ); } /** * * Abstract method to generate replacements for matched text. * * @access public * * @param array $matches An array of matches from the parse() method * as generated by preg_replace_callback. $matches[0] is the full * matched string, $matches[1] is the first matched pattern, * $matches[2] is the second matched pattern, and so on. * * @return string The processed text replacement; defaults to the * full matched string (i.e., no changes to the text). * * @see Text_Wiki_Parse::parse() * */ function process(&$matches) { return $matches[0]; } /** * * Simple method to safely get configuration key values. * * @access public * * @param string $key The configuration key. * * @param mixed $default If the key does not exist, return this value * instead. * * @return mixed The configuration key value (if it exists) or the * default value (if not). * */ function getConf($key, $default = null) { if (isset($this->conf[$key])) { return $this->conf[$key]; } else { return $default; } } /** * * Extract 'attribute="value"' portions of wiki markup. * * This kind of markup is typically used only in macros, but is useful * anywhere. * * The syntax is pretty strict; there can be no spaces between the * option name, the equals, and the first double-quote; the value * must be surrounded by double-quotes. You can escape characters in * the value with a backslash, and the backslash will be stripped for * you. * * @access public * * @param string $text The "attributes" portion of markup. * * @return array An associative array of key-value pairs where the * key is the option name and the value is the option value. * */ function getAttrs($text) { // find the =" sections; $tmp = explode('="', trim($text)); // basic setup $k = count($tmp) - 1; $attrs = array(); $key = null; // loop through the sections foreach ($tmp as $i => $val) { // first element is always the first key if ($i == 0) { $key = trim($val); continue; } // find the last double-quote in the value. // the part to the left is the value for the last key, // the part to the right is the next key name $pos = strrpos($val, '"'); $attrs[$key] = stripslashes(substr($val, 0, $pos)); $key = trim(substr($val, $pos+1)); } return $attrs; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Anchor.php 777 0 0 2737 10125347570 20053 0 * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Anchor extends Text_Wiki_Parse { /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/(\[\[# )([-_A-Za-z0-9.]+?)( .+)?(\]\])/i'; /** * * Generates a token entry for the matched text. Token options are: * * 'text' => The full matched text, not including the tags. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $name = $matches[2]; $text = $matches[3]; $start = $this->wiki->addToken( $this->rule, array('type' => 'start', 'name' => $name) ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end', 'name' => $name) ); // done, place the script output directly in the source return $start . trim($text) . $end; } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Blockquote.php 777 0 0 11332 10125347570 20760 0' at the start of the line, followed by a space, * and then the quote text; each '>' indicates an additional level of * quoting. * * $Id: Blockquote.php,v 1.3 2004/09/25 19:05:13 pmjones Exp $ * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Blockquote extends Text_Wiki_Parse { /** * * Regex for parsing the source text. * * @access public * * @var string * * @see parse() * */ var $regex = '/\n((\>).*\n)(?!(\>))/Us'; /** * * Generates a replacement for the matched text. * * Token options are: * * 'type' => * 'start' : the start of a blockquote * 'end' : the end of a blockquote * * 'level' => the indent level (0 for the first level, 1 for the * second, etc) * * @access public * * @param array &$matches The array of matches from parse(). * * @return A series of text and delimited tokens marking the different * list text and list elements. * */ function process(&$matches) { // the replacement text we will return to parse() $return = ''; // the list of post-processing matches $list = array(); // $matches[1] is the text matched as a list set by parse(); // create an array called $list that contains a new set of // matches for the various list-item elements. preg_match_all( '=^(\>+) (.*\n)=Ums', $matches[1], $list, PREG_SET_ORDER ); // a stack of starts and ends; we keep this so that we know what // indent level we're at. $stack = array(); // loop through each list-item element. foreach ($list as $key => $val) { // $val[0] is the full matched list-item line // $val[1] is the number of initial '>' chars (indent level) // $val[2] is the quote text // we number levels starting at 1, not zero $level = strlen($val[1]); // get the text of the line $text = $val[2]; // add a level to the list? while ($level > count($stack)) { // the current indent level is greater than the number // of stack elements, so we must be starting a new // level. push the new level onto the stack with a // dummy value (boolean true)... array_push($stack, true); $return .= "\n"; // ...and add a start token to the return. $return .= $this->wiki->addToken( $this->rule, array( 'type' => 'start', 'level' => $level - 1 ) ); $return .= "\n\n"; } // remove a level? while (count($stack) > $level) { // as long as the stack count is greater than the // current indent level, we need to end list types. // continue adding end-list tokens until the stack count // and the indent level are the same. array_pop($stack); $return .= "\n\n"; $return .= $this->wiki->addToken( $this->rule, array ( 'type' => 'end', 'level' => count($stack) ) ); $return .= "\n"; } // add the line text. $return .= $text; } // the last line may have been indented. go through the stack // and create end-tokens until the stack is empty. $return .= "\n"; while (count($stack) > 0) { array_pop($stack); $return .= $this->wiki->addToken( $this->rule, array ( 'type' => 'end', 'level' => count($stack) ) ); } // we're done! send back the replacement text. return "\n$return\n\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Bold.php 777 0 0 3064 10060644762 17514 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Bold extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/'''(()|[^'].*)'''/U"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * emphasized text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A pair of delimited tokens to be used as a placeholder in * the source text surrounding the text to be emphasized. * */ function process(&$matches) { $start = $this->wiki->addToken($this->rule, array('type' => 'start')); $end = $this->wiki->addToken($this->rule, array('type' => 'end')); return $start . $matches[1] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Break.php 777 0 0 2013 10125347570 17650 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Break extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/ _\n/'; /** * * Generates a replacement token for the matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A delimited token to be used as a placeholder in * the source text. * */ function process(&$matches) { return $this->wiki->addToken($this->rule); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Center.php 777 0 0 2356 10125347570 20056 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Center extends Text_Wiki_Parse { /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/\n\= (.*?)\n/'; /** * * Generates a token entry for the matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return "\n" . $start . $matches[1] . $end . "\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Code.php 777 0 0 3516 10125347570 17507 0 on a line by itself, * followed by the inline code example, and terminated with the string * on a line by itself. The code example is run through the * native PHP highlight_string() function to colorize it, then surrounded * with
    ...
    tags when rendered as XHTML. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Code extends Text_Wiki_Parse { /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/^(\)\n(.+)\n(\<\/code\>)(\s|$)/Umsi'; /** * * Generates a token entry for the matched text. Token options are: * * 'text' => The full matched text, not including the tags. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { // are there additional attribute arguments? $args = trim($matches[2]); if ($args == '') { $options = array( 'text' => $matches[3], 'attr' => array('type' => '') ); } else { $options = array( 'text' => $matches[3], 'attr' => $this->getAttrs($args) ); } return $this->wiki->addToken($this->rule, $options) . $matches[5]; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Colortext.php 777 0 0 3227 10125347570 20617 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Colortext extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\#\#(.+?)\|(.+?)\#\#/"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * emphasized text. The text itself is left in the source. * * 'color' => the color indicator * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the text to be * emphasized. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array( 'type' => 'start', 'color' => $matches[1] ) ); $end = $this->wiki->addToken( $this->rule, array( 'type' => 'end', 'color' => $matches[1] ) ); return $start . $matches[2] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Deflist.php 777 0 0 6316 10125347570 20230 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Deflist extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/\n((: ).*\n)(?!(: |\n))/Us'; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => * 'list_start' : the start of a definition list * 'list_end' : the end of a definition list * 'term_start' : the start of a definition term * 'term_end' : the end of a definition term * 'narr_start' : the start of definition narrative * 'narr_end' : the end of definition narrative * 'unknown' : unknown type of definition portion * * @access public * * @param array &$matches The array of matches from parse(). * * @return A series of text and delimited tokens marking the different * list text and list elements. * */ function process(&$matches) { // the replacement text we will return to parse() $return = ''; // the list of post-processing matches $list = array(); // start the deflist $options = array('type' => 'list_start'); $return .= $this->wiki->addToken($this->rule, $options); // $matches[1] is the text matched as a list set by parse(); // create an array called $list that contains a new set of // matches for the various definition-list elements. preg_match_all( '/^(: )(.*)?( : )(.*)?$/Ums', $matches[1], $list, PREG_SET_ORDER ); // add each term and narrative foreach ($list as $key => $val) { $return .= ( $this->wiki->addToken($this->rule, array('type' => 'term_start')) . trim($val[2]) . $this->wiki->addToken($this->rule, array('type' => 'term_end')) . $this->wiki->addToken($this->rule, array('type' => 'narr_start')) . trim($val[4]) . $this->wiki->addToken($this->rule, array('type' => 'narr_end')) ); } // end the deflist $options = array('type' => 'list_end'); $return .= $this->wiki->addToken($this->rule, $options); // done! return "\n" . $return . "\n\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Delimiter.php 777 0 0 3052 10125347570 20546 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Delimiter extends Text_Wiki_Parse { /** * * Constructor. Overrides the Text_Wiki_Parse constructor so that we * can set the $regex property dynamically (we need to include the * Text_Wiki $delim character. * * @param object &$obj The calling "parent" Text_Wiki object. * * @param string $name The token name to use for this rule. * */ function Text_Wiki_Parse_delimiter(&$obj) { parent::Text_Wiki_Parse($obj); $this->regex = '/' . $this->wiki->delim . '/'; } /** * * Generates a token entry for the matched text. Token options are: * * 'text' => The full matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { return $this->wiki->addToken( $this->rule, array('text' => $this->wiki->delim) ); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Embed.php 777 0 0 4231 10125347570 17644 0 or other similar tags. Be * careful. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Embed extends Text_Wiki_Parse { var $conf = array( 'base' => '/path/to/scripts/' ); var $file = null; var $output = null; var $vars = null; /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/(\[\[embed )(.+?)( .+?)?(\]\])/i'; /** * * Generates a token entry for the matched text. Token options are: * * 'text' => The full matched text, not including the tags. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { // save the file location $this->file = $this->getConf('base', './') . $matches[2]; // extract attribs as variables in the local space $this->vars = $this->getAttrs($matches[3]); unset($this->vars['this']); extract($this->vars); // run the script ob_start(); include($this->file); $this->output = ob_get_contents(); ob_end_clean(); // done, place the script output directly in the source return $this->wiki->addToken( $this->rule, array('text' => $this->output) ); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Emphasis.php 777 0 0 3201 10125347570 20375 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_emphasis extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\/\/(()|.*)\/\//U"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * emphasized text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the text to be * emphasized. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . $matches[1] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Freelink.php 777 0 0 10126 10125347570 20407 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Freelink extends Text_Wiki_Parse { /** * * Constructor. We override the Text_Wiki_Parse constructor so we can * explicitly comment each part of the $regex property. * * @access public * * @param object &$obj The calling "parent" Text_Wiki object. * */ function Text_Wiki_Parse_Freelink(&$obj) { parent::Text_Wiki_Parse($obj); $this->regex = '/' . // START regex "\\(\\(" . // double open-parens "(" . // START freelink page patter "[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&\xc0-\xff]+" . // 1 or more of just about any character ")" . // END freelink page pattern "(" . // START display-name "\|" . // a pipe to start the display name "[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&\xc0-\xff]+" . // 1 or more of just about any character ")?" . // END display-name pattern 0 or 1 "(" . // START pattern for named anchors "\#" . // a hash mark "[A-Za-z]" . // 1 alpha "[-A-Za-z0-9_:.]*" . // 0 or more alpha, digit, underscore ")?" . // END named anchors pattern 0 or 1 "()\\)\\)" . // double close-parens '/'; // END regex } /** * * Generates a replacement for the matched text. Token options are: * * 'page' => the wiki page name (e.g., HomePage). * * 'text' => alternative text to be displayed in place of the wiki * page name. * * 'anchor' => a named anchor on the target wiki page * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token to be used as a placeholder in * the source text, plus any text priot to the match. * */ function process(&$matches) { // use nice variable names $page = $matches[1]; $text = $matches[2]; // get rid of the leading # from the anchor, if any $anchor = substr($matches[3], 1); // is the page given a new text appearance? if (trim($text) == '') { // no $text = $page; } else { // yes, strip the leading | character $text = substr($text, 1); } // set the options $options = array( 'page' => $page, 'text' => $text, 'anchor' => $anchor ); // return a token placeholder return $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Function.php 777 0 0 6662 10131560230 20412 0)\n(.+)\n(\<\/function\>)(\s|$)/Umsi'; function process(&$matches) { // default options $opts = array( 'name' => null, 'access' => null, 'return' => null, 'params' => array(), 'throws' => array() ); // split apart the markup lines and loop through them $lines = explode("\n", $matches[2]); foreach ($lines as $line) { // skip blank lines if (trim($line) == '') { continue; } // find the first ':' on the line; the left part is the // type, the right part is the value. skip lines without // a ':' on them. $pos = strpos($line, ':'); if ($pos === false) { continue; } // $type is the line type: name, access, return, param, throws // 012345678901234 // name: something $type = trim(substr($line, 0, $pos)); $val = trim(substr($line, $pos+1)); switch($type) { case 'a': case 'access': $opts['access'] = $val; break; case 'n': case 'name': $opts['name'] = $val; break; case 'p': case 'param': $tmp = explode(',', $val); $k = count($tmp); if ($k == 1) { $opts['params'][] = array( 'type' => $tmp[0], 'descr' => null, 'default' => null ); } elseif ($k == 2) { $opts['params'][] = array( 'type' => $tmp[0], 'descr' => $tmp[1], 'default' => null ); } else { $opts['params'][] = array( 'type' => $tmp[0], 'descr' => $tmp[1], 'default' => $tmp[2] ); } break; case 'r': case 'return': case 'returns': $opts['return'] = $val; break; case 't': case 'throws': $tmp = explode(',', $val); $k = count($tmp); if ($k == 1) { $opts['throws'][] = array( 'type' => $tmp[0], 'descr' => null ); } else { $opts['throws'][] = array( 'type' => $tmp[0], 'descr' => $tmp[1] ); } break; default: $opts[$type] = $val; break; } } // add the token back in place return $this->wiki->addToken($this->rule, $opts) . $matches[4]; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Heading.php 777 0 0 4412 10125347570 20170 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Heading extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/^(\+{1,6}) (.*)/m'; var $conf = array( 'id_prefix' => 'toc' ); /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * heading text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the heading text. * */ function process(&$matches) { // keep a running count for header IDs. we use this later // when constructing TOC entries, etc. static $id; if (! isset($id)) { $id = 0; } $prefix = htmlspecialchars($this->getConf('id_prefix')); $start = $this->wiki->addToken( $this->rule, array( 'type' => 'start', 'level' => strlen($matches[1]), 'text' => $matches[2], 'id' => $prefix . $id ++ ) ); $end = $this->wiki->addToken( $this->rule, array( 'type' => 'end', 'level' => strlen($matches[1]) ) ); return $start . $matches[2] . $end . "\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Horiz.php 777 0 0 2037 10125347570 17725 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Horiz extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/^([-]{4,})$/m'; /** * * Generates a replacement token for the matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A token marking the horizontal rule. * */ function process(&$matches) { return $this->wiki->addToken($this->rule); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Html.php 777 0 0 2540 10125347570 17535 0 on its * own line, and the block end is marked by on its own line. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Html extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/^\\n(.+)\n\<\/html\>(\s|$)/Umsi'; /** * * Generates a replacement for the matched text. Token options are: * * 'text' => The text of the HTML to be rendered as-is. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token to be used as a placeholder in * the source text, plus any text following the HTML block. * */ function process(&$matches) { $options = array('text' => $matches[1]); return $this->wiki->addToken($this->rule, $options) . $matches[2]; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Image.php 777 0 0 3577 10125347570 17666 0 or other similar tags. Be * careful. * * In the future, we'll add a rule config options to set the base embed * path so that it is limited to one directory. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Image extends Text_Wiki_Parse { /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/(\[\[image )(.+?)(\]\])/i'; /** * * Generates a token entry for the matched text. Token options are: * * 'src' => The image source, typically a relative path name. * * 'opts' => Any macro options following the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $pos = strpos($matches[2], ' '); if ($pos === false) { $options = array( 'src' => $matches[2], 'attr' => array()); } else { // everything after the space is attribute arguments $options = array( 'src' => substr($matches[2], 0, $pos), 'attr' => $this->getAttrs(substr($matches[2], $pos+1)) ); } return $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Include.php 777 0 0 4041 10125347570 20212 0 or other similar tags. Be * careful. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Include extends Text_Wiki_Parse { var $conf = array( 'base' => '/path/to/scripts/' ); var $file = null; var $output = null; var $vars = null; /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/(\[\[include )(.+?)( .+?)?(\]\])/i'; /** * * Includes the results of the script directly into the source; the output * will subsequently be parsed by the remaining Text_Wiki rules. * * @access public * * @param array &$matches The array of matches from parse(). * * @return The results of the included script. * */ function process(&$matches) { // save the file location $this->file = $this->getConf('base', './') . $matches[2]; // extract attribs as variables in the local space $this->vars = $this->getAttrs($matches[3]); unset($this->vars['this']); extract($this->vars); // run the script ob_start(); include($this->file); $this->output = ob_get_contents(); ob_end_clean(); // done, place the script output directly in the source return $this->output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Interwiki.php 777 0 0 6027 10125347570 20602 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Interwiki extends Text_Wiki_Parse { var $regex = '([A-Za-z0-9_]+):([\/=&~#A-Za-z0-9_]+)'; /** * * Parser. We override the standard parser so we can * find both described interwiki links and standalone links. * * @access public * * @return void * */ function parse() { // described interwiki links $tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'processDescr'), $this->wiki->source ); // standalone interwiki links $tmp_regex = '/' . $this->regex . '/'; $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'process'), $this->wiki->source ); } /** * * Generates a replacement for the matched standalone interwiki text. * Token options are: * * 'site' => The key name for the Text_Wiki interwiki array map, * usually the name of the interwiki site. * * 'page' => The page on the target interwiki to link to. * * 'text' => The text to display as the link. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token to be used as a placeholder in * the source text, plus any text priot to the match. * */ function process(&$matches) { $options = array( 'site' => $matches[1], 'page' => $matches[2], 'text' => $matches[0] ); return $this->wiki->addToken($this->rule, $options); } /** * * Generates a replacement for described interwiki links. Token * options are: * * 'site' => The key name for the Text_Wiki interwiki array map, * usually the name of the interwiki site. * * 'page' => The page on the target interwiki to link to. * * 'text' => The text to display as the link. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token to be used as a placeholder in * the source text, plus any text priot to the match. * */ function processDescr(&$matches) { $options = array( 'site' => $matches[1], 'page' => $matches[2], 'text' => $matches[3] ); return $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Italic.php 777 0 0 3175 10125347570 20043 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Italic extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/''(()|[^'].*)''/U"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * emphasized text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the text to be * emphasized. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . $matches[1] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/List.php 777 0 0 17570 10125347570 17575 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_List extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/\n((\*|#) .*\n)(?! {0,}(\* |# |\n))/Us'; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => * 'bullet_start' : the start of a bullet list * 'bullet_end' : the end of a bullet list * 'number_start' : the start of a number list * 'number_end' : the end of a number list * 'item_start' : the start of item text (bullet or number) * 'item_end' : the end of item text (bullet or number) * 'unknown' : unknown type of list or item * * 'level' => the indent level (0 for the first level, 1 for the * second, etc) * * 'count' => the list item number at this level. not needed for * xhtml, but very useful for PDF and RTF. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A series of text and delimited tokens marking the different * list text and list elements. * */ function process(&$matches) { // the replacement text we will return $return = ''; // the list of post-processing matches $list = array(); // a stack of list-start and list-end types; we keep this // so that we know what kind of list we're working with // (bullet or number) and what indent level we're at. $stack = array(); // the item count is the number of list items for any // given list-type on the stack $itemcount = array(); // have we processed the very first list item? $pastFirst = false; // populate $list with this set of matches. $matches[1] is the // text matched as a list set by parse(). preg_match_all( '=^( {0,})(\*|#) (.*)$=Ums', $matches[1], $list, PREG_SET_ORDER ); // loop through each list-item element. foreach ($list as $key => $val) { // $val[0] is the full matched list-item line // $val[1] is the number of initial spaces (indent level) // $val[2] is the list item type (* or #) // $val[3] is the list item text // how many levels are we indented? (1 means the "root" // list level, no indenting.) $level = strlen($val[1]) + 1; // get the list item type if ($val[2] == '*') { $type = 'bullet'; } elseif ($val[2] == '#') { $type = 'number'; } else { $type = 'unknown'; } // get the text of the list item $text = $val[3]; // add a level to the list? if ($level > count($stack)) { // the current indent level is greater than the // number of stack elements, so we must be starting // a new list. push the new list type onto the // stack... array_push($stack, $type); // ...and add a list-start token to the return. $return .= $this->wiki->addToken( $this->rule, array( 'type' => $type . '_list_start', 'level' => $level - 1 ) ); } // remove a level from the list? while (count($stack) > $level) { // so we don't keep counting the stack, we set up a temp // var for the count. -1 becuase we're going to pop the // stack in the next command. $tmp will then equal the // current level of indent. $tmp = count($stack) - 1; // as long as the stack count is greater than the // current indent level, we need to end list types. // continue adding end-list tokens until the stack count // and the indent level are the same. $return .= $this->wiki->addToken( $this->rule, array ( 'type' => array_pop($stack) . '_list_end', 'level' => $tmp ) ); // reset to the current (previous) list type so that // the new list item matches the proper list type. $type = $stack[$tmp - 1]; // reset the item count for the popped indent level unset($itemcount[$tmp + 1]); } // add to the item count for this list (taking into account // which level we are at). if (! isset($itemcount[$level])) { // first count $itemcount[$level] = 0; } else { // increment count $itemcount[$level]++; } // is this the very first item in the list? if (! $pastFirst) { $first = true; $pastFirst = true; } else { $first = false; } // create a list-item starting token. $start = $this->wiki->addToken( $this->rule, array( 'type' => $type . '_item_start', 'level' => $level, 'count' => $itemcount[$level], 'first' => $first ) ); // create a list-item ending token. $end = $this->wiki->addToken( $this->rule, array( 'type' => $type . '_item_end', 'level' => $level, 'count' => $itemcount[$level] ) ); // add the starting token, list-item text, and ending token // to the return. $return .= $start . $val[3] . $end; } // the last list-item may have been indented. go through the // list-type stack and create end-list tokens until the stack // is empty. while (count($stack) > 0) { $return .= $this->wiki->addToken( $this->rule, array ( 'type' => array_pop($stack) . '_list_end', 'level' => count($stack) ) ); } // we're done! send back the replacement text. return "\n" . $return . "\n\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Newline.php 777 0 0 2252 10125347570 20232 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Newline extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/([^\n])\n([^\n])/m'; /** * * Generates a replacement token for the matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A delimited token to be used as a placeholder in * the source text. * */ function process(&$matches) { return $matches[1] . $this->wiki->addToken($this->rule) . $matches[2]; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Paragraph.php 777 0 0 6652 10125347570 20546 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Paragraph extends Text_Wiki_Parse { /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = "/^.*?\n\n/m"; var $conf = array( 'skip' => array( 'blockquote', // are we sure about this one? 'code', 'heading', 'horiz', 'deflist', 'table', 'list', 'toc' ) ); /** * * Generates a token entry for the matched text. Token options are: * * 'start' => The starting point of the paragraph. * * 'end' => The ending point of the paragraph. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $delim = $this->wiki->delim; // was anything there? if (trim($matches[0]) == '') { return ''; } // does the match start with a delimiter? if (substr($matches[0], 0, 1) != $delim) { // no. $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . trim($matches[0]) . $end; } // the line starts with a delimiter. read in the delimited // token number, check the token, and see if we should // skip it. // loop starting at the second character (we already know // the first is a delimiter) until we find another // delimiter; the text between them is a token key number. $key = ''; $len = strlen($matches[0]); for ($i = 1; $i < $len; $i++) { $char = $matches[0]{$i}; if ($char == $delim) { break; } else { $key .= $char; } } // look at the token and see if it's skippable (if we skip, // it will not be marked as a paragraph) $token_type = strtolower($this->wiki->tokens[$key][0]); $skip = $this->getConf('skip', array()); if (in_array($token_type, $skip)) { // this type of token should not have paragraphs applied to it. // return the entire matched text. return $matches[0]; } else { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . trim($matches[0]) . $end; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Phplookup.php 777 0 0 2366 10125347570 20620 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Phplookup extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\[\[php (.+?)\]\]/"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * teletype text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the teletype text. * */ function process(&$matches) { return $this->wiki->addToken( $this->rule, array('text' => $matches[1]) ); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Prefilter.php 777 0 0 3157 10125347570 20572 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Prefilter extends Text_Wiki_Parse { /** * * Simple parsing method. * * @access public * */ function parse() { // convert DOS line endings $this->wiki->source = str_replace("\r\n", "\n", $this->wiki->source); // convert Macintosh line endings $this->wiki->source = str_replace("\r", "\n", $this->wiki->source); // concat lines ending in a backslash $this->wiki->source = str_replace("\\\n", "", $this->wiki->source); // convert tabs to four-spaces $this->wiki->source = str_replace("\t", " ", $this->wiki->source); // add extra newlines at the top and end; this // seems to help many rules. $this->wiki->source = "\n" . $this->wiki->source . "\n\n"; // finally, compress all instances of 3 or more newlines // down to two newlines. $find = "/\n{3,}/m"; $replace = "\n\n"; $this->wiki->source = preg_replace($find, $replace, $this->wiki->source); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Raw.php 777 0 0 2217 10125347570 17363 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Raw extends Text_Wiki_Parse { /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = "/``(.*)``/U"; /** * * Generates a token entry for the matched text. Token options are: * * 'text' => The full matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $options = array('text' => $matches[1]); return $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Revise.php 777 0 0 6365 10125347570 20077 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Revise extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\@\@({*?.*}*?)\@\@/U"; /** * * Config options. * * @access public * * @var array * */ var $conf = array( 'delmark' => '---', 'insmark' => '+++' ); /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * inserted text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the teletype text. * */ function process(&$matches) { $output = ''; $src = $matches[1]; $delmark = $this->getConf('delmark'); // --- $insmark = $this->getConf('insmark'); // +++ // '---' must be before '+++' (if they both appear) $del = strpos($src, $delmark); $ins = strpos($src, $insmark); // if neither is found, return right away if ($del === false && $ins === false) { return $matches[0]; } // handle text to be deleted if ($del !== false) { // move forward to the end of the deletion mark $del += strlen($delmark); if ($ins === false) { // there is no insertion text following $text = substr($src, $del); } else { // there is insertion text following, // mitigate the length $text = substr($src, $del, $ins - $del); } $output .= $this->wiki->addToken( $this->rule, array('type' => 'del_start') ); $output .= $text; $output .= $this->wiki->addToken( $this->rule, array('type' => 'del_end') ); } // handle text to be inserted if ($ins !== false) { // move forward to the end of the insert mark $ins += strlen($insmark); $text = substr($src, $ins); $output .= $this->wiki->addToken( $this->rule, array('type' => 'ins_start') ); $output .= $text; $output .= $this->wiki->addToken( $this->rule, array('type' => 'ins_end') ); } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Shockwaveflash.php 777 0 0 4636 10170665542 21613 0 The image source, typically a relative path name. * * 'opts' => Any macro options following the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $pos = strpos($matches[2], ' '); if ($pos === false) { $options = array( 'src' => $matches[2], 'attr' => array()); } else { // everything after the space is attribute arguments $options = array( 'src' => substr($matches[2], 0, $pos), 'attr' => $this->getAttrs(substr($matches[2], $pos+1)) ); } return $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Strong.php 777 0 0 3173 10125347570 20110 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Strong extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\*\*(()|.*)\*\*/U"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * emphasized text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A pair of delimited tokens to be used as a placeholder in * the source text surrounding the text to be emphasized. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . $matches[1] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Superscript.php 777 0 0 3205 10125347570 21153 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Superscript extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\^\^(()|.*)\^\^/U"; /** * * Generates a replacement for the matched text. Token options are: * * 'type' => ['start'|'end'] The starting or ending point of the * emphasized text. The text itself is left in the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A pair of delimited tokens to be used as a placeholder in * the source text surrounding the text to be emphasized. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . $matches[1] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Table.php 777 0 0 15223 10125347570 17702 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Table extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = '/\n((\|\|).*)(\n)(?!(\|\|))/Us'; /** * * Generates a replacement for the matched text. * * Token options are: * * 'type' => * 'table_start' : the start of a bullet list * 'table_end' : the end of a bullet list * 'row_start' : the start of a number list * 'row_end' : the end of a number list * 'cell_start' : the start of item text (bullet or number) * 'cell_end' : the end of item text (bullet or number) * * 'cols' => the number of columns in the table (for 'table_start') * * 'rows' => the number of rows in the table (for 'table_start') * * 'span' => column span (for 'cell_start') * * 'attr' => column attribute flag (for 'cell_start') * * @access public * * @param array &$matches The array of matches from parse(). * * @return A series of text and delimited tokens marking the different * table elements and cell text. * */ function process(&$matches) { // our eventual return value $return = ''; // the number of columns in the table $num_cols = 0; // the number of rows in the table $num_rows = 0; // rows are separated by newlines in the matched text $rows = explode("\n", $matches[1]); // loop through each row foreach ($rows as $row) { // increase the row count $num_rows ++; // start a new row $return .= $this->wiki->addToken( $this->rule, array('type' => 'row_start') ); // cells are separated by double-pipes $cell = explode("||", $row); // get the number of cells (columns) in this row $last = count($cell) - 1; // is this more than the current column count? // (we decrease by 1 because we never use cell zero) if ($last - 1 > $num_cols) { // increase the column count $num_cols = $last - 1; } // by default, cells span only one column (their own) $span = 1; // ignore cell zero, and ignore the "last" cell; cell zero // is before the first double-pipe, and the "last" cell is // after the last double-pipe. both are always empty. for ($i = 1; $i < $last; $i ++) { // if there is no content at all, then it's an instance // of two sets of || next to each other, indicating a // span. if ($cell[$i] == '') { // add to the span and loop to the next cell $span += 1; continue; } else { // this cell has content. // find any special "attr"ibute cell markers if (substr($cell[$i], 0, 2) == '> ') { // right-align $attr = 'right'; $cell[$i] = substr($cell[$i], 2); } elseif (substr($cell[$i], 0, 2) == '= ') { // center-align $attr = 'center'; $cell[$i] = substr($cell[$i], 2); } elseif (substr($cell[$i], 0, 2) == '< ') { // left-align $attr = 'left'; $cell[$i] = substr($cell[$i], 2); } elseif (substr($cell[$i], 0, 2) == '~ ') { $attr = 'header'; $cell[$i] = substr($cell[$i], 2); } else { $attr = null; } // start a new cell... $return .= $this->wiki->addToken( $this->rule, array ( 'type' => 'cell_start', 'attr' => $attr, 'span' => $span ) ); // ...add the content... $return .= trim($cell[$i]); // ...and end the cell. $return .= $this->wiki->addToken( $this->rule, array ( 'type' => 'cell_end', 'attr' => $attr, 'span' => $span ) ); // reset the span. $span = 1; } } // end the row $return .= $this->wiki->addToken( $this->rule, array('type' => 'row_end') ); } // wrap the return value in start and end tokens $return = $this->wiki->addToken( $this->rule, array( 'type' => 'table_start', 'rows' => $num_rows, 'cols' => $num_cols ) ) . $return . $this->wiki->addToken( $this->rule, array( 'type' => 'table_end' ) ); // we're done! return "\n$return\n\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Tighten.php 777 0 0 1017 10125347570 20231 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Tighten extends Text_Wiki_Parse { /** * * Apply tightening directly to the source text. * * @access public * */ function parse() { $this->wiki->source = str_replace("\n", '', $this->wiki->source); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Toc.php 777 0 0 5252 10125347570 17361 0 * * @package Text_Wiki * */ class Text_Wiki_Parse_Toc extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text and find * matches conforming to this rule. Used by the parse() method. * * @access public * * @var string * * @see parse() * */ var $regex = "/\n\[\[toc( .*)?\]\]\n/m"; /** * * Generates a replacement for the matched text. * * Token options are: * * 'type' => ['list_start'|'list_end'|'item_start'|'item_end'|'target'] * * 'level' => The heading level (1-6). * * 'count' => Which entry number this is in the list. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A token indicating the TOC collection point. * */ function process(&$matches) { $count = 0; if (isset($matches[1])) { $attr = $this->getAttrs(trim($matches[1])); } else { $attr = array(); } $output = $this->wiki->addToken( $this->rule, array( 'type' => 'list_start', 'level' => 0, 'attr' => $attr ) ); foreach ($this->wiki->getTokens('Heading') as $key => $val) { if ($val[1]['type'] != 'start') { continue; } $options = array( 'type' => 'item_start', 'id' => $val[1]['id'], 'level' => $val[1]['level'], 'count' => $count ++ ); $output .= $this->wiki->addToken($this->rule, $options); $output .= $val[1]['text']; $output .= $this->wiki->addToken( $this->rule, array( 'type' => 'item_end', 'level' => $val[1]['level'] ) ); } $output .= $this->wiki->addToken( $this->rule, array( 'type' => 'list_end', 'level' => 0 ) ); return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Tt.php 777 0 0 2752 10125347570 17225 0 ['start'|'end'] The starting or ending point of the * teletype text. The text itself is left in the source. * * * $Id: Tt.php,v 1.2 2004/09/25 19:05:13 pmjones Exp $ * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Tt extends Text_Wiki_Parse { /** * * The regular expression used to parse the source text. * * @access public * * @var string * * @see parse() * */ var $regex = "/{{({*?.*}*?)}}/U"; /** * * Generates a replacement for the matched text. * * @access public * * @param array &$matches The array of matches from parse(). * * @return string A pair of delimited tokens to be used as a * placeholder in the source text surrounding the teletype text. * */ function process(&$matches) { $start = $this->wiki->addToken( $this->rule, array('type' => 'start') ); $end = $this->wiki->addToken( $this->rule, array('type' => 'end') ); return $start . $matches[1] . $end; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Url.php 777 0 0 15755 10125347570 17427 0 tag (for the 'xhtml' * format). * * Token options are: * * 'type' => ['inline'|'footnote'|'descr'] the type of URL * * 'href' => the URL link href portion * * 'text' => the displayed text of the URL link * * $Id: Url.php,v 1.4 2004/09/25 19:05:13 pmjones Exp $ * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Url extends Text_Wiki_Parse { /** * * Keeps a running count of numbered-reference URLs. * * @access public * * @var int * */ var $footnoteCount = 0; /** * * URL schemes recognized by this rule. * * @access public * * @var array * */ var $conf = array( 'schemes' => array( 'http://', 'https://', 'ftp://', 'gopher://', 'news://', 'mailto:' ) ); /** * * Constructor. * * We override the constructor so we can comment the regex nicely. * * @access public * */ function Text_Wiki_Parse_Url(&$obj) { parent::Text_Wiki_Parse($obj); // convert the list of recognized schemes to a regex-safe string, // where the pattern delim is a slash $tmp = array(); $list = $this->getConf('schemes', array()); foreach ($list as $val) { $tmp[] = preg_quote($val, '/'); } $schemes = implode('|', $tmp); // build the regex $this->regex = "($schemes)" . // allowed schemes "(" . // start pattern "[^ \\/\"\'{$this->wiki->delim}]*\\/" . // no spaces, backslashes, slashes, double-quotes, single quotes, or delimiters; ")*" . // end pattern "[^ \\t\\n\\/\"\'{$this->wiki->delim}]*" . "[A-Za-z0-9\\/?=&~_]"; } /** * * Find three different kinds of URLs in the source text. * * @access public * */ function parse() { // ------------------------------------------------------------- // // Described-reference (named) URLs. // // the regular expression for this kind of URL $tmp_regex = '/\[(' . $this->regex . ') ([^\]]+)\]/'; // use a custom callback processing method to generate // the replacement text for matches. $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'processDescr'), $this->wiki->source ); // ------------------------------------------------------------- // // Numbered-reference (footnote-style) URLs. // // the regular expression for this kind of URL $tmp_regex = '/\[(' . $this->regex . ')\]/U'; // use a custom callback processing method to generate // the replacement text for matches. $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'processFootnote'), $this->wiki->source ); // ------------------------------------------------------------- // // Normal inline URLs. // // the regular expression for this kind of URL $tmp_regex = '/(^|[^A-Za-z])(' . $this->regex . ')(.*?)/'; // use the standard callback for inline URLs $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'process'), $this->wiki->source ); } /** * * Process inline URLs. * * @param array &$matches * * @param array $matches An array of matches from the parse() method * as generated by preg_replace_callback. $matches[0] is the full * matched string, $matches[1] is the first matched pattern, * $matches[2] is the second matched pattern, and so on. * * @return string The processed text replacement. * */ function process(&$matches) { // set options $options = array( 'type' => 'inline', 'href' => $matches[2], 'text' => $matches[2] ); // tokenize return $matches[1] . $this->wiki->addToken($this->rule, $options) . $matches[5]; } /** * * Process numbered (footnote) URLs. * * Token options are: * @param array &$matches * * @param array $matches An array of matches from the parse() method * as generated by preg_replace_callback. $matches[0] is the full * matched string, $matches[1] is the first matched pattern, * $matches[2] is the second matched pattern, and so on. * * @return string The processed text replacement. * */ function processFootnote(&$matches) { // keep a running count for footnotes $this->footnoteCount++; // set options $options = array( 'type' => 'footnote', 'href' => $matches[1], 'text' => $this->footnoteCount ); // tokenize return $this->wiki->addToken($this->rule, $options); } /** * * Process described-reference (named-reference) URLs. * * Token options are: * 'type' => ['inline'|'footnote'|'descr'] the type of URL * 'href' => the URL link href portion * 'text' => the displayed text of the URL link * * @param array &$matches * * @param array $matches An array of matches from the parse() method * as generated by preg_replace_callback. $matches[0] is the full * matched string, $matches[1] is the first matched pattern, * $matches[2] is the second matched pattern, and so on. * * @return string The processed text replacement. * */ function processDescr(&$matches) { // set options $options = array( 'type' => 'descr', 'href' => $matches[1], 'text' => $matches[4] ); // tokenize return $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Parse/Wikilink.php 777 0 0 10453 10125347570 20434 0 the wiki page name. * * 'text' => the displayed link text. * * 'anchor' => a named anchor on the target wiki page. * * $Id: Wikilink.php,v 1.2 2004/09/25 19:05:13 pmjones Exp $ * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Parse_Wikilink extends Text_Wiki_Parse { /** * * Constructor. * * We override the Text_Wiki_Parse constructor so we can * explicitly comment each part of the $regex property. * * @access public * * @param object &$obj The calling "parent" Text_Wiki object. * */ function Text_Wiki_Parse_Wikilink(&$obj) { parent::Text_Wiki_Parse($obj); // allows numbers as "lowercase letters" in the regex $this->regex = "(!?" . // START WikiPage pattern (1) "[A-Z]" . // 1 upper "[A-Za-z0-9]*" . // 0+ alpha or digit "[a-z0-9]+" . // 1+ lower or digit "[A-Z]" . // 1 upper "[A-Za-z0-9]*" . // 0+ or more alpha or digit ")" . // END WikiPage pattern (/1) "((\#" . // START Anchor pattern (2)(3) "[A-Za-z]" . // 1 alpha "(" . // start sub pattern (4) "[-A-Za-z0-9_:.]*" . // 0+ dash, alpha, digit, underscore, colon, dot "[-A-Za-z0-9_]" . // 1 dash, alpha, digit, or underscore ")?)?)"; // end subpatterns (/4)(/3)(/2) } /** * * First parses for described links, then for standalone links. * * @access public * * @return void * */ function parse() { // described wiki links $tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'processDescr'), $this->wiki->source ); // standalone wiki links $tmp_regex = '/(^|[^A-Za-z0-9\-_])' . $this->regex . '/'; $this->wiki->source = preg_replace_callback( $tmp_regex, array(&$this, 'process'), $this->wiki->source ); } /** * * Generate a replacement for described links. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token to be used as a placeholder in * the source text, plus any text priot to the match. * */ function processDescr(&$matches) { // set the options $options = array( 'page' => $matches[1], 'text' => $matches[5], 'anchor' => $matches[3] ); // create and return the replacement token and preceding text return $this->wiki->addToken($this->rule, $options); // . $matches[7]; } /** * * Generate a replacement for standalone links. * * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token to be used as a placeholder in * the source text, plus any text prior to the match. * */ function process(&$matches) { // when prefixed with !, it's explicitly not a wiki link. // return everything as it was. if ($matches[2]{0} == '!') { return $matches[1] . substr($matches[2], 1) . $matches[3]; } // set the options $options = array( 'page' => $matches[2], 'text' => $matches[2] . $matches[3], 'anchor' => $matches[3] ); // create and return the replacement token and preceding text return $matches[1] . $this->wiki->addToken($this->rule, $options); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/ 777 0 0 0 10163121545 16173 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render.php 777 0 0 7640 10125347570 17004 0wiki =& $obj; // get the config-key-name for this object, // strip the Text_Wiki_Render_ part // 01234567890123456 $tmp = get_class($this); $tmp = substr($tmp, 17); // split into pieces at the _ mark. // first part is format, second part is rule. $part = explode('_', $tmp); $this->format = isset($part[0]) ? ucwords(strtolower($part[0])) : null; $this->rule = isset($part[1]) ? ucwords(strtolower($part[1])) : null; // is there a format but no rule? // then this is the "main" render object, with // pre() and post() methods. if ($this->format && ! $this->rule && isset($this->wiki->formatConf[$this->format]) && is_array($this->wiki->formatConf[$this->format])) { // this is a format render object $this->conf = array_merge( $this->conf, $this->wiki->formatConf[$this->format] ); } // is there a format and a rule? if ($this->format && $this->rule && isset($this->wiki->renderConf[$this->format][$this->rule]) && is_array($this->wiki->renderConf[$this->format][$this->rule])) { // this is a rule render object $this->conf = array_merge( $this->conf, $this->wiki->renderConf[$this->format][$this->rule] ); } } /** * * Simple method to safely get configuration key values. * * @access public * * @param string $key The configuration key. * * @param mixed $default If the key does not exist, return this value * instead. * * @return mixed The configuration key value (if it exists) or the * default value (if not). * */ function getConf($key, $default = null) { if (isset($this->conf[$key])) { return $this->conf[$key]; } else { return $default; } } /** * * Simple method to wrap a configuration in an sprintf() format. * * @access public * * @param string $key The configuration key. * * @param string $format The sprintf() format string. * * @return mixed The formatted configuration key value (if it exists) * or null (if it does not). * */ function formatConf($format, $key) { if (isset($this->conf[$key])) { return sprintf($format, $this->conf[$key]); } else { return null; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/ 777 0 0 0 10170525436 17255 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex.php 777 0 0 4731 10125347570 20057 0 * * @package Text_Wiki * * @todo [http://google.com] becomes 1 with a LaTeX footnote in subscript. * This should be a normal LaTeX footnote associated with the * previous word? * * @todo parse "..." to be ``...'' * * @todo parse '...' to be `...' * * @todo move escape_latex to a static function, move escaping to the * individual .php files they are associated with * * @todo allow the user to add conf items to do things like * + A custom document header * + Custom page headings * + Include packages * + Set Title, Author, Date * + Include a title page * + Not output Document Head/Foot (maybe combinding many pages?) * */ class Text_Wiki_Render_Latex extends Text_Wiki_Render { function escape_latex ($txt) { $txt = str_replace("\\", "\\\\", $txt); $txt = str_replace('#', '\#', $txt); $txt = str_replace('$', '\$', $txt); $txt = str_replace('%', '\%', $txt); $txt = str_replace('^', '\^', $txt); $txt = str_replace('&', '\&', $txt); $txt = str_replace('_', '\_', $txt); $txt = str_replace('{', '\{', $txt); $txt = str_replace('}', '\}', $txt); // Typeset things a bit prettier than normas $txt = str_replace('~', '$\sim$', $txt); $txt = str_replace('...', '\ldots', $txt); return $txt; } function escape($tok, $ele) { if (isset($tok[$ele])) { $tok[$ele] = $this->escape_latex($tok[$ele]); } return $tok; } function pre() { foreach ($this->wiki->tokens as $k => $tok) { if ($tok[0] == 'Code') { continue; } $tok[1] = $this->escape($tok[1], 'text'); $tok[1] = $this->escape($tok[1], 'page'); $tok[1] = $this->escape($tok[1], 'href'); $this->wiki->tokens[$k] = $tok; } $this->wiki->source = $this->escape_latex($this->wiki->source); return "\\documentclass{article}\n". "\\usepackage{ulem}\n". "\\pagestyle{headings}\n". "\\begin{document}\n"; } function post() { return "\\end{document}\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Anchor.php 777 0 0 1154 10125347570 21265 0 * * @package Text_Wiki * */ class Text_Wiki_Render_Latex_Anchor extends Text_Wiki_Render { function token($options) { extract($options); // $type, $name if ($type == 'start') { //return sprintf('',$name); return ''; } if ($type == 'end') { //return ''; return ''; } } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Blockquote.php 777 0 0 1405 10125347570 22162 0 null); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $type = $options['type']; $level = $options['level']; // starting if ($type == 'start') { return "\\begin{quote}\n"; } // ending if ($type == 'end') { return "\\end{quote}\n\n"; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Bold.php 777 0 0 127 10125345744 20713 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Break.php 777 0 0 712 10125345744 21057 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Center.php 777 0 0 1352 10125347570 21273 0\n"; return '
    '; } if ($options['type'] == 'end') { //return "\n"; return '
    '; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Code.php 777 0 0 1030 10125345744 20717 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Colortext.php 777 0 0 2245 10125345744 22041 0colors)) { $color = '#' . $color; } if ($type == 'start') { return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Deflist.php 777 0 0 2216 10125345744 21446 0 null, 'css_dt' => null, 'css_dd' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $type = $options['type']; switch ($type) { case 'list_start': return "\\begin{description}\n"; case 'list_end': return "\\end{description}\n\n"; case 'term_start': return '\item['; case 'term_end': return '] '; case 'narr_start': return '{'; case 'narr_end': return "}\n"; default: return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Delimiter.php 777 0 0 1106 10125345744 21767 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Embed.php 777 0 0 731 10125347570 21047 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Emphasis.php 777 0 0 1137 10125347570 21625 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Freelink.php 777 0 0 1435 10125347570 21614 0 array(), 'view_url' => 'http://example.com/index.php?page=%s', 'new_url' => 'http://example.com/new.php?page=%s', 'new_text' => '?' ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // get nice variable names (page, text, anchor) extract($options); return "$text\\footnote\{$anchor} "; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Function.php 777 0 0 720 10131556200 21603 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Heading.php 777 0 0 1460 10125345744 21413 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Horiz.php 777 0 0 747 10125345744 21136 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Html.php 777 0 0 737 10125345744 20746 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Image.php 777 0 0 3505 10125347570 21077 0 '/' ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { return 'Image: NI'; $src = '"' . $this->getConf('base', '/') . $options['src'] . '"'; if (isset($options['attr']['link'])) { // this image has a link if (strpos($options['attr']['link'], '://')) { // it's a URL $href = $options['attr']['link']; } else { $href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . $options['attr']['link']; } } else { // image is not linked $href = null; } // unset these so they don't show up as attributes unset($options['attr']['link']); $attr = ''; $alt = false; foreach ($options['attr'] as $key => $val) { if (strtolower($key) == 'alt') { $alt = true; } $attr .= " $key=\"$val\""; } // always add an "alt" attribute per Stephane Solliec if (! $alt) { $attr .= ' alt="' . basename($options['src']) . '"'; } if ($href) { return ""; } else { return ""; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Include.php 777 0 0 211 10125347570 21407 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Interwiki.php 777 0 0 3076 10125347570 22025 0 array( 'MeatBall' => 'http://www.usemod.com/cgi-bin/mb.pl?%s', 'Advogato' => 'http://advogato.org/%s', 'Wiki' => 'http://c2.com/cgi/wiki?%s' ), 'target' => '_blank' ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $site = $options['site']; $page = $options['page']; $text = $options['text']; if (isset($this->conf['sites'][$site])) { $href = $this->conf['sites'][$site]; } else { return $text; } // old form where page is at end, // or new form with %s placeholder for sprintf()? if (strpos($href, '%s') === false) { // use the old form $href = $href . $page; } else { // use the new form $href = sprintf($href, $page); } // allow for alternative targets $target = $this->getConf('target', ''); if ($target && trim($target) != '') { $target = " target=\"$target\""; } return "$text\\footnote\{$href}"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Italic.php 777 0 0 135 10125345744 21237 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/List.php 777 0 0 3167 10125347570 20774 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Newline.php 777 0 0 237 10125345744 21436 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Paragraph.php 777 0 0 1162 10125345744 21760 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Phplookup.php 777 0 0 1424 10125347570 22034 0 '_blank'); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { return 'Phplookup: NI'; $text = trim($options['text']); $target = $this->getConf('target', ''); if ($target) { $target = " target=\"$target\""; } return "$text"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Prefilter.php 777 0 0 3301 10125347570 22003 0 | // +----------------------------------------------------------------------+ // // $Id: Prefilter.php,v 1.2 2004/09/25 19:05:13 pmjones Exp $ /** * * This class implements a Text_Wiki_Render_Latex to "pre-filter" source text so * that line endings are consistently \n, lines ending in a backslash \ * are concatenated with the next line, and tabs are converted to spaces. * * @author Jeremy Cowgar * * @package Text_Wiki * */ class Text_Wiki_Render_Latex_Prefilter extends Text_Wiki_Render { function token() { return ''; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Raw.php 777 0 0 725 10125345744 20570 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Revise.php 777 0 0 1455 10125345744 21315 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Shockwaveflash.php 777 0 0 6250 10170575172 23026 0 '/', 'css' => null, 'css_link' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // note the image source $src = $options['src']; // is the source a local file or URL? if (strpos($src, '://') === false) { // the source refers to a local file. // add the URL base to it. $src = $this->getConf('base', '/') . $src; } // stephane@metacites.net // is the image clickable? if (isset($options['attr']['link'])) { // yes, the image is clickable. // are we linked to a URL or a wiki page? if (strpos($options['attr']['link'], '://')) { // it's a URL $href = $options['attr']['link']; } else { // it's a WikiPage; assume it exists. /** @todo This needs to honor sprintf wikilinks (pmjones) */ /** @todo This needs to honor interwiki (pmjones) */ /** @todo This needs to honor freelinks (pmjones) */ $href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . $options['attr']['link']; } } else { // image is not clickable. $href = null; } // unset so it won't show up as an attribute unset($options['attr']['link']); if (empty($options['attr']['width'])) { $options['attr']['width'] = "100%"; } if (empty($options['attr']['height'])) { $options['attr']['height'] = "100%"; } // start the HTML output $output = ' '; // was the image clickable? if ($href) { // yes, add the href and return $href = htmlspecialchars($href); $output = "$output"; } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Strong.php 777 0 0 1143 10125345744 21326 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Superscript.php 777 0 0 1221 10125345744 22372 0'; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Table.php 777 0 0 4715 10125347570 21110 0 null, 'css_tr' => null, 'css_th' => null, 'css_td' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // make nice variable names (type, attr, span) extract($options); switch ($type) { case 'table_start': $this->cell_count = $cols; $tbl_start = '\begin{tabular}{|'; for ($a=0; $a < $this->cell_count; $a++) { $tbl_start .= 'l|'; } $tbl_start .= "}\n"; return $tbl_start; case 'table_end': return "\\hline\n\\end{tabular}\n"; case 'row_start': $this->is_spanning = false; $this->cell_id = 0; return "\\hline\n"; case 'row_end': return "\\\\\n"; case 'cell_start': if ($span > 1) { $col_spec = ''; if ($this->cell_id == 0) { $col_spec = '|'; } $col_spec .= 'l|'; $this->cell_id += $span; $this->is_spanning = true; return "\\multicolumn\{$span}\{$col_spec}{"; } $this->cell_id += 1; return ''; case 'cell_end': $out = ''; if ($this->is_spanning) { $this->is_spanning = false; $out = '}'; } if ($this->cell_id != $this->cell_count) { $out .= ' & '; } return $out; default: return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Tighten.php 777 0 0 213 10131556044 21423 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Toc.php 777 0 0 1077 10125345744 20605 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Tt.php 777 0 0 1137 10125345744 20444 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Url.php 777 0 0 1354 10125347570 20617 0 false, 'images' => true, 'img_ext' => array('jpg', 'jpeg', 'gif', 'png') ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // create local variables from the options array (text, // href, type) extract($options); return " $text\\footnote\{$href}"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Latex/Wikilink.php 777 0 0 3413 10125347570 21634 0 array(), 'view_url' => 'http://example.com/index.php?page=%s', 'new_url' => 'http://example.com/new.php?page=%s', 'new_text' => '?' ); /** * * Renders a token into XHTML. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // make nice variable names (page, anchor, text) extract($options); // are we checking page existence? $list =& $this->getConf('pages'); if (is_array($list)) { // yes, check against the page list $exists = in_array($page, $list); } else { // no, assume it exists $exists = true; } // convert *after* checking against page names so as not to mess // up what the user typed and what we're checking. $page = htmlspecialchars($page); $anchor = htmlspecialchars($anchor); $text = htmlspecialchars($text); $href = $this->getConf('view_url'); if (strpos($href, '%s') === false) { // use the old form (page-at-end) $href = $href . $page . $anchor; } else { // use the new form (sprintf format string) $href = sprintf($href, $page . $anchor); } // get the CSS class and generate output $css = $this->formatConf(' class="%s"', 'css'); return "$text\\footnote\{$href}"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/ 777 0 0 0 10170525432 17237 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain.php 777 0 0 300 10125347570 20011 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Anchor.php 777 0 0 574 10125347570 21240 0 * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Render_Plain_Anchor extends Text_Wiki_Render { function token($options) { return $options['name']; } } ?> aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Blockquote.php 777 0 0 1661 10125347570 22154 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Bold.php 777 0 0 671 10125347570 20704 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Break.php 777 0 0 701 10077246662 21050 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Center.php 777 0 0 673 10125347570 21246 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Code.php 777 0 0 744 10077246662 20705 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Colortext.php 777 0 0 702 10125347570 22002 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Deflist.php 777 0 0 2222 10125347570 21430 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Delimiter.php 777 0 0 702 10077246662 21743 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Embed.php 777 0 0 733 10125347570 21037 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Emphasis.php 777 0 0 701 10125347570 21567 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Freelink.php 777 0 0 722 10077246662 21566 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Function.php 777 0 0 1700 10131560230 21606 0 $val) { $output .= "{$val['type']} {$val['descr']} {$val['default']} "; } $output .= ') '; foreach ($throws as $key => $val) { $output .= "{$val['type']} {$val['descr']} "; } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Heading.php 777 0 0 376 10125347570 21365 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Horiz.php 777 0 0 703 10077246662 21121 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Html.php 777 0 0 740 10077246662 20733 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Image.php 777 0 0 670 10125347570 21045 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Include.php 777 0 0 211 10125347572 21377 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Interwiki.php 777 0 0 723 10125347572 21771 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Italic.php 777 0 0 677 10125347572 21241 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/List.php 777 0 0 3424 10125347572 20760 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Newline.php 777 0 0 237 10077246662 21431 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Paragraph.php 777 0 0 1162 10077246662 21753 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Phplookup.php 777 0 0 1015 10125347572 22020 0 '_blank'); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { return trim($options['text']); } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Prefilter.php 777 0 0 3302 10125347572 21774 0 | // +----------------------------------------------------------------------+ // // $Id: Prefilter.php,v 1.2 2004/09/25 19:05:14 pmjones Exp $ /** * * This class implements a Text_Wiki_Render_Xhtml to "pre-filter" source text so * that line endings are consistently \n, lines ending in a backslash \ * are concatenated with the next line, and tabs are converted to spaces. * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Render_Plain_Prefilter extends Text_Wiki_Render { function token() { return ''; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Raw.php 777 0 0 715 10077246662 20562 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Revise.php 777 0 0 705 10077246662 21265 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Shockwaveflash.php 777 0 0 6250 10170575172 23014 0 '/', 'css' => null, 'css_link' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // note the image source $src = $options['src']; // is the source a local file or URL? if (strpos($src, '://') === false) { // the source refers to a local file. // add the URL base to it. $src = $this->getConf('base', '/') . $src; } // stephane@metacites.net // is the image clickable? if (isset($options['attr']['link'])) { // yes, the image is clickable. // are we linked to a URL or a wiki page? if (strpos($options['attr']['link'], '://')) { // it's a URL $href = $options['attr']['link']; } else { // it's a WikiPage; assume it exists. /** @todo This needs to honor sprintf wikilinks (pmjones) */ /** @todo This needs to honor interwiki (pmjones) */ /** @todo This needs to honor freelinks (pmjones) */ $href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . $options['attr']['link']; } } else { // image is not clickable. $href = null; } // unset so it won't show up as an attribute unset($options['attr']['link']); if (empty($options['attr']['width'])) { $options['attr']['width'] = "100%"; } if (empty($options['attr']['height'])) { $options['attr']['height'] = "100%"; } // start the HTML output $output = ' '; // was the image clickable? if ($href) { // yes, add the href and return $href = htmlspecialchars($href); $output = "$output"; } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Strong.php 777 0 0 705 10077246662 21304 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Superscript.php 777 0 0 704 10077246662 22352 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Table.php 777 0 0 2163 10125347572 21073 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Tighten.php 777 0 0 221 10125347572 21417 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Toc.php 777 0 0 1466 10077246662 20602 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Tt.php 777 0 0 701 10077246662 20413 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Url.php 777 0 0 725 10125347572 20570 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Plain/Wikilink.php 777 0 0 700 10077246662 21604 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/ 777 0 0 0 10170525404 17267 5aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml.php 777 0 0 1463 10125347570 20075 0 HTML_ENTITIES); function pre() { // attempt to translate HTML entities in the source before continuing. $type = $this->getConf('translate', null); // are we translating html? if ($type) { // yes! get the translation table. $xlate = get_html_translation_table($type); // remove the delimiter character it doesn't get translated unset($xlate[$this->wiki->delim]); // translate! $this->wiki->source = strtr($this->wiki->source, $xlate); } } function post() { return; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Anchor.php 777 0 0 1336 10125347572 21310 0 * * @author Paul M. Jones * * @package Text_Wiki * */ class Text_Wiki_Render_Xhtml_Anchor extends Text_Wiki_Render { var $conf = array( 'css' => null ); function token($options) { extract($options); // $type, $name if ($type == 'start') { $css = $this->formatConf(' class="%s"', 'css'); $format = "'"; return sprintf($format ,$name); } if ($type == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Blockquote.php 777 0 0 2151 10125347572 22202 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $type = $options['type']; $level = $options['level']; // set up indenting so that the results look nice; we do this // in two steps to avoid str_pad mathematics. ;-) $pad = str_pad('', $level, "\t"); $pad = str_replace("\t", ' ', $pad); // pick the css type $css = $this->formatConf(' class="%s"', 'css'); // starting if ($type == 'start') { return "$pad"; } // ending if ($type == 'end') { return $pad . "\n"; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Bold.php 777 0 0 1323 10125347572 20752 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($options['type'] == 'end') { return '
    '; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Break.php 777 0 0 1075 10125347572 21122 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $css = $this->formatConf(' class="%s"', 'css'); return "\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Center.php 777 0 0 1167 10125347572 21320 0'; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Code.php 777 0 0 6713 10125347572 20754 0 null, // class for
            'css_code' => null, // class for generic 
            'css_php'  => null, // class for PHP 
            'css_html' => null // class for HTML 
        );
        
        /**
        * 
        * Renders a token into text matching the requested format.
        * 
        * @access public
        * 
        * @param array $options The "options" portion of the token (second
        * element).
        * 
        * @return string The text rendered from the token options.
        * 
        */
        
        function token($options)
        {
            $text = $options['text'];
            $attr = $options['attr'];
               $type = strtolower($attr['type']);
            
            $css      = $this->formatConf(' class="%s"', 'css');
            $css_code = $this->formatConf(' class="%s"', 'css_code');
            $css_php  = $this->formatConf(' class="%s"', 'css_php');
            $css_html = $this->formatConf(' class="%s"', 'css_html');
            
            if ($type == 'php') {
                
                // PHP code example:
                // add the PHP tags
                $text = ""; // ... tags)
                ob_start();
                highlight_string($text);
                $text = ob_get_contents();
                ob_end_clean();
                
                // replace 
    tags with simple newlines. // replace non-breaking space with simple spaces. // translate HTML and color to XHTML and style. // courtesy of research by A. Kalin :-). $map = array( '
    ' => "\n", ' ' => ' ', ' '' => '
    ', 'color="' => 'style="color:' ); $text = strtr($text, $map); // get rid of the last newline inside the code block // (becuase higlight_string puts one there) if (substr($text, -8) == "\n
    ") { $text = substr($text, 0, -8) . "
    "; } // replace all tags with classed tags if ($css_php) { $text = str_replace('', "", $text); } // done $text = "$text
    "; } elseif ($type == 'html' || $type == 'xhtml') { // HTML code example: // add opening and closing tags, // convert tabs to four spaces, // convert entities. $text = str_replace("\t", " ", $text); $text = "\n$text\n"; $text = htmlentities($text); $text = "$text"; } else { // generic code example: // convert tabs to four spaces, // convert entities. $text = str_replace("\t", " ", $text); $text = htmlentities($text); $text = "$text"; } return "\n$text\n\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Colortext.php 777 0 0 2172 10077246754 22066 0colors)) { $color = '#' . $color; } if ($type == 'start') { return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Deflist.php 777 0 0 2671 10125347572 21473 0 null, 'css_dt' => null, 'css_dd' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $type = $options['type']; $pad = " "; switch ($type) { case 'list_start': $css = $this->formatConf(' class="%s"', 'css_dl'); return "\n"; break; case 'list_end': return "\n\n"; break; case 'term_start': $css = $this->formatConf(' class="%s"', 'css_dt'); return $pad . ""; break; case 'term_end': return "\n"; break; case 'narr_start': $css = $this->formatConf(' class="%s"', 'css_dd'); return $pad . $pad . ""; break; case 'narr_end': return "\n"; break; default: return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Delimiter.php 777 0 0 723 10077246754 22001 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Embed.php 777 0 0 717 10125347572 21074 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Emphasis.php 777 0 0 1343 10125347572 21645 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Freelink.php 777 0 0 352 10164032554 21604 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Function.php 777 0 0 5726 10131560230 21653 0 ', ', // the "main" format string 'format_main' => '%access %return %name ( %params ) %throws', // the looped format string for required params 'format_param' => '%type %descr', // the looped format string for params with default values 'format_paramd' => '[%type %descr default %default]', // the looped format string for throws 'format_throws' => 'throws %type %descr' ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { extract($options); // name, access, return, params, throws // build the baseline output $output = $this->conf['format_main']; $output = str_replace('%access', htmlspecialchars($access), $output); $output = str_replace('%return', htmlspecialchars($return), $output); $output = str_replace('%name', htmlspecialchars($name), $output); // build the set of params $list = array(); foreach ($params as $key => $val) { // is there a default value? if ($val['default']) { $tmp = $this->conf['format_paramd']; } else { $tmp = $this->conf['format_param']; } // add the param elements $tmp = str_replace('%type', htmlspecialchars($val['type']), $tmp); $tmp = str_replace('%descr', htmlspecialchars($val['descr']), $tmp); $tmp = str_replace('%default', htmlspecialchars($val['default']), $tmp); $list[] = $tmp; } // insert params into output $tmp = implode($this->conf['list_sep'], $list); $output = str_replace('%params', $tmp, $output); // build the set of throws $list = array(); foreach ($throws as $key => $val) { $tmp = $this->conf['format_throws']; $tmp = str_replace('%type', htmlspecialchars($val['type']), $tmp); $tmp = str_replace('%descr', htmlspecialchars($val['descr']), $tmp); $list[] = $tmp; } // insert throws into output $tmp = implode($this->conf['list_sep'], $list); $output = str_replace('%throws', $tmp, $output); // close the div and return the output $output .= ''; return "\n$output\n\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Heading.php 777 0 0 1235 10125347572 21433 0 null, 'css_h2' => null, 'css_h3' => null, 'css_h4' => null, 'css_h5' => null, 'css_h6' => null ); function token($options) { // get nice variable names (id, type, level) extract($options); if ($type == 'start') { $css = $this->formatConf(' class="%s"', "css_h$level"); return ""; } if ($type == 'end') { return "\n"; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Horiz.php 777 0 0 1103 10125347572 21161 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $css = $this->formatConf(' class="%s"', 'css'); return "\n"; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Html.php 777 0 0 724 10077246754 20770 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Image.php 777 0 0 12125 10125347572 21136 0 '/', 'css' => null, 'css_link' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // note the image source $src = $options['src']; // is the source a local file or URL? if (strpos($src, '://') === false) { // the source refers to a local file. // add the URL base to it. $src = $this->getConf('base', '/') . $src; } // stephane@metacites.net // is the image clickable? if (isset($options['attr']['link'])) { // yes, the image is clickable. // are we linked to a URL or a wiki page? if (strpos($options['attr']['link'], '://')) { // it's a URL $href = $options['attr']['link']; } else { // it's a WikiPage; assume it exists. /** @todo This needs to honor sprintf wikilinks (pmjones) */ /** @todo This needs to honor interwiki (pmjones) */ /** @todo This needs to honor freelinks (pmjones) */ $href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . $options['attr']['link']; } } else { // image is not clickable. $href = null; } // unset so it won't show up as an attribute unset($options['attr']['link']); // stephane@metacites.net -- 25/07/2004 // we make up an align="center" value for the tag. if (isset($options['attr']['align']) && $options['attr']['align'] == 'center') { // unset so it won't show up as an attribute unset($options['attr']['align']); // make sure we have a style attribute if (! isset($options['attr']['style'])) { // no style, set up a blank one $options['attr']['style'] = ''; } else { // style exists, add a space $options['attr']['style'] .= ' '; } // add a "center" style to the existing style. $options['attr']['style'] .= 'display: block; margin-left: auto; margin-right: auto;'; } // stephane@metacites.net -- 25/07/2004 // try to guess width and height if (! isset($options['attr']['width']) && ! isset($options['attr']['height'])) { // does the source refer to a local file or a URL? if (strpos($src,'://')) { // is a URL link $imageFile = $src; } else { // is a local file $imageFile = $_SERVER['DOCUMENT_ROOT'] . $src; } // attempt to get the image size $imageSize = @getimagesize($imageFile); if (is_array($imageSize)) { $options['attr']['width'] = $imageSize[0]; $options['attr']['height'] = $imageSize[1]; } } // start the HTML output $output = 'formatConf(' class="%s"', 'css'); // add the attributes to the output, and be sure to // track whether or not we find an "alt" attribute $alt = false; foreach ($options['attr'] as $key => $val) { // track the 'alt' attribute if (strtolower($key) == 'alt') { $alt = true; } // the 'class' attribute overrides the CSS class conf if (strtolower($key) == 'class') { $css = null; } $key = htmlspecialchars($key); $val = htmlspecialchars($val); $output .= " $key=\"$val\""; } // always add an "alt" attribute per Stephane Solliec if (! $alt) { $alt = htmlspecialchars(basename($options['src'])); $output .= " alt=\"$alt\""; } // end the image tag with the automatic CSS class (if any) $output .= "$css />"; // was the image clickable? if ($href) { // yes, add the href and return $href = htmlspecialchars($href); $css = $this->formatConf(' class="%s"', 'css_link'); $output = "$output"; } return $output; } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Include.php 777 0 0 211 10125347572 21430 0aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Interwiki.php 777 0 0 4156 10125347572 22046 0 array( 'MeatBall' => 'http://www.usemod.com/cgi-bin/mb.pl?%s', 'Advogato' => 'http://advogato.org/%s', 'Wiki' => 'http://c2.com/cgi/wiki?%s' ), 'target' => '_blank', 'css' => null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { $site = $options['site']; $page = $options['page']; $text = $options['text']; $css = $this->formatConf(' class="%s"', 'css'); if (isset($this->conf['sites'][$site])) { $href = $this->conf['sites'][$site]; } else { return $text; } // old form where page is at end, // or new form with %s placeholder for sprintf()? if (strpos($href, '%s') === false) { // use the old form $href = $href . $page; } else { // use the new form $href = sprintf($href, $page); } // allow for alternative targets $target = $this->getConf('target'); // build base link $text = htmlspecialchars($text); $output = "aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/Italic.php 777 0 0 1331 10125347572 21276 0 null ); /** * * Renders a token into text matching the requested format. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { if ($options['type'] == 'start') { $css = $this->formatConf(' class="%s"', 'css'); return ""; } if ($options['type'] == 'end') { return ''; } } } ?>aroundme_0_4_0/www/aroundme_0_4_0/class/Wiki/Wiki/Render/Xhtml/List.php 777 0 0 10100 10125347572 21016 0 null, 'css_ol_li' => null, 'css_ul' => null, 'css_ul_li' => null ); /** * * Renders a token into text matching the requested format. * * This rendering method is syntactically and semantically compliant * with XHTML 1.1 in that sub-lists are part of the previous list item. * * @access public * * @param array $options The "options" portion of the token (second * element). * * @return string The text rendered from the token options. * */ function token($options) { // make nice variables (type, level, count) extract($options); // set up indenting so that the results look nice; we do this // in two steps to avoid str_pad mathematics. ;-) $pad = str_pad('', $level, "\t"); $pad = str_replace("\t", ' ', $pad); switch ($type) { case 'bullet_list_start': // build the base HTML $css = $this->formatConf(' class="%s"', 'css_ul'); $html = ""; // if this is the opening block for the list, // put an extra newline in front of it so the // output looks nice. if ($level == 0) { $html = "\n$html"; } // done! return $html; break; case 'bullet_list_end': // build the base HTML $html = "
  • All original material contributed to aroundme is deemed to be free content under the GNU Free Documentation License (GFDL), meaning that it may be freely used, freely edited, freely copied and freely redistributed subject to the restrictions of that license. Original photographs and media are welcome if the creator is willing to license them under the terms of the GFDL. No for profit organsiation material, marketing material or advertising of any kind are allowed within this site. "; ?> aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/README.txt 777 0 0 2745 10170664577 21044 0>> aroundme version 0.4.0 // ----------------------------------------------------------------------- // This file is part of aroundme // // Copyright (C) 2003, 2005 Barnraiser // http://www.barnraiser.org/ // info@barnraiser.org // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) any // later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with program; see the file COPYING. If not, write to the Free // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // ----------------------------------------------------------------------- >> FILES WITHIN THIS DIRECTORY All files in this directory are under the above license. Please see 'COPYING' for more infomration. >> COPYING See the "copying.txt" file in the root directory of aroundme for instructions. Please note, all images showing "aroundme" or "barnraiser" logos are a trademark of Barnraiser. You can distribute them under the terms of the copy license, however you are forbidden to alter them. aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/registration.txt.php 777 0 0 426 10131730706 23342 0Hi USERNAME, To complete your registration just click on the link below. You will be taken to a setup page. Your access code is PASSWORD URL Welcome! the team If you get any problems just reply to this email and you will be put into contact with our support department. aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/texts/send_new_password.txt.php 777 0 0 474 10166614277 24373 0Hi FIRSTNAME, You requested a new aroundme password (PASSWORD). Click on the link below and enter your email and password to get back into aroundme. You can change your password in your membership page once logged in. the aroundme team. URL This email was sent to you from aroundme. http://www.barnraiser.org/aroundme_0_4_0/www/aroundme_0_4_0/language/1/am_default/welcome.lang.php 777 0 0 5255 10170664324 21250 0 aroundme_0_4_0/www/aroundme_0_4_0/mag_item.php 777 0 0 23164 10170756636 14462 0noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //setup comment $comment = new Comment($db, null, $date); //$comment->user_id = $me['user_id']; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('wikilink'); //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_comment"; } elseif (isset($_POST['insert'])) { $comment->item_id = $_REQUEST['comment_item_id']; $comment->user_id = $me['user_id']; if (isset($blog_id)) { if (isset($section_id) && $section_id == $c_acs['arr_section']['user']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['user_blog']; } elseif (isset($section_id) && $section_id == $c_acs['arr_section']['group']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; } $link = "blog_id=". $blog_id; } elseif (isset($subject_id)) { $comment->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; $link = "subject_id=". $subject_id; } elseif (isset($poll_id)) { if (isset($section_id) && $section_id == $c_acs['arr_section']['user']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['user_poll']; } elseif (isset($section_id) && $section_id == $c_acs['arr_section']['group']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; } $link = "poll_id=". $poll_id; } elseif (isset($library_id)) { if (isset($section_id) && $section_id == $c_acs['arr_section']['user']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['user_library']; } elseif (isset($section_id) && $section_id == $c_acs['arr_section']['group']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['group_library']; } $link = "library_id=". $library_id; } $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); $statistic->section_item_id = $me['user_id']; $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $statistic->setStatistic($comment->getCommentCount()); //goto the item return header("Location: mag_item.php?" . $link . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } if (isset($blog_id)) { $blog = new Blog($db, null, $date, $file); $blog->blog_id = $blog_id; $output_blog = $blog->getBlog(); if ($output_blog['section_id'] == $c_acs['arr_section']['user']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['user_blog']; $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'user/'); } elseif ($output_blog['section_id'] == $c_acs['arr_section']['group']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'group/'); } $output_blog['blog_body_display'] = $wiki->transform($output_blog['blog_body'], 'Xhtml'); $comment->item_id = $blog_id; $comment->section_item_id = $output_blog['user_id']; $output_comments = $comment->getComments($blog_id); if (isset($output_blog['user_id'])) { $user->user_id = $output_blog['user_id']; $output_author = $user->getProfile(); } if (!empty($output_author['profile_allow_comments']) && !empty($output_blog['blog_allow_comments'])) { $allow_add_comment = true; } } if (isset($subject_id)) { $forum = new Forum($db, null, $date, $file); $forum->subject_id = $subject_id; $output_subject = $forum->getSubject(); $comment->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; $comment->item_id = $subject_id; $comment->section_item_id = $output_subject['user_id']; $output_comments = $comment->getComments($subject_id); if (isset($output_subject['user_id'])) { $user->user_id = $output_subject['user_id']; $output_author = $user->getProfile(); } if (!empty($output_author['profile_allow_comments'])) { $allow_add_comment = true; } } if (isset($poll_id)) { $poll = new Poll($db, null, $date); $poll->poll_id = $poll_id; $output_poll = $poll->getPoll(); $output_poll['current_answer'] = $poll->pollUserCurrentVote($me['user_id']); if (isset($output_poll)) { $output_poll_history = $poll->pollUserVoteHistory($me['user_id']); } $comment->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; $comment->item_id = $poll_id; $comment->section_item_id = $output_poll['section_item_id']; $output_comments = $comment->getComments($poll_id); //get users vote for each comment if (isset($output_comments)) { foreach($output_comments as $key => $i): $output_comments[$key]['vote'] = $poll->pollUserVoteHistory($i['user_id']); endforeach; } if (isset($output_poll['user_id'])) { $user->user_id = $output_poll['user_id']; $output_author = $user->getProfile(); } if (!empty($output_author['profile_allow_comments'])) { $allow_add_comment = true; } } if (isset($library_id)) { $library = new Library($db, null, $date, $file); $library->library_id = $library_id; $output_library_item = $library->getPageID(); if ($output_library_item['section_id'] == $c_acs['arr_section']['user']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['user_library']; $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'user/'); } elseif ($output_library_item['section_id'] == $c_acs['arr_section']['group']) { $comment->cms_item_type_id = $c_node['cms']['item_type']['group_library']; $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'group/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'group/'); } $output_library_item['library_body'] = $wiki->transform($output_library_item['library_body'], 'Xhtml'); $comment->item_id = $library_id; $comment->section_item_id = $output_library_item['user_id']; $output_comments = $comment->getComments($library_id); if (isset($output_library_item['user_id'])) { $user->user_id = $output_library_item['user_id']; $output_author = $user->getProfile(); } if (!empty($output_author['profile_allow_comments']) && !empty($output_library_item['library_allow_comments'])) { $allow_add_comment = true; } } //move to template if (!empty($output_blog)) { $body->set('blog', $output_blog); } if (!empty($output_subject)) { $body->set('subject', $output_subject); } if (!empty($output_poll)) { $body->set('poll', $output_poll); } if (!empty($output_library_item)) { $body->set('library', $output_library_item); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($output_author)) { $body->set('author', $output_author); } if (!empty($allow_add_comment)) { $body->set('allow_add_comment', $allow_add_comment); } if (!empty($display)) { $body->set('display', $display); } if (isset($output_poll_history)) { $body->set('poll_history', $output_poll_history); } $template_pageLink = $lang['txt_magazine_name']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/mag_list.php 777 0 0 12651 10170663145 14466 0noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, null); $cms->level_id = $c_node['cms']['cms_level']['node']; $cms->cms_status_id = $c_node['cms']['status']['live']; $cms->language_ids = $me['language_ids']; if (isset($_REQUEST['list']) && $_REQUEST['list'] == "blog") { //get blog ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; $output_g_cms_blogs = $cms->getCmsItems(); $cms->cms_item_type_id = $c_node['cms']['item_type']['user_blog']; $output_u_cms_blogs = $cms->getCmsItems(); $output_cms_blogs = array_merge($output_g_cms_blogs, $output_u_cms_blogs); foreach($output_cms_blogs as $key => $i): $cms_blog_ids[] = $i['item_id']; endforeach; //setup blog $blog = new Blog($db, null, $date, $file); //get blog items if (!empty($cms_blog_ids)) { $blog->blog_ids = $cms_blog_ids; $output_blogs = $blog->getBlogs(); } } if (isset($_REQUEST['list']) && $_REQUEST['list'] == "forum_subject") { //get forum subject ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; $output_cms_subjects = $cms->getCmsItems(); foreach($output_cms_subjects as $key => $i): $cms_subject_ids[] = $i['item_id']; endforeach; //setup forum $forum = new Forum($db, null, $date, $file); //get subjects if (!empty($cms_subject_ids)) { $forum->subject_ids = $cms_subject_ids; $output_subjects = $forum->getSubjects(); } } if (isset($_REQUEST['list']) && $_REQUEST['list'] == "polls") { //get group poll ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; $output_cms_polls = $cms->getCmsItems(); foreach($output_cms_polls as $key => $i): $cms_poll_ids[] = $i['item_id']; endforeach; // poll setup $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->order_by = "poll_start_datetime desc"; //get polls if (!empty($cms_poll_ids)) { $poll->poll_ids = $cms_poll_ids; $output_polls = $poll->getPolls(); } } if (isset($_REQUEST['list']) && $_REQUEST['list'] == "library") { //get library ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_library']; $output_g_cms_library_items = $cms->getCmsItems(); $cms->cms_item_type_id = $c_node['cms']['item_type']['user_library']; $output_u_cms_library_items = $cms->getCmsItems(); $output_cms_library_items = array_merge($output_g_cms_library_items, $output_u_cms_library_items); foreach($output_cms_library_items as $key => $i): $cms_library_item_ids[] = $i['item_id']; endforeach; //library setup $library = new Library($db, null, $date, $file); //get library items if (!empty($cms_library_item_ids)) { $library->library_item_ids = $cms_library_item_ids; $output_library_items = $library->getLibraryItems(); } } //move to template if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); $body->set('cms_blogs', $output_cms_blogs); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); $body->set('cms_subjects', $output_cms_subjects); } if (!empty($output_polls)) { $body->set('polls', $output_polls); $body->set('cms_polls', $output_cms_polls); } if (!empty($output_library_items)) { $body->set('library_items', $output_library_items); $body->set('cms_library_items', $output_cms_library_items); } if (!empty($genre_id)) { $body->set('genre_id', $genre_id); } if (!empty($output_search_results)) { $body->set('search_results', $output_search_results); } if (!empty($search)) { $body->set('search', $search); } if (!empty($display)) { $body->set('display', $display); } $template_pageLink = $lang['txt_magazine_name']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/mag_overview.php 777 0 0 12740 10170663142 15355 0 0) { $genre_id = $_REQUEST['search_genre_id']; } else { $genre_id = null; } if (!empty($_REQUEST['search_text'])) { $search = $_REQUEST['search_text']; } else { $search = null; } //append language setup require_once($languageArrayPath . 'arr_genre.lang.php'); require_once($languageArrayPath . 'arr_cms.lang.php'); //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, null); $cms->level_id = $c_node['cms']['cms_level']['node']; $cms->cms_status_id = $c_node['cms']['status']['live']; $cms->language_ids = $me['language_ids']; $cms->limit = 10; //get blog ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; $output_g_cms_blogs = $cms->getCmsItems(); $cms->cms_item_type_id = $c_node['cms']['item_type']['user_blog']; $output_u_cms_blogs = $cms->getCmsItems(); $output_cms_blogs = array_merge($output_g_cms_blogs, $output_u_cms_blogs); foreach($output_cms_blogs as $key => $i): $cms_blog_ids[] = $i['item_id']; endforeach; //get forum subject ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; $output_cms_subjects = $cms->getCmsItems(); foreach($output_cms_subjects as $key => $i): $cms_subject_ids[] = $i['item_id']; endforeach; //get group poll ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; $output_cms_polls = $cms->getCmsItems(); foreach($output_cms_polls as $key => $i): $cms_poll_ids[] = $i['item_id']; endforeach; //get library ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_library']; $output_g_cms_library_items = $cms->getCmsItems(); $cms->cms_item_type_id = $c_node['cms']['item_type']['user_library']; $output_u_cms_library_items = $cms->getCmsItems(); $output_cms_library_items = array_merge($output_g_cms_library_items, $output_u_cms_library_items); foreach($output_cms_library_items as $key => $i): $cms_library_item_ids[] = $i['item_id']; endforeach; //setup blog $blog = new Blog($db, null, $date, $file); $blog->genre_id = $genre_id; //get blog items if (!empty($cms_blog_ids)) { $blog->blog_ids = $cms_blog_ids; $output_blogs = $blog->getBlogs($search); } //setup forum $forum = new Forum($db, null, $date, $file); $forum->genre_id = $genre_id; //get subjects if (!empty($cms_subject_ids)) { $forum->subject_ids = $cms_subject_ids; $output_subjects = $forum->getSubjects($search); } // poll setup $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->order_by = "poll_start_datetime desc"; //get polls if (!empty($cms_poll_ids)) { $poll->poll_ids = $cms_poll_ids; $output_polls = $poll->getPolls($search); } //library setup $library = new Library($db, null, $date, $file); $library->genre_id = $genre_id; //get library items if (!empty($cms_library_item_ids)) { $library->library_item_ids = $cms_library_item_ids; $output_library_items = $library->getLibraryItems($search); } //move to template if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); $body->set('cms_blogs', $output_cms_blogs); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); $body->set('cms_subjects', $output_cms_subjects); } if (!empty($output_polls)) { $body->set('polls', $output_polls); $body->set('cms_polls', $output_cms_polls); } if (!empty($output_library_items)) { $body->set('library_items', $output_library_items); $body->set('cms_library_items', $output_cms_library_items); } if (!empty($genre_id)) { $body->set('genre_id', $genre_id); } if (!empty($output_search_results)) { $body->set('search_results', $output_search_results); } if (!empty($search)) { $body->set('search', $search); } if (!empty($display)) { $body->set('display', $display); } $template_pageLink = $lang['txt_magazine_name']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/msg_compose.php 777 0 0 14042 10170663137 15177 0disableRule('freelink'); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); // Gettings list of friends $sn = new Socialnetwork($me['user_id'], $db, $c_node['node']['node_id'], $c_node['sn']['max_degree']); $sn->relation_type_ids = $c_node['user']['relation_type']; $sn->status_ids = $c_node['user']['status']; $sn->date = $date; // Handling the message choices if (isset($_REQUEST['send_message'])) { $message_subject = stripslashes(htmlspecialchars($data['message_subject'])); $im->sendMessage($data['to_user_id'], $message_subject, $data['message_body']); header("Location: msg_list.php?" . SID); exit; } elseif (isset($_REQUEST['reply'])) { $message = new Message($db, $_REQUEST['message_id']); // create message $message->setBoxes($c_node['messaging']['message_in_box'], $c_node['messaging']['message_save_box'], $c_node['messaging']['message_out_box']); $output_message = $message->getMessage(); // get message // Getting username $user->user_id = $output_message['from_user_id']; $to_user = $user->getProfile(); $to_user_id = $output_message['from_user_id']; // Adding RE (langauge node?) $output_message["message_subject"] = "RE: ".$output_message["message_subject"]; // Changing message_body $output_message["message_body"] = "\n\n----\n".$output_message["message_body"]; // Checks if that user have blocked me.... if ($sn->checkUserBlocked($to_user_id)) { $display = "compose_allowed"; } } elseif (isset($_POST['preview_message'])) { $output_message["message_subject"] = stripslashes(htmlspecialchars($data["message_subject"])); $output_message["message_body"] = stripslashes($data["message_body"]); $output_message['message_body_display'] = $wiki->transform($output_message['message_body'], 'Xhtml'); $to_user_id = $data['to_user_id']; $user->user_id = $data['to_user_id']; $to_user = $user->getProfile(); $display = "preview_msg"; } elseif (isset($_POST['edit_message_again'])) { $output_message["message_subject"] = stripslashes($data['message_subject']); $output_message["message_body"] = stripslashes($data["message_body"]); $to_user_id = $data['to_user_id']; $user->user_id = $data['to_user_id']; $to_user = $user->getProfile(); $display = "compose_allowed"; } elseif (isset($_REQUEST['to_user_id'])) { //check to see whether we are allowed to IM this person if ($sn->checkUserBlocked($_REQUEST['to_user_id'])) { $user->user_id = $_REQUEST['to_user_id']; $to_user = $user->getProfile(); $to_user_id = $_REQUEST['to_user_id']; $output_message['message_subject'] = ""; $output_message['message_body'] = ""; $display = "compose_allowed"; } } else { $output_message['message_subject'] = ""; $output_message['message_body'] = ""; $display = "compose_allowed"; } $output_friend_ids = $sn->getFriends($me['user_id']); if (!empty($output_friend_ids)) { foreach($output_friend_ids as $key => $i): $user->user_ids[] = $i; endforeach; } unset ($user->file); $user->orderby = "p.profile_nic"; $output_friends = $user->getProfiles(); if (!empty($output_friends)) { foreach($output_friends as $key => $i): if (empty($i['profile_allow_msg'])) { unset($output_friends[$key]); } endforeach; } //---------------------------------------------------------------------------- // Setting statistics $im->setStatistics(); // Getting statistics $output_message_statistics = $im->getStatistics(); //---------------------------------------------------------------------------- //display "no compose" screen if MB is over 100% full $percentage_used = floor((100/$output_message_statistics['total_size_allowed']) * $output_message_statistics['total_size']); if (isset($percentage_used) && $percentage_used >= 100) { $display = "size_allocation_exceeded"; } //move to template if (!empty($output_friends)) { $body->set('users', $output_friends); } if (!empty($output_message)) { $body->set('message', $output_message); } if (!empty($old_subject)) { $body->set('old_subject', $old_subject); } else { $body->set('old_subject', ""); } if (!empty($old_message)) { $body->set('old_message', $old_message); } else { $body->set('old_message', ""); } if (!empty($friends)) { $body->set('friends', $friends);// List of friends } if (!empty($to_user_id)) { $body->set('to_user_id', $to_user_id);// to_user_id } if (!empty($to_user)) { $body->set('to_user', $to_user);// Name of user to_user_id } if (isset($display)) { $body->set('display', $display);// Name of user to_user_id } $body->set('message_statistics', $output_message_statistics); // Stats... $body->set('message_status_read', $c_node['messaging']['message_status_read']); // Status code: READ $body->set('message_status_unread', $c_node['messaging']['message_status_unread']); // Status code: UNREAD $template_pageLink = "message"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/msg_item.php 777 0 0 7070 10170663135 14451 0setStatistics(); $output_message_statistics = $im->getStatistics(); //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('freelink'); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); // Handling the message choices if (!isset($_REQUEST['message_id'])) { header("Location: msg_list.php?". $_SERVER["QUERY_STRING"] . "&" . SID); exit; } else { if (isset($_POST['delete_messages'])) { $im->deleteMessages(array($_POST['message_id'])); header("Location: msg_list.php?". $_SERVER["QUERY_STRING"] . "&" . SID); exit; } elseif (isset($_REQUEST['reply'])) { header("Location: msg_compose.php?reply=1&message_id=" . $_REQUEST['message_id'] . "&" . SID); exit; } else { $message = new Message($db, $_REQUEST['message_id']); // create message // Getting the status from "query_string".... if (isset($_REQUEST['set_unread_messages'])) { $status = $c_node['messaging']['message_status_unread']; } else { $status = $c_node['messaging']['message_status_read']; } $message->user_id = $user_id; $message->setStatus($status); // set status of the message $message->setBoxes($c_node['messaging']['message_in_box'], $c_node['messaging']['message_save_box'], $c_node['messaging']['message_out_box']); $output_message = $message->getMessage(); // get message $output_message['message_body'] = $wiki->transform($output_message['message_body'], 'Xhtml'); //setup file $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; //setup file if (isset($output_message['file_id'])) { $file->file_id = $output_message['file_id']; $output_message['image'] = $file->getFileRecord(); } elseif (isset($output_profile)) { $output_message['image']['file_title'] = ""; $output_message['image']['file'] = $file->noimage; } } } //move to template if (isset($output_message)) { $body->set('message', $output_message); } if(isset($output_message["message_box"])) { $body->set('message_box', $message->getMessageBox($output_message["message_box"]) ); } $body->set('message_statistics', $output_message_statistics); $body->set('message_status_read', $c_node['messaging']['message_status_read']); $body->set('message_status_unread', $c_node['messaging']['message_status_unread']); $template_pageLink = "message"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/msg_list.php 777 0 0 5562 10170663132 14467 0deleteMessages($_POST['message_id']); $update = "yes"; } else if (isset($_POST['move_to_save'])) { $im->moveToSavebox($_POST['message_id']); $update = "yes"; } else if (isset($_POST['set_unread_messages']) && isset($_POST['message_id'])) { $im->setMessagesStatus($_POST['message_id'], $im->getStatus("unread")); $update = "yes"; } else if (isset($_POST['set_read_messages']) && isset($_POST['message_id'])) { $im->setMessagesStatus($_POST['message_id'], $im->getStatus("read")); $update = "yes"; } else unset($update); if(isset($update) || !empty($update)) { header("Location: msg_list.php?".$_SERVER["QUERY_STRING"] . "&" . SID); exit; } //---------------------------------------------------------------------------- // Handling message box requests if (isset($_REQUEST['out_box'])) { $message_box = "out_box"; } elseif (isset($_REQUEST['save_box'])) { $message_box = "save_box"; } else { $message_box = "in_box"; } // Get the listing of the requested message box $output_message = $im->getMessageBox($message_box); //---------------------------------------------------------------------------- // Setting statistics $im->setStatistics(); // Getting statistics $output_message_statistics = $im->getStatistics(); //---------------------------------------------------------------------------- //move to template $body->set('messages', $output_message); $body->set('message_box', $message_box); $body->set('message_statistics', $output_message_statistics); $body->set('message_status_read', $c_node['messaging']['message_status_read']); $body->set('message_status_unread', $c_node['messaging']['message_status_unread']); $template_pageLink = "message list"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_blog.php 777 0 0 15010 10170663126 14306 0noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif //setup blog $blog = new Blog($db, $c_acs['arr_section']['user'], $date, $file); $blog->user_id = $user_id; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); if (isset($_POST['edit_blog']) || isset($_REQUEST['add_blog'])) { //get images $output_images = $file->getFiles(); } if (isset($data)) {//post data received $data['blog_body'] = stripslashes($data['blog_body']); $data['blog_body_display'] = $wiki->transform($data['blog_body'], 'Xhtml'); $data['blog_synopsis'] = stripslashes(htmlspecialchars($data['blog_synopsis'])); $data['blog_title'] = stripslashes(htmlspecialchars($data['blog_title'])); if (isset($_POST['preview_blog'])) { $data['blog_body'] = htmlspecialchars($data['blog_body']); $output_blog = $data; $display = "preview_blog"; } elseif (isset($_POST['edit_blog_again'])) { $output_blog = $data; $display = "add_blog"; } elseif (isset($_POST['insert_blog'])) { $blog->section_item_id = $me['user_id']; if (isset($data['degree_id']) && $data['degree_id'] == "node") { $data['degree_id'] = "null"; $data['level_id'] = $c_node['cms']['cms_level']['node']; } $blog->insertBlog($data); if (empty($GLOBALS['am_error_log'])) { if (!empty($data['level_id'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['user']); $cms->section_item_id = $me['user_id']; $cms->cms_item_type_id = $c_node['cms']['item_type']['user_blog']; $cms->user_id = $me['user_id']; $temp['language_id'] = $me['language_id']; $temp['item_id'] = $blog->blog_id; $temp['genre_id'] = $data['genre_id']; //insert node cms entry $temp['level_id'] = $c_node['cms']['cms_level']['node']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); //update stats $statistic->section_item_id = $user_id; $statistic->statistic_type_id = $c_node['statistic']['user']['total_blogs']; $blog->section_item_id = $user_id; $statistic->setStatistic($blog->getBlogCount()); header("Location: my_blog.php?blog_id=" . $blog->blog_id . "&" . SID); exit; } else { $output_blog = $data; $display = "add_blog"; } } elseif (isset($_POST['update_blog'])) { if (isset($data['degree_id']) && $data['degree_id'] == "node") { $data['degree_id'] = "null"; $data['level_id'] = $c_node['cms']['cms_level']['node']; } $blog->updateBlog($data); if (empty($GLOBALS['am_error_log'])) { header("Location: my_blog.php?blog_id=" . $data['blog_id'] . "&" . SID); exit; } else { $output_blog = $data; $display = "add_blog"; } } } elseif (isset($_POST['edit_blog'])) { $blog->blog_id = $blog_id; $output_blog = $blog->getBlog(); $display = "add_blog"; } elseif (isset($_REQUEST['add_blog'])) { $display = "add_blog"; } elseif (isset($_REQUEST['delete_blog'])) { $blog->deleteBlogs(array($blog_id)); header("Location: my_blog.php?" . SID); exit; } elseif (isset($blog_id)) {//if we have a blog id we retrieve it $blog->blog_id = $blog_id; $output_blog = $blog->getBlog(); $output_blog['blog_body_display'] = $wiki->transform($output_blog['blog_body'], 'Xhtml'); //setup comment require_once($c_node['dir']['class_path'] . 'Comment.class.php'); $comment = new Comment($db, $c_node['cms']['item_type']['user_blog'], $date); $comment->item_id = $blog_id; $output_comments = $comment->getComments(); $display = "view_blog"; } else { $blog->file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $blog->file->thumb = $c_node['file']['image']['thumb'][3]['name']; unset($blog->user_id); $blog->section_item_id = $me['user_id']; $output_blogs = $blog->getBlogs(); $display = "list_blogs"; } $output_user['language_ids'] = $me['language_ids']; //move vars to template if (!empty($output_user)) { $body->set('user', $output_user); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_blog)) { $body->set('blog', $output_blog); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); } if (!empty($output_images)) { $body->set('images', $output_images); $body->set('image_thumbs', $c_node['file']['image']['thumb']); } $body->set('level_node', $c_node['cms']['cms_level']['node']); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_bookmarks.php 777 0 0 20531 10170663123 15354 0bookmark_type = $c_node['bookmark']['type']['watch']; $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; if (isset($_POST['watch_blog_delete_id']) && $_POST['watch_blog_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['watch_blog_delete_id']); } $watched_blog_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; if (isset($_POST['watch_activity_delete_id']) && $_POST['watch_activity_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['watch_activity_delete_id']); } $watched_activity_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_library']; if (isset($_POST['watch_library_delete_name']) && $_POST['watch_library_delete_name'] > 0) { $bookmark->deleteBookmark($_POST['watch_library_delete_name']); } $watched_group_library_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; if (isset($_POST['watch_subject_delete_id']) && $_POST['watch_subject_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['watch_subject_delete_id']); } $watched_subject_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; if (isset($_POST['watch_poll_delete_id']) && $_POST['watch_poll_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['watch_poll_delete_id']); } $watched_poll_ids = $bookmark->getBookmarks(); //get recommended item ids $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; if (isset($_POST['rec_blog_delete_id']) && $_POST['rec_blog_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_blog_delete_id']); } $recommended_blog_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; if (isset($_POST['rec_activity_delete_id']) && $_POST['rec_activity_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_activity_delete_id']); } $recommended_activity_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_library']; if (isset($_POST['rec_library_delete_name']) && $_POST['rec_library_delete_name'] > 0) { $bookmark->deleteBookmark($_POST['rec_library_delete_name']); } $recommended_group_library_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; if (isset($_POST['rec_subject_delete_id']) && $_POST['rec_subject_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_subject_delete_id']); } $recommended_subject_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; if (isset($_POST['rec_poll_delete_id']) && $_POST['rec_poll_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_poll_delete_id']); } $recommended_poll_ids = $bookmark->getBookmarks(); //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->include_hidden = 1; //setup blog $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $user_id; //library setup $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $user_id; //event setup $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $user_id; // poll setup $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->section_item_id = $user_id; //receive vars if (isset($_POST['delete_bookmark'])) { if (isset($_POST['watch_group_delete_id']) && $_POST['watch_group_delete_id'] > 0) { $bookmark->deleteGroupItems($_POST['watch_group_delete_id']); } } //get watched blogs if (!empty($watched_blog_ids)) { $blog->blog_ids = $watched_blog_ids; $output_watched_blogs = $blog->getBlogs(); } //get watched subjects if (!empty($watched_subject_ids)) { $forum->subject_ids = $watched_subject_ids; $output_watched_subjects = $forum->getSubjects(); } //get watched group library items if (!empty($watched_group_library_ids)) { $library->module = "group"; $library->library_item_ids = $watched_group_library_ids; $output_watched_group_library_items = $library->getLibraryItems(); } //get watched events if (!empty($watched_activity_ids)) { $activity->activity_ids = $watched_activity_ids; $output_watched_activities = $activity->getActivities(); } //get watched polls if (!empty($watched_poll_ids)) { $poll->poll_ids = $watched_poll_ids; $output_watched_polls = $poll->getPolls(); } //get recommended user blogs if (!empty($recommended_blog_ids)) { $blog->blog_ids = $recommended_blog_ids; $output_recommended_blogs = $blog->getBlogs(); } //get recommended subjects if (!empty($recommended_subject_ids)) { $forum->subject_ids = $recommended_subject_ids; $output_recommended_subjects = $forum->getSubjects(); } //get recommended group library items if (!empty($recommended_group_library_ids)) { $library->module = "group"; $library->library_item_ids = $recommended_group_library_ids; $output_recommended_group_library_items = $library->getLibraryItems(); } //get recommended events if (!empty($recommended_activity_ids)) { $activity->activity_ids = $recommended_activity_ids; $output_recommended_activities = $activity->getActivities(); } //get recommended polls if (!empty($recommended_poll_ids)) { $poll->poll_ids = $recommended_poll_ids; $output_recommended_polls = $poll->getPolls(); } //move to template if (isset($output_user)) { $body->set('user', $output_user); } if (isset($output_watched_subjects)) { $body->set('watched_subjects', $output_watched_subjects); } if (isset($output_watched_group_library_items)) { $body->set('watched_group_library', $output_watched_group_library_items); } if (isset($output_watched_blogs)) { $body->set('watched_blogs', $output_watched_blogs); } if (isset($output_watched_activities)) { $body->set('watched_activities', $output_watched_activities); } if (isset($output_watched_polls)) { $body->set('watched_polls', $output_watched_polls); } if (isset($output_recommended_subjects)) { $body->set('recommended_subjects', $output_recommended_subjects); } if (isset($output_recommended_group_library_items)) { $body->set('recommended_group_library', $output_recommended_group_library_items); } if (isset($output_recommended_activities)) { $body->set('recommended_activities', $output_recommended_activities); } if (isset($output_recommended_blogs)) { $body->set('recommended_blogs', $output_recommended_blogs); } if (isset($output_recommended_polls)) { $body->set('recommended_polls', $output_recommended_polls); } $template_pageLink = $lang['href_watching']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_files.php 777 0 0 6767 10170663120 14462 0user_id = $me['user_id']; if (isset($_REQUEST['file_id'])) { $file_id = $_REQUEST['file_id']; } if (isset($_POST['insert_file']) && $_FILES['upload_file']['size'] > 0) { $file_upload = $_FILES['upload_file']; $file_upload['file_title'] = $data['file_title']; $file->arr_file_upload = $file_upload; if ($file->checkFile()) { $file->insertFileRecord(); $file->moveFile(); } if (empty($GLOBALS['am_error_log'])) { return header("Location: my_files.php?" . SID); exit; } } elseif (isset($_POST['delete_file'])) { $file->file_id = $data['file_id']; $delete_file = $file->getFileRecord(); if (isset($delete_file)) { $file->deleteFile($delete_file['file_name'], $delete_file['file_suffix']); } $file->deleteFileRecord($data['file_id']); if (empty($file->log)) { return header("Location: my_files.php?" . SID); exit; } } elseif (isset($_POST['update_file'])) { if (isset($_FILES['upload_file']) && $_FILES['upload_file']['size'] > 0) { $file_upload = $_FILES['upload_file']; $file_upload['file_title'] = $data['file_title']; $file_upload['file_suffix'] = $data['file_suffix']; $file_upload['file_name'] = $data['file_name']; $file->file_id = $data['file_id']; $file->arr_file_upload = $file_upload; if ($file->checkFile()) { $file->deleteFile($data['file_name'], $data['file_suffix']); $file->updateFileRecord(); $file->moveFile(); } } else { //just update database with new title $file_upload['file_title'] = $data['file_title']; $file->file_id = $data['file_id']; $file->arr_file_upload = $file_upload; $file->updateFileRecord(); } if (empty($file->log)) { return header("Location: my_files.php?file_id=" . $data['file_id'] . "&" . SID); exit; } } if (isset($file_id)) { $file->file_id = $file_id; $output_file = $file->getFileRecord(); $display = "edit"; } elseif (isset($_REQUEST['add_image'])) { $display = "add"; } $file->thumb = $c_node['file']['image']['thumb'][3]['name']; $file->orderby = "file_title"; $output_files = $file->getFiles(); //storage $output_storage = $file->getAllocation(); //move to template if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_files)) { $body->set('files', $output_files); } if (!empty($output_file)) { $body->set('out_file', $output_file); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_storage)) { $body->set('storage', $output_storage); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_library.php 777 0 0 10626 10170663114 15034 0section_item_id = $user_id; //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'sn_library.php?user_id=' . $user_id . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'sn_library_edit.php?user_id=' . $user_id . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'user/'); // set an array of pages that exist in the library $pages = $library->getPages(); $wiki->setRenderConf('xhtml', 'wikilink', 'pages', $pages); if (isset($_REQUEST['contents'])) { $output_contents = $library->getContents(); $display = "contents"; } elseif (isset($history_library_id)) { $output_history = $library->getHistory($history_library_id); $display = "history"; } elseif (isset($page_id)) { $output_library = $library->getPageID($page_id); //find out if this is the newest article $newest_doc = $library->getPageName($output_library['library_page_name']); if ($output_library['library_id'] == $newest_doc['library_id']) { $newest = true; } } elseif (isset($page)) { $output_library = $library->getPageName($page); $newest = true; } else { $output_library = $library->getPageDefault(); $newest = true; } if (isset($output_library['library_id'])) { $library_id = $output_library['library_id']; //Parser library $output_library['library_body'] = $wiki->transform($output_library['library_body'], 'Xhtml'); //setup comment require_once($c_node['dir']['class_path'] . 'Comment.class.php'); $comment = new Comment($db, $c_node['cms']['item_type']['user_library'], $date); $comment->item_id = $library_id; $output_comments = $comment->getComments(); } //get library image if (isset($output_library['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->file_id = $output_library['file_id']; $output_library['image'] = $file->getFileRecord(); } //move to template if (!empty($output_contents)) { $body->set('contents', $output_contents); } if (!empty($output_history)) { $body->set('history', $output_history); } if (!empty($newest)) { $body->set('newest', $newest); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_library)) { $body->set('library', $output_library); $template_pageLink = $lang['txt_library']; $template_pageLinkNote = $output_library['library_title']; } elseif (empty($display)) { // we will display a button to allow the user to create a first library item $body->set('library_first_page', $lang['txt_wiki_default']); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_library_edit.php 777 0 0 13642 10170663110 16036 0section_item_id = $me['user_id']; $library->user_id = $me['user_id']; //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'sn_library.php?user_id=' . $me['user_id'] . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'sn_library_edit.php?user_id=' . $me['user_id'] . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); // set an array of pages that exist in the library $pages = $library->getPages(); $wiki->setRenderConf('xhtml', 'wikilink', 'pages', $pages); //setup file $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif $output_images = $file->getFiles(); if (isset($_POST['data'])) {//post data received $data = $_POST['data']; $data['library_body'] = stripslashes($data['library_body']); $data['library_body_display'] = $wiki->transform($data['library_body'], 'Xhtml'); $data['library_synopsis'] = stripslashes(htmlspecialchars($data['library_synopsis'])); $data['library_title'] = stripslashes(htmlspecialchars($data['library_title'])); $data['library_page_name'] = $page; if (isset($_POST['preview_library'])) { $data['library_body'] = htmlspecialchars($data['library_body']); $output_library = $data; $display = "preview_library"; } elseif (isset($_POST['edit_library_again'])) { $output_library = $data; $display = "add_library"; } elseif (isset($_POST['insert_library'])) { $library->section_item_id = $me['user_id']; if (isset($data['degree_id']) && $data['degree_id'] == "node") { $data['degree_id'] = "null"; $data['level_id'] = $c_node['cms']['cms_level']['node']; } $library->insertLibrary($data); if (empty($GLOBALS['am_error_log'])) { if (!empty($data['level_id'])) { //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['user']); $cms->section_item_id = $me['user_id']; $cms->cms_item_type_id = $c_node['cms']['item_type']['user_library']; $cms->user_id = $me['user_id']; $temp['language_id'] = $me['language_id']; $temp['item_id'] = $library->library_id; $temp['genre_id'] = $data['genre_id']; //insert node cms entry $temp['level_id'] = $c_node['cms']['cms_level']['node']; if($c_node['cms']['node']['auto_publish'] == 1) { $temp['status_id'] = $c_node['cms']['status']['live']; } else { $temp['status_id'] = $c_node['cms']['status']['pending']; } $cms->insertCmsItem($temp); } header("Location: my_library.php?page=" . $data['library_page_name'] . "&" . SID); exit; } else { $output_library = $data; $display = "add_library"; } } } elseif (isset($library_id)) {//if we have a library id we retrieve it $output_library = $library->getPageID($library_id); $display = "add_library"; } elseif (isset($page)) {//else we assign the new page name $output_library = $library->getPageName($page); if (empty($output_library)) { $output_library['library_page_name'] = $page; $output_library['library_default'] = null; } $display = "add_library"; } else { $output_library = $library->getPageDefault(); $output_library['library_body'] = $wiki->transform($output_library['library_body'], 'Xhtml'); $display = "view_library"; } //handle new libraries - we've deleted all library items and now adding new one if (isset($output_library['library_page_name']) && !isset($output_library['library_id']) && ($output_library['library_page_name'] == $lang['txt_wiki_default'])) { $output_library['library_default'] = 1; } $output_user['language_ids'] = $me['language_ids']; //move to template if (!empty($output_library)) { $body->set('library', $output_library); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_images)) { $body->set('images', $output_images); $body->set('image_thumbs', $c_node['file']['image']['thumb']); } if (!empty($pages)) { $body->set('pages', $pages); } if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_membership.php 777 0 0 12064 10170663104 15520 0file); //images not required in this page if (isset($_REQUEST['edit_membership'])) { $output_user['language_ids'] = $user->getLanguages(); $display = "edit_membership"; } elseif (isset($_REQUEST['update_membership'])) { $dob = $_POST['year']."-".$_POST['month']."-".$_POST['day']; $data['user_dob'] = $dob; //update profile $user->updateUser($data); if (empty($GLOBALS['am_error_log'])) { //update the user languages $user->deleteLanguages(); $user->insertLanguages($data['language_ids']); $_SESSION['s_language_ids'] = $data['language_ids']; } if (empty($GLOBALS['am_error_log'])) { $output_user = $user->getUser(); $output_user['template'] = $user->getTemplate($output_user['template_id']); $output_user['language_ids'] = $user->getLanguages(); $display = "view_membership"; } else { $output_user = $data; $display = "edit_membership"; } } elseif (isset($_REQUEST['update_email'])) { //update email if(isset($data['user_email1']) && ($data['user_email1'] != $output_user['user_email'])) { if(empty($data['user_email1']) || empty($data['user_email2'])) { $GLOBALS['am_error_log'][] = array(2, null, null); } if($data['user_email1'] != $data['user_email2']) { $GLOBALS['am_error_log'][] = array(14, null, null); } if(!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,8}$/', $data['user_email1'])) { $GLOBALS['am_error_log'][] = array(3, null, null); } if (empty($GLOBALS['am_error_log'])) { //check that the email is not already used $query = " SELECT user_id FROM " . $db->prefix . "_user WHERE user_email='" . $data['user_email1'] . "'" ; $result = $db->Execute($query); if (isset($result) && empty($result->fields)) { //append class vars $user->aroundme_dir = ""; $user->language_dir = $c_node['node']['template_default_name']; //get messaging texts require_once($languageTextPath . 'message.lang.php'); //we now reset the password and send an email with the new login details $password = $user->createPassword(); unset ($data['user_password1'], $data['user_password2']); //set up mail require_once($c_node['dir']['class_path'] . '/Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['no_reply_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->Subject = $lang['subject_new_details']; $mail->AddReplyTo($c_node['mail']['no_reply_address'], $lang['subject_noreply']); $user->mail = $mail; $user->template_id = $data['template_id']; $user->emailVerification($password, $data['user_email1'], $data['user_firstname'], $data['language_id'], 'registration.txt.php', ""); $query = " UPDATE " . $db->prefix . "_user SET user_email = '" . $data['user_email1'] . "', user_password=md5('" . $password . "'), status_id = " . $c_node['user']['status']['pending'] . " WHERE user_id=" . $me['user_id'] ; $db->Execute($query); $user->logoffUser(); header("Location: index.php"); exit; } } else { $output_user['language_ids'] = $user->getLanguages(); $display = "edit_membership"; } } } else { $output_user['template'] = $user->getTemplate($output_user['template_id']); $output_user['language_ids'] = $user->getLanguages(); $display = "view_membership"; } $output_template = $user->getTemplates(); //move to template if (!empty($output_user)) { $body->set('user', $output_user); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_template)) { $body->set('templates', $output_template); } $body->set('datedropdown', $date->dateDropdown($output_user['user_dob'])); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_overview.php 777 0 0 10275 10170663100 15231 0thumb = $c_node['file']['image']['thumb'][2]['name']; $file->noimage = $c_node['file']['image']['thumb'][2]['noimage']; //get my actvities $activity = new Activity($db, $c_acs['arr_section']['user'], $date, $file); $activity->user_id = $me['user_id']; $activity->task_user_status_ids = $c_node['activity']['task_user_status']; $output_task_ids = $activity->getUserTasks(); if (!empty($output_task_ids)) { foreach($output_task_ids as $key => $i): $task_ids[] = $i['task_id']; endforeach; } //get tasks if (!empty($task_ids)) { $activity->task_ids = $task_ids; $output_tasks = $activity->getTasks(); } //setup statistics $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); $statistic->section_item_id = $user_id; $output_statistic = $statistic->getStatistics(); $statistic->user_status = $c_node['user']['status']; $output_node_statistics = $statistic->getNodeStatistics(); //setup file $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; //setup comment $comment = new Comment($db, null, $date); $comment->section_item_id = $user_id; $comment->no_user_id = $user_id; $comment->limit = 10; $output_comments = $comment->getComments(); //get my profile $output_profile = $user->getProfile(); //get my profile image if (isset($output_profile['file_id'])) { $file->file_id = $output_profile['file_id']; $output_profile['image'] = $file->getFileRecord(); } elseif (isset($output_profile)) { $output_profile['image']['file_title'] = ""; $output_profile['image']['file'] = $file->noimage; } //setup file $file->thumb = $c_node['file']['image']['thumb'][3]['name']; $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; /* //friends $sn = new SocialNetwork($user_id, $db, $c_node['node']['node_id']); $sn->status_ids = $c_node['user']['status']; $sn->date = $date; $sn->user = $user; $sn->file = $file; $sn->limit = 2; $sn->orderby = "user_create_datetime desc"; $output_friends = $sn->getSocialNetwork(); */ //move to template if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); } if (!empty($output_node_statistics)) { $body->set('node_statistics', $output_node_statistics); } if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_statistic)) { $body->set('user_statistic', $output_statistic); } if (!empty($output_friends)) { $body->set('friends', $output_friends); } $body->set('cms_item_type_ids', $c_node['cms']['item_type']); $template_pageLink = $lang['txt_my_overview']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_profile.php 777 0 0 13016 10170663074 15031 0profile_id = $profile_id; } //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('freelink'); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'user/'); //setup file $file->user_id = $me['user_id']; //setup group require_once($c_node['dir']['class_path'] . 'Group.class.php'); $group = new Group($db, $date, $file); $group->user_id = $me['user_id']; if (isset($_REQUEST['edit_profile'])) { $output_profile = $user->getProfile($_REQUEST['profile_id']); $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif $output_images = $file->getFiles();//get images for default image selections $output_group_profiles = $group->getMyGroupProfiles($output_profile['profile_id']); $display = "edit_profile"; } elseif (isset($_REQUEST['add_profile'])) { $file->thumb = $c_node['file']['image']['thumb'][2]['name']; $file->type_ids[] = $c_node['file']['mime'][1]['suffix']; //jpg $file->type_ids[] = $c_node['file']['mime'][2]['suffix']; //png $file->type_ids[] = $c_node['file']['mime'][3]['suffix']; //gif $output_images = $file->getFiles();//get images for default image selections $display = "edit_profile"; } elseif (isset($_REQUEST['insert_profile'])) { $user->insertProfile($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: my_profile.php?profile_id=". $user->profile_id . "&" . SID); exit; } else { $output_profile = $data; $display = "edit_profile"; } } elseif (isset($_REQUEST['update_profile'])) { $user->updateProfile($data); if (empty($GLOBALS['am_error_log'])) { return header("Location: my_profile.php?profile_id=". $profile_id . "&" . SID); exit; } else { $output_profile = $data; $display = "edit_profile"; } } elseif (isset($_REQUEST['delete_profile'])) { $user->deleteProfile($profile_id); if (empty($GLOBALS['am_error_log'])) { return header("Location: my_profile.php?" . SID); exit; } } elseif (isset($_REQUEST['set_default'])) { $user->updateDefaultProfile($data['default_profile_default']); if (empty($GLOBALS['am_error_log'])) { return header("Location: my_profile.php?" . SID); exit; } } elseif (isset($_REQUEST['set_degree'])) { $user->updateDegreeProfiles($data['set_degree_profile_ids']); if (empty($GLOBALS['am_error_log'])) { return header("Location: my_profile.php?" . SID); exit; } } elseif (isset($profile_id)) { $output_profile = $user->getProfile($_REQUEST['profile_id']); $output_profile['profile_summary_display'] = $wiki->transform($output_profile['profile_summary'], 'Xhtml'); $output_group_profiles = $group->getMyGroupProfiles($output_profile['profile_id']); $display = "view_profile"; } else { //setup file $user->file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $user->file->thumb = $c_node['file']['image']['thumb'][3]['name']; $output_profiles = $user->getProfiles(); $output_group_profiles = $group->getMyGroupProfiles(); $output_degree_profiles = $user->getDegreeProfiles(); } //setup file $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; if (isset($output_profile['file_id'])) { $file->file_id = $output_profile['file_id']; $output_profile['image'] = $file->getFileRecord(); } elseif (isset($output_profile)) { $output_profile['image']['file_title'] = ""; $output_profile['image']['file'] = $file->noimage; } //move to template if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($display)) { $body->set('display', $display); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_profiles)) { $body->set('profiles', $output_profiles); } if (!empty($output_images)) { $body->set('images', $output_images); } if (!empty($output_group_profiles)) { $body->set('group_profiles', $output_group_profiles); } if (!empty($output_degree_profiles)) { $body->set('degree_profiles', $output_degree_profiles); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_publishing.php 777 0 0 7154 10170663070 15517 0noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup forum $forum = new Forum($db, $c_acs['arr_section']['user'], $date, $file); //setup blog $blog = new Blog($db, $c_acs['arr_section']['user'], $date, $file); $blog->user_id = $user_id; //setup shout $shout = new Shout($db, $date); $shout->user_id = $me['user_id']; //library setup $library = new Library($db, $c_acs['arr_section']['user'], $date, $file); $library->user_id = $me['user_id']; //event setup $poll = new Poll($db, $c_acs['arr_section']['user'], $date); $poll->user_id = $me['user_id']; //activity setup $activity = new Activity($db, $c_acs['arr_section']['user'], $date, $file); $activity->user_id = $me['user_id']; //get published items $output_publish_library = $library->getLibraryItems(); $output_publish_forum = $forum->getSubjects(); $output_blogs = $blog->getBlogs(); $output_shouts = $shout->getShouts(); //get total replies for subjects if (!empty($output_publish_forum)) { foreach($output_publish_forum as $key => $i): $forum->subject_id = $i['subject_id']; //$output_publish_forum[$key]['total_replies'] = $forum->getReplyCount(); $output_publish_forum[$key]['total_replies'] = 0; endforeach; } //get poll participation $output_poll_participation = $poll->getUserPollParticipation(); //move to template if (!empty($output_publish_library)) { $body->set('publish_library', $output_publish_library); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); } if (!empty($output_publish_forum)) { $body->set('publish_forum', $output_publish_forum); } if (!empty($output_shouts)) { $body->set('publish_shouts', $output_shouts); } if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } if (!empty($output_poll_participation)) { $body->set('poll_participation', $output_poll_participation); } $template_pageLink = $lang['txt_publishing']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/my_shoutbox.php 777 0 0 2517 10170663065 15230 0user_id = $me['user_id']; $shout->insertShout($data); } $shout->limit=25; unset($shout->user_id); $output_shouts = $shout->getShouts(); //move to template if (!empty($output_shouts)) { $body->set('shouts', $output_shouts); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/node_abuse_reports.php 777 0 0 10032 10170663062 16536 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); require_once($languageArrayPath . 'arr_abuse_status.lang.php'); //process requests if (isset($_REQUEST['update_report'])) { updateReport($data); } elseif (isset($_REQUEST['abuse_id'])) { $output_report = getReport($_REQUEST['abuse_id']); $display = "edit_report"; } $output_reports = getReports(); //we will list reports, then have a detailed screen //plus link to send email to reportee //move to template if (!empty($output_reports)) { $body->set('reports', $output_reports); } if (!empty($output_report)) { $body->set('report', $output_report); } if (isset($display)) { $body->set('display', $display); } include "inc/footer.inc.php"; /* * getReports * Tom Calthrop 9th November 2004 */ function getReports() { global $db, $error, $date; $query = " SELECT ar.*, u.user_firstname, u.user_surname FROM " . $db->prefix . "_abuse ar LEFT JOIN " . $db->prefix . "_user u ON ar.reportee_user_id=u.user_id order by ar.report_status_id desc, ar.report_datetime" ; $result = $db->Execute($query); if (isset($result->fields)) { $temp = array(); while (!$result->EOF) { $temp1 = $result->fields; $temp1['report_datetime'] = $date->formatDate($temp1['report_datetime']); array_push($temp, $temp1); $result->MoveNext(); } $result->Close(); return $temp; } else { $log[] = array('error', 1, $query . "-" . $db->ErrorMsg(), null); } }//EO getReports(); /* * getReports * Tom Calthrop 9th November 2004 */ function getReport($abuse_id) { global $db, $error, $date; $query = " SELECT ar.*, u.user_firstname, u.user_surname, u1.user_firstname as assigned_firstname, u1.user_surname as assigned_surname FROM " . $db->prefix . "_abuse ar LEFT JOIN " . $db->prefix . "_user u ON ar.reportee_user_id=u.user_id LEFT JOIN " . $db->prefix . "_user u1 ON ar.assigned_user_id=u1.user_id WHERE ar.abuse_id=" . $abuse_id ; $result = $db->Execute($query); if (isset($result->fields)) { $temp = $result->fields; $temp['report_datetime'] = $date->formatDate($temp['report_datetime'], 1); $result->Close(); return $temp; } else { $log[] = array('error', 1, $query . "-" . $db->ErrorMsg(), null); } }//EO getReport(); /* * updateReport * Tom Calthrop 9th November 2004 */ function updateReport($data) { global $db, $error, $me; $query = " UPDATE " . $db->prefix . "_abuse SET assigned_user_id=" . $me['user_id'] . ", report_status_id=" . $data['report_status_id'] . " WHERE abuse_id=" . $data['abuse_id'] ; $result = $db->Execute($query); if (isset($result->fields)) { $result->Close(); return true; exit; } else { $log[] = array('error', 1, $query . "-" . $db->ErrorMsg(), null); } }//EO updateReport(); ?> aroundme_0_4_0/www/aroundme_0_4_0/node_acs.php 777 0 0 6314 10170663057 14423 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } require_once($c_node['dir']['class_path'] . 'Acs.class.php'); $acs = new Acs(); $acs->db = $db; $section_id = $c_acs['arr_section']['user']; $acs->section_id = $section_id; //append language setup require_once($languageArrayPath . 'arr_acs.lang.php'); //ROLES //get role_id's from config and build the roles array $config_roles = $c_acs['section_role'][$section_id]; if (!empty($config_roles)) { $output_roles = array(); //loop through the array and get the name from the language file foreach($config_roles as $key => $i): $temp1['role_name'] = $lang['arr_acs']['role'][$i]; $temp1['role_id'] = $i; array_push($output_roles, $temp1); endforeach; } //RESOURCES //get resource_id's from config and build the resources array $config_resources = $c_acs['section_resource'][$section_id]; $arr_acs = $lang['arr_acs']; $resource_privilege = $c_acs['resource_privilege']; $output_resources = $acs->getResources($config_resources, $resource_privilege, $arr_acs, $output_roles); if(isset($_POST["update_permissions"])){ $acs->deletePermissions(); // Resets all the permissions if(!empty($_POST['data']['ids'])){ foreach($_POST['data']['ids'] as $key => $value){ $ind = explode("-", $key); $resource_id = $ind[0]; // resource_id $privilege_id = $ind[1]; // privilege_id $role_id = $output_roles[$ind[2]]["role_id"]; // role_id $acs->insertPermission($role_id, $resource_id, $privilege_id); // insert privileges } } $output_resources = $acs->getResources($config_resources, $resource_privilege, $arr_acs, $output_roles); } //move to template if (!empty($output_roles)) { $body->set('roles', $output_roles); } if (isset($display)) { $body->set('display', $display); } if (!empty($output_resources)) { $body->set('resources', $output_resources); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/node_admin.php 777 0 0 2464 10170663031 14737 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/node_cms.php 777 0 0 23036 10170736472 14461 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } unset($status_id); // this is temporary - somehow status_id is set somewhere - bug / tom if (isset($_REQUEST['status_id']) && $_REQUEST['status_id'] > 0) { $status_id = $_REQUEST['status_id']; unset($data); } require_once($c_node['dir']['class_path'] . 'Cms.class.php'); require_once($c_node['dir']['class_path'] . 'Poll.class.php'); require_once($c_node['dir']['class_path'] . 'Forum.class.php'); require_once($c_node['dir']['class_path'] . 'Library.class.php'); require_once($c_node['dir']['class_path'] . 'Activity.class.php'); require_once($c_node['dir']['class_path'] . 'Blog.class.php'); //append language setup require_once($languageArrayPath . 'arr_cms.lang.php'); //setup cms require_once($c_node['dir']['class_path'] . 'Cms.class.php'); $cms = new Cms($db, $c_acs['arr_section']['group']); $cms->level_id = $c_node['cms']['cms_level']['node']; if (isset($status_id)) { $cms->cms_status_id = $status_id; } //get subject ids ----------------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; if (isset($data['subject_status'])) { foreach($data['subject_status'] as $key => $i): if ($i <= 0) { $arr_subject_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['subject_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_subject_delete)) { $cms->deleteCmsItem($arr_subject_delete); } } $output_cms_subjects = $cms->getCmsItems(); foreach($output_cms_subjects as $key => $i): $cms_subject_ids[] = $i['item_id']; endforeach; //get group blog ids ----------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; if (isset($data['blog_status'])) { foreach($data['blog_status'] as $key => $i): if ($i <= 0) { $arr_blog_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['blog_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_blog_delete)) { $cms->deleteCmsItem($arr_blog_delete); } } $output_cms_blogs = $cms->getCmsItems(); foreach($output_cms_blogs as $key => $i): $cms_blog_ids[] = $i['item_id']; endforeach; //get library item ids -------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_library']; if (isset($data['library_item_status'])) { foreach($data['library_item_status'] as $key => $i): if ($i <= 0) { $arr_library_item_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['library_item_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_library_item_delete)) { $cms->deleteCmsItem($arr_library_item_delete); } } $output_cms_library_items = $cms->getCmsItems(); foreach($output_cms_library_items as $key => $i): $cms_library_ids[] = $i['item_id']; endforeach; //get file ids -------------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_files']; if (isset($data['file_status'])) { foreach($data['file_status'] as $key => $i): if ($i <= 0) { $arr_file_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['file_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_file_delete)) { $cms->deleteCmsItem($arr_file_delete); } } $output_cms_files = $cms->getCmsItems(); foreach($output_cms_files as $key => $i): $cms_file_ids[] = $i['item_id']; endforeach; //get poll ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; if (isset($data['poll_status'])) { foreach($data['poll_status'] as $key => $i): if ($i <= 0) { $arr_poll_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['poll_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_poll_delete)) { $cms->deleteCmsItem($arr_poll_delete); } } $output_cms_polls = $cms->getCmsItems(); if (!empty($output_cms_polls)) { foreach($output_cms_polls as $key => $i): $cms_poll_ids[] = $i['item_id']; endforeach; } //get activity ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; if (isset($data['activity_status'])) { foreach($data['activity_status'] as $key => $i): if ($i <= 0) { $arr_activity_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['activity_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_activity_delete)) { $cms->deleteCmsItem($arr_activity_delete); } } $output_cms_activities = $cms->getCmsItems(); foreach($output_cms_activities as $key => $i): $cms_activity_ids[] = $i['item_id']; endforeach; //get task ids --------------------------------------------------- $cms->cms_item_type_id = $c_node['cms']['item_type']['group_task']; if (isset($data['task_status'])) { foreach($data['task_status'] as $key => $i): if ($i <= 0) { $arr_task_delete[] = $key; } else { $cms->item_id = $key; if (isset($data['task_sticky'][$key])) { $cms->updateCmsItem($i, 1); } else { $cms->updateCmsItem($i); } } endforeach; if (isset($arr_task_delete)) { $cms->deleteCmsItem($arr_task_delete); } } $output_cms_tasks = $cms->getCmsItems(); if (!empty($output_cms_tasks)) { foreach($output_cms_tasks as $key => $i): $cms_task_ids[] = $i['item_id']; endforeach; } //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); //setup blog $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); //library setup $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); //activity setup $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->task_user_status_ids = $c_node['activity']['task_user_status']; // poll setup $poll = new Poll($db, $c_acs['arr_section']['group'], $date); //get items if (!empty($cms_blog_ids)) { $blog->blog_ids = $cms_blog_ids; $output_blogs = $blog->getBlogs(); } //get subjects if (!empty($cms_subject_ids)) { $forum->subject_ids = $cms_subject_ids; $output_subjects = $forum->getSubjects(); } //get library items if (!empty($cms_library_ids)) { $library->library_item_ids = $cms_library_ids; $output_library_items = $library->getLibraryItems(); } //get activities if (!empty($cms_activity_ids)) { $activity->activity_ids = $cms_activity_ids; $output_activities = $activity->getActivities(); } //get files if (!empty($cms_file_ids)) { $file->file_ids = $cms_file_ids; $output_files = $file->getFiles(); } //get polls if (!empty($cms_poll_ids)) { $poll->poll_ids = $cms_poll_ids; $output_polls = $poll->getPolls(); } //get tasks if (!empty($cms_task_ids)) { $activity->task_ids = $cms_task_ids; $output_tasks = $activity->getTasks(); } //move to template if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); $body->set('cms_blogs', $output_cms_blogs); } if (!empty($output_subjects)) { $body->set('subjects', $output_subjects); $body->set('cms_subjects', $output_cms_subjects); } if (!empty($output_library_items)) { $body->set('library_items', $output_library_items); $body->set('cms_library_items', $output_cms_library_items); } if (!empty($output_activities)) { $body->set('activities', $output_activities); $body->set('cms_activities', $output_cms_activities); } if (!empty($output_tasks)) { $body->set('tasks', $output_tasks); $body->set('cms_tasks', $output_cms_tasks); } if (!empty($output_files)) { $body->set('files', $output_files); $body->set('cms_files', $output_cms_files); } if (!empty($output_polls)) { $body->set('polls', $output_polls); $body->set('cms_polls', $output_cms_polls); } if (!empty($display)) { $body->set('display', $display); } if (isset($status_id)) { $body->set('status_id', $status_id); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/node_group.php 777 0 0 5743 10170663020 15004 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); require_once($languageArrayPath . 'arr_genre.lang.php'); require_once($languageArrayPath . 'arr_group.lang.php'); //setup group admin class require_once($c_node['dir']['class_path'] . 'GroupAdmin.class.php'); $groupadm = new GroupAdmin($db, $me); $groupadm->date = $date; $groupadm->member_status_id = $c_node['group']['member_status']['active']; //setup group class require_once($c_node['dir']['class_path'] . 'Group.class.php'); $group = new Group($db, $date); $group->user_id = $me['user_id']; $group->registration_types = $c_node['group']['registration_type']; //process requests if (isset($_POST['update_group'])) { $data['group_file_allocation'] = $data['group_file_allocation']*1000; $groupadm->group_id = $data['group_id']; $groupadm->updateAdminGroup($data); if (empty($groupadm->log)) { return header("Location: node_group.php?group_id=" . $data['group_id'] . "&" . SID); exit; } } elseif (isset($_REQUEST['edit_group'])) { $group->group_id = $_REQUEST['group_id']; $output_group = $group->getGroup(); $display = "edit_group"; } elseif (isset($_REQUEST['group_id'])) { $group->group_id = $_REQUEST['group_id']; $output_group = $group->getGroup(); $display = "view_group"; } else { $output_groups = $groupadm->getAllGroups(); } //move to template if (!empty($output_groups)) { $body->set('groups', $output_groups); } if (!empty($output_group)) { $body->set('group', $output_group); $body->set('datedropdown', $date->dateDropdown($output_group['group_election_date'], null,null, 10, 20)); } if (isset($display)) { $body->set('display', $display); } $body->set('today', date("Y-m-d")); include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/node_newsletter.php 777 0 0 10600 10170663015 16054 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); if (isset($_POST['send_newsletter'])) { //to, language_id, message, subject //setup email require_once($c_node['dir']['class_path'] . '/Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['default_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->language = "en"; $mail->Priority = 3; $mail->Encoding = "8bit"; $mail->CharSet = "iso-8859-1"; $mail->Subject = $data['subject']; //send newsletter $sent_newletters = sendNewsletter($data); } //move to template if (isset($total_emails_sent)) { $body->set('total_emails_sent', $total_emails_sent); } $body->set('language_id', $me['language_id']); $body->set('total_members', getCountUsers(2)); $body->set('total_pending_members', getCountUsers(1)); $body->set('total_invited', getCountUsers()); include "inc/footer.inc.php"; /* * sendInvite * Tom Calthrop 7th April 2004 */ function sendNewsletter($data) { global $db, $mail; $total_emails_sent = 0; //get the email addresses and firstnames if (isset($data['to']) && $data['to'] > 0) { //"to" level - 1=pending, 2=member - $query = " SELECT u.user_firstname, u.user_email FROM " . $db->prefix . "_user u WHERE u.language_id=". $data['language_id'] . " and u.status_id=". $data['to'] ; } else { //if not 1 or 2 we go to the invite table $query = " SELECT u.invited_email FROM " . $db->prefix . "_user_invited u " ; } //echo $query; $result = $db->Execute($query); if (isset($result->fields)) { while (!$result->EOF) { //format message if (isset($data['to']) && $data['to'] > 0) { $message = str_replace("FIRSTNAME", $result->fields['user_firstname'], $data['message']); } else { $message = $data['message']; } $mail->Body = $message; $mail->ClearAddresses(); $mail->AddAddress($result->fields['user_email'], ''); if(!$mail->Send()) { $GLOBALS['am_error_log'][] = array(18, null, $mail->ErrorInfo); //Mailer Error } else { $total_emails_sent++; } $result->MoveNext(); } $result->Close(); } else { $error_info = "node_newsletter.php -- " . $query . " -- " . $db->ErrorMsg(); $GLOBALS['am_error_log'][] = array(1, 1, $error_info); } }//EO sendNewsletter(); /* * sendInvite * Tom Calthrop 7th April 2004 */ function getCountUsers($lock_id = null) { global $db; //get the email addresses and firstnames if (isset($lock_id) && $lock_id > 0) { //"to" level - 1=pending, 2=member - $query = " SELECT count(user_id) as total FROM " . $db->prefix . "_user WHERE status_id=". $lock_id ; } else { //if not 1 or 2 we go to the invite table $query = " SELECT count(invited_email) as total FROM " . $db->prefix . "_user_invited" ; } //echo $query; $result = $db->Execute($query); $total = 0; if (isset($result)) { $total = $result->fields['total']; } return $total; } ?> aroundme_0_4_0/www/aroundme_0_4_0/node_register_user.php 777 0 0 13210 10170663012 16537 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); require_once($languageArrayPath . 'arr_user.lang.php'); require_once($languageTextPath . 'message.lang.php'); //setup useradmin (extends user) require_once($c_node['dir']['class_path'] . 'User.class.php'); require_once($c_node['dir']['class_path'] . 'UserAdmin.class.php'); $user = new UserAdmin($db, $date); $user->language_dir = $c_node['node']['template_default_name']; //form actions if (isset($_POST['preview'])) { $display = "preview"; } elseif (isset($_POST['edit_again'])) { } elseif (isset($_POST['register'])) { // Checks the email and the password if (isset($_POST['language_ids'])) { $data['language_ids'] = $_POST['language_ids']; } $user->checkRegister($data); if (empty($GLOBALS['am_error_log'])) { //setup email require_once($c_node['dir']['class_path'] . '/Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['no_reply_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->Subject = $lang['subject_welcome_br']; $mail->AddReplyTo($c_node['mail']['no_reply_address'], $lang['subject_noreply']); $user->mail = $mail; if (isset($data['invitee_id'])) { $user->invitee_id = $data['invitee_id']; } $user->user_image_allocation = $c_node['file']['default_max_user_space']; $user->template_id = $c_node['node']['template_default_id']; $data['user_dob'] = $_REQUEST['year']."-".$_REQUEST['month']."-".$_REQUEST['day']; $user->txt_default_profile_name = $lang['txt_default_profile_name']; $user->txt_default_profile_hometown = $lang['txt_default_profile_hometown']; $user->status_id = $c_node['user']['status']['pending']; $user->template_id = $c_node['node']['template_default_id']; $user->page_default = $c_node['node']['page_default']; $user->aroundme_dir = ""; $user->registerUser($data); //check if we need to add invitee into social network if (isset($data) && !empty($data['invitee_id'])) { require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'User/SocialNetwork.class.php'); $sn = new SocialNetwork($user->user_id, $db, $c_node['node']['node_id']); $relation = $sn->insertRelation($data['invitee_id'], $c_node['relation_type']['approved']); } $display = "registration_complete"; } } //if someone has invited someone here if ((isset($_REQUEST['invitee']) && $_REQUEST['invitee'] > 0) || isset($data['invitee_id'])) { if (isset($_REQUEST['invitee'])) { $invitee = $_REQUEST['invitee']; } else { $invitee = $data['invitee_id']; } if ($invitee > 0) { $_SESSION['s_user_id'] = "x"; $output_invite = $user->getUser($invitee); require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'File.class.php'); $file = new File($db, $c_node['file'], $c_node['dir']); $file->module = "user"; $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; if (isset($output_invite['profile_image_id'])) { $file->file_id = $output_invite['profile_image_id']; $output_invite['image'] = $file->getFileRecord(); } else { $output_invite['image']['file_title'] = ""; $output_invite['image']['file'] = $file->noimage; } } } //TEMPLATE if (isset($c_node['node']['language_available'])) { $body->set('language_available', $c_node['node']['language_available']); } if (isset($c_node['node']['language_default'])) { $body->set('language_default', $c_node['node']['language_default']); } if (!empty($output_invite)) { $body->set('invite', $output_invite); } if (isset($display)) { $body->set('display', $display); } if (isset($data)) { $body->set('data', $data); $user_dob = $_REQUEST['year']."-".$_REQUEST['month']."-".$_REQUEST['day']; $body->set('datedropdown', $date->dateDropdown($user_dob)); $body->set('display_dob', $user_dob); $body->set('year', $_REQUEST['year']); $body->set('month', $_REQUEST['month']); $body->set('day', $_REQUEST['day']); } else { $data = array("language_id" => $me['language_id']); if (isset($_REQUEST['email'])) { $data['user_email'] = $_REQUEST['email']; } $body->set('data', $data); $body->set('datedropdown', $date->dateDropdown()); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/node_structure.php 777 0 0 2301 10170663007 15700 0 aroundme_0_4_0/www/aroundme_0_4_0/node_user.php 777 0 0 6126 10170663004 14624 0checkPermission($c_acs['arr_acs']['resource']['administration'], $c_acs['arr_acs']['privilege']['allow_access'])) { //resourece_id, Priv_id header("Location: " . $_SESSION['s_homepage'] . "?" . SID); exit; } //append language setup require_once($languageArrayPath . 'arr_language_name.lang.php'); require_once($languageArrayPath . 'arr_user.lang.php'); require_once($languageArrayPath . 'arr_acs.lang.php'); //setup useradmin (extends user) require_once($c_node['dir']['class_path'] . 'User.class.php'); require_once($c_node['dir']['class_path'] . 'UserAdmin.class.php'); $user = new UserAdmin($db, $date); //process requests if (isset($_POST['update_user'])) { $data['user_file_allocation'] = $data['user_file_allocation']*1000; $user->user_id = $data['user_id']; $user->updateAdminUser($data); if (empty($user->log)) { return header("Location: node_user.php?user_id=" . $data['user_id'] . "&" . SID); exit; } } elseif (isset($_REQUEST['edit_user'])) { $user->user_id = $_REQUEST['user_id']; $output_user = $user->getUser(); $display = "edit_user"; } elseif (isset($_REQUEST['user_id'])) { $user->user_id = $_REQUEST['user_id']; $output_user = $user->getUser(); $output_profile = $user->getProfile(); //setup file $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; if (isset($output_profile['file_id'])) { $file->file_id = $output_profile['file_id']; $output_profile['image'] = $file->getFileRecord(); } elseif (isset($output_profile)) { $output_profile['image']['file_title'] = ""; $output_profile['image']['file'] = $file->noimage; } $display = "view_user"; } else { $output_users = $user->getAllUsers(); } //move to template if (!empty($output_users)) { $body->set('users', $output_users); } if (!empty($output_user)) { $body->set('user', $output_user); } if (!empty($display)) { $body->set('display', $display); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/report_abuse.php 777 0 0 14103 10170663001 15342 0Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['default_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->AddReplyTo($c_node['mail']['default_address'], $c_node['mail']['from_name']); $mail->language = "en"; $mail->Mail->Priority = 3; $mail->Mail->Encoding = "8bit"; $mail->Mail->CharSet = "iso-8859-1"; unset ($_SESSION['report_abuse_url'], $_SESSION['report_abuse_body']); insertReport($data); } //move to template $body->set('report_abuse_url', $report_abuse_url); $body->set('report_abuse_body', $report_abuse_body); include "inc/footer.inc.php"; /* * sendInvite * Tom Calthrop 8th November 2004 */ function insertReport($data) { global $db, $mail, $im, $languageTextPath, $me, $c_node, $lang, $report_abuse_url, $report_abuse_body, $report_abuse_body_stripped, $c_acs; $datetime = $db->DBTimeStamp(mktime()); $query = " INSERT INTO " . $db->prefix . "_abuse ( abuse_url, abuse_source, reportee_user_id, abuse_note, reportee_language_id, report_datetime, report_status_id ) values ( '" . $report_abuse_url . "', '" . $report_abuse_body_stripped . "', " . $data['user_id'] . ", '" . $data['message'] . "', " . $data['language_id'] . ", " . $datetime . ", " . $c_node['cms']['abuse_status']['unallocated'] . " )" ; //echo $query; $result = $db->Execute($query); if (isset($result)) { $query = " SELECT abuse_id FROM " . $db->prefix . "_abuse WHERE report_datetime=" . $datetime . " AND reportee_user_id=" . $data['user_id'] ; $result = $db->SelectLimit($query, 1); if (isset($result->fields['abuse_id'])) { $reference_id = "REF-" . $result->fields['abuse_id']; //prepare content to send $im_admin_file_txt = readTxtFile($languageTextPath . "im_abuse_reported.txt.php"); $im_admin_file_txt = str_replace("\\\"", "\"", $im_admin_file_txt); $im_admin_file_txt = str_replace("ID_OF_REPORT", $reference_id, $im_admin_file_txt); $im_admin_file_txt = str_replace("NOTE", $data['message'], $im_admin_file_txt); $mail_admin_file_txt = readTxtFile($languageTextPath . "mail_abuse_reported.txt.php"); $mail_admin_file_txt = str_replace("\\\"", "\"", $mail_admin_file_txt); $mail_admin_file_txt = str_replace("NOTE", $data['message'], $mail_admin_file_txt); $url = "http://" . $_SERVER['HTTP_HOST']; if (dirname ($_SERVER['PHP_SELF']) != "/") { $url .= dirname ($_SERVER['PHP_SELF']); } $mail_admin_file_txt = str_replace("URL", $url, $mail_admin_file_txt); $im_reportee_file_txt = readTxtFile($languageTextPath . "im_abuse_reported_thanks.txt.php"); $im_reportee_file_txt = str_replace("\\\"", "\"", $im_reportee_file_txt); $im_reportee_file_txt = str_replace("NAME", $me['firstname'], $im_reportee_file_txt); $im_reportee_file_txt = str_replace("REF_NUMBER", $reference_id, $im_reportee_file_txt); //get node admins and send message and EMAIL. $query = " SELECT user_id, user_email FROM " . $db->prefix . "_user WHERE role_id=" . $c_acs['arr_acs']['resource']['administration'] ; $result = $db->Execute($query); if (isset($result->fields)) { while (!$result->EOF) { //send instant message to node admins $im->sendMessage($result->fields['user_id'], $lang['mail_subject_abuse_txt'], $im_admin_file_txt); //send email to email address $mail->Subject = $lang['mail_subject_abuse_txt']; $mail->Body = $mail_admin_file_txt; $mail->ClearAddresses(); $mail->AddAddress($result->fields['user_email'], ''); if(!$mail->Send()) { $log[] = array('error', 18, $mail->ErrorInfo); //Mailer Error } $result->MoveNext(); } $result->Close(); } //SEND THANK YOU MESSAGE TO REPORTER $im->sendMessage($me['user_id'], $lang['mail_subject_thanks_txt'], $im_reportee_file_txt); } } //CLEAN UP return header("Location: http://" . $report_abuse_url . SID); exit; }//EO insertReport(); ?> aroundme_0_4_0/www/aroundme_0_4_0/robots.txt 777 0 0 30 10131735077 14134 0User-agent: * Disallow: aroundme_0_4_0/www/aroundme_0_4_0/sn_blocked.php 777 0 0 2770 10170662774 14762 0date = $date; $output_blocked = ""; if (isset($_REQUEST['unblock_user_id'])) { $user_blocked = $sn->unSetBlockUser($_REQUEST['unblock_user_id']); } else { $output_blocked = $sn->getBlockedUsers(); } //move to template if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($display)) { $body->set('display', $display); } if (!empty($output_blocked)) { $body->set('blocked', $output_blocked); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_blog.php 777 0 0 14162 10170662771 14315 0noimage = $c_node['file']['image']['thumb'][2]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][2]['name']; //get blogs $blog = new Blog($db, $c_acs['arr_section']['user'], $date, $file); $blog->section_item_id = $user_id; $blog->limit = 5; $blog->degree_id = $degree_path['degree']; //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['user_blog'], $date); $comment->user_id = $user_id; $comment->section_item_id = $user_id; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['user_blog'], $date, $user_id); //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_section"; } elseif (isset($_POST['insert'])) { $comment->item_id = $blog_id; $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); $statistic->section_item_id = $me['user_id']; //update stats $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $statistic->setStatistic($comment->getCommentCount()); //goto the subject return header("Location: sn_blog.php?user_id=". $user_id . "&blog_id=". $blog_id . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } if (isset($blog_id)) { $blog->blog_id = $blog_id; $output_blog = $blog->getBlog(); if (isset($output_blog['blog_id'])) { $output_blog['blog_body_display'] = $wiki->transform($output_blog['blog_body'], 'Xhtml'); $bookmark->item_id = $output_blog['blog_id']; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blog['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blog['bookmark']['recommend'] = 1; } if (isset($output_blog['user_id'])) { $user->user_id = $output_blog['user_id']; $output_author = $user->getProfile(); } $comment->item_id = $blog_id; $output_comments = $comment->getComments($blog_id); } } elseif (isset($_REQUEST['blog_history'])) { unset($blog->limit); $blog_history = $blog->getBlogs(); $display = "blog_history"; } else { $output_blogs = $blog->getBlogs(); if (!empty($output_blogs)) { foreach($output_blogs as $key => $i): $output_blogs[$key]['blog_body_display'] = $wiki->transform($i['blog_body'], 'Xhtml'); $bookmark->item_id = $i['blog_id']; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blogs[$key]['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_blogs[$key]['bookmark']['recommend'] = 1; } $output_blogs[$key]['comment_total'] = $comment->getCommentCount($i['blog_id']); endforeach; } $display = "multiple_blogs"; } //move vars to template if (!empty($display)) { $body->set('display', $display); } if (!empty($output_blog)) { $body->set('blog', $output_blog); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_blogs)) { $body->set('blogs', $output_blogs); } if (!empty($blog_history)) { $body->set('blog_history', $blog_history); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($output_author)) { $body->set('author', $output_author); } if (isset($output_blog['blog_title'])) { $template_pageLink = $lang['txt_blog']; $template_pageLinkNote = $output_blog['blog_title']; } include "inc/footer.inc.php"; ?>aroundme_0_4_0/www/aroundme_0_4_0/sn_friends.php 777 0 0 4161 10170662765 15005 0noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; $user->file = $file; //setup social network $sn->status_ids = $c_node['user']['status']; $sn->date = $date; $output_friend_ids = $sn->getFriends($user_id); if (!empty($output_friend_ids)) { foreach($output_friend_ids as $key => $i): $user->user_ids[] = $i; endforeach; } $user->orderby = "p.profile_nic"; $output_friends = $user->getProfiles(); if (!empty($output_friends)) { foreach($output_friends as $key => $i): $total_friends = $sn->getFriends($i['user_id']); $output_friends[$key]['sn_total'] = count($total_friends); endforeach; } //move to template if (!empty($output_friends)) { $body->set('friends', $output_friends); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } $template_pageLink = $lang['txt_friends']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_invite.php 777 0 0 5021 10170662762 14642 0im = $im; $sn->me = $me; $sn->date = $date; $sn->relation_type_ids = $c_node['user']['relation_type']; if (isset($_POST['send_invite'])) { //get my details $user_id = $me['user_id']; $user->user_id = $user_id; $output_user = $user->getUser(); //setup email require_once($c_node['dir']['class_path'] . 'Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $output_user['user_email']; $mail->FromName = $output_user['user_firstname'] . " " . $output_user['user_surname']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->AddReplyTo($c_node['mail']['no_reply_address'], $lang['subject_noreply']); $mail->language = "en"; $sn->mail = $mail; $sn->txt_subject_im_invite = $lang['subject_im_friendship_invite']; //get text files $sn->body_mail_file = readTxtFile($languageTextPath . "mail_invite.txt.php"); $sn->body_im_file = readTxtFile($languageTextPath . "im_invite.txt.php"); //send invites $sn->sendInvite($data); if (empty($GLOBALS['am_error_log'])) { $total_emails_sent = $sn->total_emails_sent; } } //get pending IM relations $pending_output = $sn->getPendingRelations(); //move to template if (!empty($total_emails_sent)) { $body->set('total_emails_sent', $total_emails_sent); } if (!empty($pending_output)) { $body->set('pending', $pending_output); } include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_library.php 777 0 0 15716 10170662756 15047 0section_item_id = $user_id; $library->degree_id = $degree_path['degree']; //wiki setup $wiki =& new Text_Wiki(); $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'sn_library.php?user_id=' . $user_id . '&page='); $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', 'sn_library_edit.php?user_id=' . $user_id . '&page='); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); /* //ACS check - can we edit the library - if we are not a member we turn off the ability to make new links if (!$group_acs->checkPermission($c_acs['arr_acs']['resource']['group_library'], $c_acs['arr_acs']['privilege']['allow_edit'])) { //resourece_id, Priv_id $wiki->setRenderConf('xhtml', 'wikilink', 'view_url', ''); // turn off the ability to link pages $wiki->setRenderConf('xhtml', 'wikilink', 'new_url', '#'); // turn off the ability to create new pages } */ // set an array of pages that exist in the library $pages = $library->getPages(); $wiki->setRenderConf('xhtml', 'wikilink', 'pages', $pages); //setup comment $comment = new Comment($db, $c_node['cms']['item_type']['user_library'], $date); $comment->section_item_id = $user_id; $comment->user_id = $user_id; //process requests if (isset($_POST['preview'])) { $output_comment = $data; $output_comment['display_comment_body'] = htmlspecialchars(nl2br($output_comment["comment_body"])); $display = "preview_comment"; } elseif (isset($_POST['insert'])) { $comment->item_id = $library_id; $comment->insertComment($data); if (empty($GLOBALS['am_error_log'])) { //update user stats //setup statistics require_once($c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); $statistic->section_item_id = $user_id; //update stats $statistic->statistic_type_id = $c_node['statistic']['user']['total_comments']; $statistic->section_id = $c_acs['arr_section']['user']; $group->user_id = $user_id; $statistic->setStatistic($comment->getCommentCount()); //goto the subject return header("Location: sn_library.php?user_id=". $user_id . "&library_id=". $library_id . "&" . SID); exit; } } elseif (isset($_POST['edit_again'])) { $output_comment = $data; } if (isset($_REQUEST['contents'])) { $output_contents = $library->getContents(); $display = "contents"; } elseif (isset($history_library_id)) { $output_history = $library->getHistory($history_library_id); $display = "history"; } elseif (isset($library_id)) { $output_library = $library->getPageID($library_id); //find out if this is the newest article $newest_doc = $library->getPageName($output_library['library_page_name']); if ($output_library['library_id'] == $newest_doc['library_id']) { $newest = true; } } elseif (isset($page)) { $output_library = $library->getPageName($page); $newest = true; } else { $output_library = $library->getPageDefault(); $newest = true; } if (isset($output_library['library_id'])) { $library_id = $output_library['library_id']; $library->user_id = $me['user_id']; $library->library_page_name = $output_library['library_page_name']; //setup bookmarks $bookmark = new Bookmark($db, $c_node['cms']['item_type']['user_library'], $date, $user_id); $bookmark->item_id = $library_id; //watching $bookmark->bookmark_type = $c_node['bookmark']['type']['watch']; //set or unset bookmarks if (isset($_REQUEST['watch'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unwatch'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_library['bookmark']['watch'] = 1; } //recommended $bookmark->bookmark_type = $c_node['bookmark']['type']['recommend']; //set or unset bookmarks if (isset($_REQUEST['recommend'])) { $bookmark->insertBookmark(); } elseif (isset($_REQUEST['unrecommend'])) { $bookmark->deleteBookmark(); } //get and update bookmark if ($bookmark->getBookmark()) { $bookmark->updateBookmark(); $output_library['bookmark']['recommend'] = 1; } //Parser library $output_library['library_body'] = $wiki->transform($output_library['library_body'], 'Xhtml'); $comment->item_id = $library_id; $output_comments = $comment->getComments($library_id, 1); } //get library image if (isset($output_library['file_id'])) { $file->thumb = $c_node['file']['image']['thumb'][1]['name']; $file->file_id = $output_library['file_id']; $output_library['image'] = $file->getFileRecord(); } //move to template if (!empty($output_contents)) { $body->set('contents', $output_contents); } if (!empty($output_history)) { $body->set('history', $output_history); } if (!empty($newest)) { $body->set('newest', $newest); } if (!empty($output_comments)) { $body->set('comments', $output_comments); } if (!empty($output_comment)) { $body->set('comment', $output_comment); } if (!empty($output_library)) { $body->set('library', $output_library); $template_pageLink = $lang['txt_library']; $template_pageLinkNote = $output_library['library_title']; } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } if (!empty($display)) { $body->set('display', $display); } $template_pageLink = $lang['txt_library']; $template_pageLinkNote = $output_profile['profile_nic']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_network.php 777 0 0 5415 10170662753 15044 0noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; $user->file = $file; //setup social network $sn->status_ids = $c_node['user']['status']; $sn->date = $date; $sn->user = $user; $sn->relation_type_ids = $c_node['user']['relation_type']; $output_friend_ids = $sn->getFriends($me['user_id']); if (!empty($output_friend_ids)) { foreach($output_friend_ids as $key => $i): $user->user_ids[] = $i; endforeach; } $user->orderby = "p.profile_nic"; $output_friends = $user->getProfiles(); if (!empty($output_friends)) { foreach($output_friends as $key => $i): $total_friends = $sn->getFriends($i['user_id']); $output_friends[$key]['sn_total'] = count($total_friends); endforeach; } $output_network = $sn->getSocialNetworkSummary(); $network_relations = $sn->getPendingRelations(); if (!empty($network_relations)) { $output_outstanding_invites = count($network_relations[0]); } else { $output_outstanding_invites = 0; } //if they have no friends we redirect them to the form if (empty($output_friends)) { return header("Location: sn_invite.php?" . SID); exit; } //MOVE TO TEMPLATE if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_friends)) { $body->set('friends', $output_friends); } if (!empty($output_outstanding_invites)) { $body->set('outstanding_invites', $output_outstanding_invites); } if (!empty($output_network)) { $body->set('network', $output_network); } $template_pageLink = $lang['txt_network']; $template_pageLinkNote = $lang['txt_profile'] . ": " . $output_profile['profile_nic']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_profile.php 777 0 0 7744 10170662750 15017 0noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; //setup Wiki $wiki =& new Text_Wiki(); $wiki->disableRule('freelink'); $wiki->disableRule('wikilink'); $wiki->setRenderConf('xhtml', 'image', 'base', $c_node['dir']['asset_path'] . 'user/'); $wiki->setRenderConf('xhtml', 'shockwaveflash', 'base', $c_node['dir']['asset_path'] . 'user/'); //block or unblock user if (isset($_REQUEST['block'])) { $display = "block"; } elseif (isset($_REQUEST['unblock'])) { $sn->user_id = $me['user_id']; $user_blocked = $sn->unSetBlockUser($user_id, 'unblock'); } elseif (isset($_POST['set_block'])) { $sn->user_id = $me['user_id']; $user_blocked = $sn->setBlockUser($user_id, $data['block_description']); //rebuild social network $_SESSION['s_social_network'] = $sn->createNetwork(); $sn->updateSnStatistics(); //refresh this page to show new status header("Location: sn_profile.php?user_id=" . $_POST['user_id']."&".SID); exit; } else { if ($sn->getBlockStatus($user_id)) { $display = "blocked"; } } $output_profile['profile_summary'] = $wiki->transform($output_profile['profile_summary'], 'Xhtml'); //setup file if (isset($output_profile['file_id'])) { $file->file_id = $output_profile['file_id']; $output_profile['image'] = $file->getFileRecord(); } elseif (isset($output_profile)) { $output_profile['image']['file_title'] = ""; $output_profile['image']['file'] = $file->noimage; } //setup statistics $statistic = new Statistic($db, $c_acs['arr_section']['user'], $date); $statistic->user_id = $user_id; $output_statistic = $statistic->getStatistics(); //get the relationships $output_relationship_paths = $sn->getDegreePaths($user_id); if (!empty($output_relationship_paths)) { foreach($output_relationship_paths as $key => $r): foreach($r['relation'] as $key => $i): $user->user_ids[] = $i; endforeach; endforeach; } $output_relationship_profiles = $user->getProfiles(); //move to template if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_relationship_paths)) { $body->set('relationship_paths', $output_relationship_paths); } if (!empty($output_relationship_profiles)) { $body->set('relationship_profiles', $output_relationship_profiles); } if (!empty($output_statistic)) { $body->set('user_statistic', $output_statistic); } if (!empty($user_blocked)) { $body->set('user_blocked', $user_blocked); } if (!empty($degree_path['degree'])) { $body->set('degree_id', $degree_path['degree']); } if (!empty($display)) { $body->set('display', $display); } $template_pageLink = $lang['txt_profile']; $template_pageLinkNote = $lang['txt_profile'] . ": " . $output_profile['profile_nic']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_publishing.php 777 0 0 7235 10170662745 15522 0noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup forum $forum = new Forum($db, $c_acs['arr_section']['user'], $date, $file); $forum->user_id = $user_id; //setup blog $blog = new Blog($db, $c_acs['arr_section']['user'], $date, $file); $blog->user_id = $user_id; //setup shout $shout = new Shout($db, $date); $shout->user_id = $user_id; //library setup $library = new Library($db, $c_acs['arr_section']['user'], $date, $file); $library->user_id = $user_id; //event setup $poll = new Poll($db, $c_acs['arr_section']['user'], $date); $poll->user_id = $user_id; //activity setup $activity = new Activity($db, $c_acs['arr_section']['user'], $date, $file); $activity->user_id = $user_id; //get published items $output_publish_library = $library->getLibraryItems(); $output_publish_forum = $forum->getSubjects(); $output_blogs = $blog->getBlogs(); $output_shouts = $shout->getShouts(); //get total replies for subjects if (!empty($output_publish_forum)) { foreach($output_publish_forum as $key => $i): $forum->subject_id = $i['subject_id']; //$output_publish_forum[$key]['total_replies'] = $forum->getReplyCount(); $output_publish_forum[$key]['total_replies'] = 0; endforeach; } //get poll participation $output_poll_participation = $poll->getUserPollParticipation(); //move to template if (!empty($output_publish_library)) { $body->set('publish_library', $output_publish_library); } if (!empty($output_blogs)) { $body->set('publish_blogs', $output_blogs); } if (!empty($output_publish_forum)) { $body->set('publish_forum', $output_publish_forum); } if (!empty($output_shouts)) { $body->set('publish_shouts', $output_shouts); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } if (!empty($output_poll_participation)) { $body->set('poll_participation', $output_poll_participation); } $template_pageLink = $lang['txt_publishing']; $template_pageLinkNote = $lang['txt_publishing'] . ": " . $output_profile['profile_nic']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_recommended.php 777 0 0 13073 10170662736 15655 0bookmark_type = $c_node['bookmark']['type']['recommend']; $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_blog']; if (isset($_POST['rec_blog_delete_id']) && $_POST['rec_blog_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_blog_delete_id']); } $recommended_blog_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_activity']; if (isset($_POST['rec_activity_delete_id']) && $_POST['rec_activity_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_activity_delete_id']); } $recommended_activity_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_library']; if (isset($_POST['rec_library_delete_name']) && $_POST['rec_library_delete_name'] > 0) { $bookmark->deleteBookmark($_POST['rec_library_delete_name']); } $recommended_group_library_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_forum_subject']; if (isset($_POST['rec_subject_delete_id']) && $_POST['rec_subject_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_subject_delete_id']); } $recommended_subject_ids = $bookmark->getBookmarks(); $bookmark->cms_item_type_id = $c_node['cms']['item_type']['group_poll']; if (isset($_POST['rec_poll_delete_id']) && $_POST['rec_poll_delete_id'] > 0) { $bookmark->deleteBookmark($_POST['rec_poll_delete_id']); } $recommended_poll_ids = $bookmark->getBookmarks(); //setup file $file->noimage = $c_node['file']['image']['thumb'][3]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][3]['name']; //setup forum $forum = new Forum($db, $c_acs['arr_section']['group'], $date, $file); $forum->include_hidden = 1; //setup blog $blog = new Blog($db, $c_acs['arr_section']['group'], $date, $file); $blog->section_item_id = $user_id; //library setup $library = new Library($db, $c_acs['arr_section']['group'], $date, $file); $library->section_item_id = $user_id; //event setup $activity = new Activity($db, $c_acs['arr_section']['group'], $date, $file); $activity->section_item_id = $user_id; // poll setup $poll = new Poll($db, $c_acs['arr_section']['group'], $date); $poll->section_item_id = $user_id; //get recommended user blogs if (!empty($recommended_blog_ids)) { $blog->blog_ids = $recommended_blog_ids; $output_recommended_blogs = $blog->getBlogs(); } //get recommended subjects if (!empty($recommended_subject_ids)) { $forum->subject_ids = $recommended_subject_ids; $output_recommended_subjects = $forum->getSubjects(); } //get recommended group library items if (!empty($recommended_group_library_ids)) { $library->module = "group"; $library->library_item_ids = $recommended_group_library_ids; $output_recommended_group_library_items = $library->getLibraryItems(); } //get recommended events if (!empty($recommended_activity_ids)) { $activity->activity_ids = $recommended_activity_ids; $output_recommended_activities = $activity->getActivities(); } //get recommended polls if (!empty($recommended_poll_ids)) { $poll->poll_ids = $recommended_poll_ids; $output_recommended_polls = $poll->getPolls(); } //move to template if (isset($output_recommended_subjects)) { $body->set('recommended_subjects', $output_recommended_subjects); } if (isset($output_recommended_group_library_items)) { $body->set('recommended_group_library', $output_recommended_group_library_items); } if (isset($output_recommended_activities)) { $body->set('recommended_activities', $output_recommended_activities); } if (isset($output_recommended_blogs)) { $body->set('recommended_blogs', $output_recommended_blogs); } if (isset($output_recommended_polls)) { $body->set('recommended_polls', $output_recommended_polls); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_relationship)) { $body->set('relationship', $output_relationship); } $template_pageLink = $lang['txt_recommended']; $template_pageLinkNote = $lang['txt_recommended'] . ": " . $output_profile['profile_nic']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/sn_statistics.php 777 0 0 3611 10170662732 15536 0section_item_id = $user_id; $output_statistic = $statistic->getStatistics(); $statistic->user_status = $c_node['user']['status']; $output_node_statistics = $statistic->getNodeStatistics(); $output_node_statistics = $statistic->getNodeStatistics(); //move to template if (!empty($output_node_statistics)) { $body->set('node_statistics', $output_node_statistics); } if (!empty($output_profile)) { $body->set('profile', $output_profile); } if (!empty($output_statistic)) { $body->set('user_statistic', $output_statistic); } $template_pageLink = $lang['txt_statistics']; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/aroundme_0_4_0/template/ 777 0 0 0 10152641252 13654 5aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/ 777 0 0 0 10170307023 15750 5aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/a_activity.tpl.php 777 0 0 16652 10170665173 21545 0








     















    $i): ?>




    , ,
    $i['task_confirmed']) { //more spaces than those users confirmed for task if (isset($i['status']['status_id'])) { ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/a_calendar.tpl.php 777 0 0 26315 10170665171 21455 0
    0) { ?>









    ?time=" class="txt_sub_menu">

    ?time=" class="txt_sub_menu">






      $i): ?>


    <?php echo $i['image']['image_title'];?>




    $i): ?>







    $i): ?>






     


    $r): if ($day == 0) { echo ""; } ?> "; $day = 0; } endforeach; } ?>
    ">

     

    $i): ?>







    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/a_menu.inc.tpl.php 777 0 0 3624 10170665165 21401 0






    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/a_schedule.tpl.php 777 0 0 12027 10170665162 21473 0



    ?time=" class="txt_sub_menu">
    ?time=" class="txt_sub_menu">

     



    $r): if(isset($r['content'][0]) | $key>8){ ?>
    On this day
    "; foreach($todo as $key => $i): $title = "title: " . $i['activity_title'] . "\n" . "description: " . $i['activity_description'] . "\n" . "time: " . $i['activity_start_datetime'] . "\n" . "location: " . $i['activity_location']; if($i['activity_type_id']<3){ if(!isset($set_title)){ echo "
    Non time specific activities
    "; $set_title = "yes"; } ?> " class="txt_footer_link" title="">

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/aroundme.css 777 0 0 11165 10170665156 20421 0/* # ----------------------------------------------------------------------- # This file is part of aroundme # # Copyright (C) 2003, 2005 Barnraiser # http://www.barnraiser.org/ # info@barnraiser.org # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) any # later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with program; see the file COPYING. If not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # ----------------------------------------------------------------------- */ body { margin-top: 20px; margin-right: 20px; margin-bottom: 20px; margin-left: 20px; font-family:Verdana,Arial,Helvetica,Geneva,sans-serif; font-size: 0.7em; color: #333333; text-decoration: none } a { color: #333333; text-decoration: underline } a:hover { color: #79C36D; text-decoration: underline } .txt_on { color: #79C36D; text-decoration: none } .txt_main_menu { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 1.9em; font-weight: bold; color: #333333; text-decoration: none } .txt_main_menu:hover, .txt_main_menu_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 1.9em; font-weight: bold; color: #79C36D; text-decoration: none } .txt_sub_menu { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: medium; font-weight: normal; color: #333333; text-decoration: none } .txt_sub_menu:hover, .txt_sub_menu_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: medium; font-weight: normal; color: #79C36D } .txt_title { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: medium; font-weight: normal; color: #8F8F8F } hr { background-color: #BDBDBD; height: 1pt; margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; } .txt_light { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: normal; color: #8F8F8F; text-decoration: none } .formInput { background-color: #FFFFFF; border-color: #BDBDBD #BDBDBD #BDBDBD #BDBDBD; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; color: #333333 } .txt_breadcrumb { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: xx-small; font-weight: normal; color: #8F8F8F; text-decoration: none } .txt_breadcrumb:hover, .txt_breadcrumb_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: xx-small; font-weight: normal; color: #79C36D; text-decoration: none } .picture { border-color: #333333 #333333 #333333 #333333; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; } .picture_left { border-color: #333333 #333333 #333333 #333333; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; } .txt_footer { font-family: Arial, Helvetica, sans-serif; font-size: xx-small; font-weight: normal; color: #666666; text-decoration: none } .txt_footer_link { font-family: Arial, Helvetica, sans-serif; font-size: xx-small; font-weight: normal; color: #666666; text-decoration: underline } .txt_footer_link:hover { font-family: Arial, Helvetica, sans-serif; font-size: xx-small; font-weight: normal; color: #79C36D; text-decoration: underline } .txt_error { font-family: Courier New, Helvetica, sans-serif; font-size: 1.0em; color: #666666; background-color: #eeeeee } .bg1 { background-color: #79C36D } .bg2 { background-color: #BEBCBC } .bg3 { background-color: #CBD5C9 } .bg4 { background-color: #E8EAE8 } .txt_item_title { font-family:Verdana,Arial,Helvetica,Geneva,sans-serif; color: #333333; font-size: 1.5em; font-weight: bold; text-decoration: none } .txt_search_highlight { color: #79C36D; font-weight: bold; text-decoration: underline } aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/default.tpl.php 777 0 0 22547 10170717645 21037 0 \n";?> <?php echo $lang['txt_page_title'];?>

    user_acs->checkPermission($resource_ids['social_network'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id ?>
    " . $lang['href_selection'] . "
    "; } else { echo "" . $lang['href_selection'] . "
    "; } ?>
      /  
    " . $lang['href_messages'] . "
    "; } else { echo "" . $lang['href_messages'] . "
    "; } ?>
      /  
    " . $lang['href_me'] . "
    "; } else { echo "" . $lang['href_me'] . "
    "; } ?>
      /  
    " . $lang['href_network'] . "
    "; } else { echo "" . $lang['href_network'] . "
    "; } ?>
      /  
    " . $lang['href_groups'] . "
    "; } else { echo "" . $lang['href_groups'] . "
    "; } ?>
      /  
    " . $lang['href_activities'] . "
    "; } else { echo "" . $lang['href_activities'] . "
    "; } ?>
    $i): if(isset($i['breadcrumb_title'])) { if (count($breadcrumb) == $key+1) { echo "" . $i['breadcrumb_title'] . ""; } else { echo "" . $i['breadcrumb_title'] . " .. "; } } endforeach; } ?>

    $i): if (isset($i[0])) { unset($error); if (isset($error_handling) && $error_handling>0 && isset($i[1])) { $error = $lang['arr_error'][$i[0]] . ": " . $i[2] . "
    "; } elseif (empty($i[1])) { $error = $lang['arr_error'][$i[0]] . "
    "; } } if (isset($error)) { ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/default_pre_login.tpl.php 777 0 0 7275 10170665142 23050 0 \n";?> <?php echo $lang['txt_page_title'];?> $i): if (isset($i[0])) { unset($error); if (isset($error_handling) && $error_handling>0 && isset($i[1])) { $error = $lang['arr_error'][$i[0]] . ": " . $i[2] . "
    "; } elseif (empty($i[1])) { $error = $lang['arr_error'][$i[0]] . "
    "; } } if (isset($error)) { ?>




    aroundme version 0.2.2
    W3C XHTML validated
    W3C CSS validated
    Please consider
    donating to
    barnraiser.

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/err_not_in_sn.tpl.php 777 0 0 3746 10170665137 22227 0

     



    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/error.tpl.php 777 0 0 4447 10170665134 20516 0






     



    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_acs.tpl.php 777 0 0 16451 10170665132 20455 0

     



    $rol): ?> $res): ?> $priv): ?> $perm): $checked = ""; if ($perm == 1) { $checked = "checked"; } ?>





    ]" value="1" />


    $i): ?>





    />










    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_activity.tpl.php 777 0 0 21434 10170665127 21544 0



    group_acs->checkPermission($resource_ids['group_activity'], $privilege_ids['allow_edit'])) { //resourece_id, Priv_id ?>






     















    $i): ?>


    group_acs->checkPermission($resource_ids['group_activity'], $privilege_ids['allow_edit'])) { //resourece_id, Priv_id ?>


    , ,
    $i['task_confirmed']) { //more spaces than those users confirmed for task if (isset($i['status']['status_id'])) { ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_activity_edit.tpl.php 777 0 0 41502 10170665124 22544 0

     



       : />

       : >

       : />

       : >

       : />
    :

       : >

       : />

       : >



































    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_public'])) { //resource_id, Priv_id if ($cms_node_auto_publish == 1) { $txt_cms_node = $lang['txt_cms_node_auto']; } else { $txt_cms_node = $lang['txt_cms_node']; } ?> /> 
    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_group_home'])) { //resource_id, Priv_id if ($group['group_cms_auto_publish'] == 1) { $txt_cms_group = $lang['txt_cms_group_auto']; } else { $txt_cms_group = $lang['txt_cms_group']; } ?> /> 




     no image
    $i): $selected = ""; if (isset($activity['file_id']) && $activity['file_id'] == $i['file_id']) { $selected = "checked=\"checked\""; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    />







    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_activity_task_edit.tpl.php 777 0 0 24521 10170665122 23566 0





     

















    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_public'])) { //resource_id, Priv_id if ($cms_node_auto_publish == 1) { $txt_cms_node = $lang['txt_cms_node_auto']; } else { $txt_cms_node = $lang['txt_cms_node']; } ?> /> 
    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_group_home'])) { //resource_id, Priv_id if ($group['group_cms_auto_publish'] == 1) { $txt_cms_group = $lang['txt_cms_group_auto']; } else { $txt_cms_group = $lang['txt_cms_group']; } ?> /> 

















    $i): ?> 0) { ?>






     
      
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_apply.tpl.php 777 0 0 11674 10170665116 21040 0
     
























    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_blog.tpl.php 777 0 0 27350 10170665113 20631 0



    group_acs->checkPermission($resource_ids['group_blog'], $privilege_ids['allow_edit'])) { //resource_id, Priv_id ?>



      $i): ?>








    $i): ?>










    $i): ?>





    group_acs->checkPermission($resource_ids['group_blog'], $privilege_ids['allow_comment']) && empty($subject['subject_locked'])) { ?> img/pixel.png width="1" height="20">



      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_blog_edit.tpl.php 777 0 0 23054 10170665111 21631 0






     



      














    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_public'])) { //resource_id, Priv_id if ($cms_node_auto_publish == 1) { $txt_cms_node = $lang['txt_cms_node_auto']; } else { $txt_cms_node = $lang['txt_cms_node']; } ?> /> 
    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_group_home'])) { //resource_id, Priv_id if ($group['group_cms_auto_publish'] == 1) { $txt_cms_group = $lang['txt_cms_group_auto']; } else { $txt_cms_group = $lang['txt_cms_group']; } ?> /> 




     no image
    $i): $selected = ""; if (isset($blog['file_id']) && $blog['file_id'] == $i['file_id']) { $selected = "checked"; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    .
    $f): ?> .
    />

       0) { ?>
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_calendar.tpl.php 777 0 0 20300 10170665105 21444 0



    ?group_id=&time=" class="txt_sub_menu">

    ?group_id=&time=" class="txt_sub_menu">







      $i): ?>






     


    $r): if ($day == 0) { echo ""; } ?> "; $day = 0; } endforeach; } ?>
    ">

     

    $i): ?>








    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_cms.tpl.php 777 0 0 50771 10170665102 20471 0





      $i): foreach($cms_subjects as $key1 => $r): if ($i['subject_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_library_items as $key1 => $r): if ($i['library_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_activities as $key1 => $r): if ($i['activity_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_tasks as $key1 => $r): if ($i['task_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_blogs as $key1 => $r): if ($i['blog_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_files as $key1 => $r): if ($i['file_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_polls as $key1 => $r): if ($i['poll_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?>













     
     
          




    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          




    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          





    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          





    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />


     
     
          




    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          



    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          



    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_files_edit.tpl.php 777 0 0 23653 10170665076 22027 0
    100) { $percentage_used = 100; } $percentage_unused = 100 - $percentage_used; if ($storage['allocation'] > $storage['allocation_used']) { ?>




     


    : kb
    : kb
    img/pixel.png width="1" height="7" alt="" />
    img/pixel.png width="1" height="7" alt="" />














    :





    ()







     








    .
    kb
    />

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_forum.tpl.php 777 0 0 15652 10170665074 21046 0



    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_edit'])) { //resource_id, Priv_id ?>










      $r): ?> $i): $url = "g_forum_subject.php?group_id=" . $group['group_id'] . "&subject_id=" . $i['subject_id']; ?>





    :


    :
    ";}?> "; echo "(" . $lang['txt_movement'] . " ". $i['movement']['movement'] . ")"; } ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_forum_subject.tpl.php 777 0 0 30143 10170665071 22552 0









    $i): ?>




    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_edit'])) { //resource_id, Priv_id ?> img/pixel.png width="1" height="20">



    /> 
    /> 
    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_hidden'])) { //resource_id, Priv_id ?> /> 


     




    :  (joined: , hometown: )


    $i): ?>





    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_comment']) && empty($subject['subject_locked'])) { ?> img/pixel.png width="1" height="20">



      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_forum_subject_edit.tpl.php 777 0 0 30152 10170665066 23563 0

     



    :

      










    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_hidden'])) { //resource_id, Priv_id ?>




    /> 
    /> 


    /> 



    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_public'])) { //resource_id, Priv_id if ($cms_node_auto_publish == 1) { $txt_cms_node = $lang['txt_cms_node_auto']; } else { $txt_cms_node = $lang['txt_cms_node']; } ?> /> 
    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_group_home'])) { //resource_id, Priv_id if ($group['group_cms_auto_publish'] == 1) { $txt_cms_group = $lang['txt_cms_group_auto']; } else { $txt_cms_group = $lang['txt_cms_group']; } ?> /> 




     no image
    $i): $selected = ""; if (isset($subject['file_id']) && $subject['file_id'] == $i['file_id']) { $selected = "checked"; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    />






      
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_forum_topic_edit.tpl.php 777 0 0 10777 10170665063 23252 0

      $i): ?>






    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_hidden'])) { //resource_id, Priv_id ?>








    /> 


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_group.tpl.php 777 0 0 37451 10170721251 21041 0



    group_acs->checkPermission($resource_ids['group_acs'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_acs") { ?>

    group_acs->checkPermission($resource_ids['group_administration'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_group_edit" && isset($display) && ($display == "edit_group_rules" || $display == "edit_group_rules")) { ?>

    group_acs->checkPermission($resource_ids['group_administration'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_group_edit" && !isset($display)) { ?>

    group_acs->checkPermission($resource_ids['group_files'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_files_edit") { ?>

    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_edit'])) { //resourece_id, Priv_id if ($page_name_short == "g_cms") { ?>


     




    $i): ?>






    $i): ?>






    $i): ?>




    img/pixel.png width="1" height="4">


    $i): ?>








    $i): ?>







     



    <?php echo $group['image']['file_title'];?>














    $i): ?>




    $i): ?>




    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_group_create.tpl.php 777 0 0 22004 10170665054 22360 0

     



























     
    /> 
    /> 


     








    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_group_edit.tpl.php 777 0 0 22666 10170665047 22062 0

     



























     



























    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_groups.tpl.php 777 0 0 17565 10170665044 21237 0






      $i): ?>


    <?php echo $i['image']['file_title'];?>



    $i): ?>


    <?php echo $i['image']['file_title'];?>



    $i): ?>


    <?php echo $i['image']['file_title'];?>



    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_library.tpl.php 777 0 0 41174 10170665041 21352 0



    group_acs->checkPermission($resource_ids['group_library'], $privilege_ids['allow_edit']) && isset($library_first_page)) { ?>


    group_acs->checkPermission($resource_ids['group_library'], $privilege_ids['allow_edit']) && isset($library['library_id'])) { ?>










     


    <?php echo $library['image']['file_title'];?>
    $i): ?>









    $i): ?>







    $i): ?>












    $i): ?>





    group_acs->checkPermission($resource_ids['group_library'], $privilege_ids['allow_comment']) && empty($subject['subject_locked'])) { ?> img/pixel.png width="1" height="20">



      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_library_edit.tpl.php 777 0 0 27140 10170665036 22360 0








    :
    :
    :

    0) { ?>



     
















    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_public'])) { //resource_id, Priv_id if ($cms_node_auto_publish == 1) { $txt_cms_node = $lang['txt_cms_node_auto']; } else { $txt_cms_node = $lang['txt_cms_node']; } ?> /> 
    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_group_home'])) { //resource_id, Priv_id if ($group['group_cms_auto_publish'] == 1) { $txt_cms_group = $lang['txt_cms_group_auto']; } else { $txt_cms_group = $lang['txt_cms_group']; } ?> /> 




     no image
    $i): $selected = ""; if (isset($library['file_id']) && $library['file_id'] == $i['file_id']) { $selected = "checked"; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    .
    $f): ?> .
    />


      




      
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_member_profile.tpl.php 777 0 0 40304 10170665033 22670 0











    group_acs->checkPermission($resource_ids['group_membership'], $privilege_ids['allow_edit'])) { //resourece_id, Priv_id $edit_admin = 1; } else { ?>










     



    $i): ?>







    $i): ?>







    $i): ?>







    $i): ?>







     



    <?php echo $profile['image']['file_title'];?>

    " . $lang['arr_user_online_status'][1] . "
    "; } else { echo $lang['arr_user_online_status'][$profile['online_status']] . "
    "; } ?>










    <?php echo $lang['ttl_send_message'];?>






    $i): ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_membership.tpl.php 777 0 0 21574 10170665030 22041 0







    group_acs->checkPermission($resource_ids['group_membership'], $privilege_ids['allow_invite'])) { //resourece_id, Priv_id ?>






     





    $i): ?>















    $i): ?>














    $r): if ($r['role_id'] == $i['role_id']) { echo $r['role_name']; break; } endforeach; ?>

    <?php echo $lang['ttl_send_message'];?>



    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_menu.inc.tpl.php 777 0 0 14254 10170665026 21424 0













    group_acs->checkPermission($resource_ids['group_forum'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_forum") { ?>

    group_acs->checkPermission($resource_ids['group_library'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_library") { ?>

    group_acs->checkPermission($resource_ids['group_membership'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_membership") { ?>

    group_acs->checkPermission($resource_ids['group_poll'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_poll") { ?>





    group_acs->checkPermission($resource_ids['group_blog'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_blog") { ?>

    group_acs->checkPermission($resource_ids['group_activity'], $privilege_ids['allow_access'])) { //resourece_id, Priv_id if ($page_name_short == "g_calendar") { ?>

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_poll.tpl.php 777 0 0 32454 10170737502 20657 0



    group_acs->checkPermission($resource_ids['group_poll'], $privilege_ids['allow_edit'])) { //resourece_id, Priv_id if (isset($poll['poll_id']) && (isset($poll['allow_edit']) || empty($comments))) { ?>







      $i): ?>






    $i): ?>





     


    $i): ?>





     


    $i): ?>


    $i): ?>



    $r): ?>



    group_acs->checkPermission($resource_ids['group_poll'], $privilege_ids['allow_comment']) && empty($subject['subject_locked'])) { ?>

    img/pixel.png width="1" height="20">





      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_poll_edit.tpl.php 777 0 0 21425 10170665017 21661 0





     












    />


    />


    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_public'])) { //resource_id, Priv_id if ($cms_node_auto_publish == 1) { $txt_cms_node = $lang['txt_cms_node_auto']; } else { $txt_cms_node = $lang['txt_cms_node']; } ?> /> 
    group_acs->checkPermission($resource_ids['group_cms'], $privilege_ids['allow_cms_group_home'])) { //resource_id, Priv_id if ($group['group_cms_auto_publish'] == 1) { $txt_cms_group = $lang['txt_cms_group_auto']; } else { $txt_cms_group = $lang['txt_cms_group']; } ?> /> 


    $i): ?>








         










    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_schedule.tpl.php 777 0 0 12254 10170665014 21477 0



    ?group_id=&time=" class="txt_sub_menu">
    ?group_id=&time=" class="txt_sub_menu">

     



    $r): if(isset($r['content'][0]) | $key>8){ ?>
    On this day
    "; foreach($todo as $key => $i): $title = "title: " . $i['activity_title'] . "\n" . "description: " . $i['activity_description'] . "\n" . "time: " . $i['activity_start_datetime'] . "\n" . "location: " . $i['activity_location']; if($i['activity_type_id']<3){ if(!isset($set_title)){ echo "
    Non time specific activities
    "; $set_title = "yes"; } ?> " class="txt_footer_link" title="">

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/g_structure.tpl.php 777 0 0 12551 10170665011 21740 0

     











     






    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/ 777 0 0 0 10167221012 16523 5aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/am_base.png 777 0 0 6044 10146727751 20731 0PNG  IHDRfP"gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTErwfffuzsx{ƀ̙x}ܱv{ۮư̍ݲʈ|ƁtyuuwЙȅˋxy{ب~ǃȃ޵Ɉ͎߸ߪڭz~譭x|y}̨٫ɇɆy~zw|Ɇͩڬҵqrtݳ޶vwyʊɫۮ}ǂ}~̎wxz܋͐緸٪ົzz|{|~۰įݲຄا͏҇ݾˌة𴴵ܰtRNSELhIDATxbXH@  d @5D'kN R`ggOn$"Vnd%";` " =S&ia a- -[vH 7" t {8I Ɩ!rB{ v=L[@[cp!4l4 h>…B~t&p!K, bWwHNκ |D"l3dIf5IL …F N v61Y Z3]'!a IkPfN"dtWؓua`Ỵnv0Zi)!k5 z`' 0 AZ>DdU"`2,{$Mho d'm,rGb 7̕=JHb2g`1م u moV6R&h/eօ6Zsa6P ( )dݬ AzO~k<@ÈkBGH٩ .8a&Ak Yy,\P vVpM  [,$#Cv؅ m.e`P5D S;(82kR6BV:Gx o@|((%MP}sq  paVbeemWZɲpazD^VV[#`V!T2m&8y1A$hyC MBmP.$T:؏=$\̋` @$v%ك\ŵf:g6Cy'؇ʥD7DL 4W2=`=@%2/FրtTJ -qºR.d$kyD10d.\/ȀMs=f@X{  "QЂsa0#ALa A@DYԢqXf."7D5J l wX@DX.֬ع9TAZM$ȫ FDX@DXLԊ$<; [F5Dd!9R bJ"CQ="V#xiúSQb5 "73!3op F~g& @vXm4]Y`V/h# @tL :Y@t d @5D'kN..(-0%DeYФ,*ƃ'XˁTqeAF!#F~qtYShf2 LId9DHDq1J8@;!je@)fP;^*h&B 5@)`F #nFU...D5ӀQ5 \\͌@O`b.WO@kz<ȅfERQJq…U`IQaa[…"JAd ;cCZ q2D7JFH-FFD#Y0ѐu{(fc7`Wa@kXM whqB+$TkYUCPaMh k/zA}mf17771ob 0dF&1QbM4c=5:@3r5 Y> dBu,@k X!l@1,Ƅb(X.uT5\0k@kA,aM؛@1@BVh4%PRbjRe3 MYUPk f +-o5. b`![wfI-T0ͬ0kVCIE'Ȁ2dkr%*LP![#m&Ƅ݌A-̔<)rBuJ -.R"w%bb#`ND2 d @5D'kN :Y@t d @PF IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/aroundme.png 777 0 0 7357 10146727740 21162 0PNG  IHDRwMDgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTErwfff໙̙{ƀݧ٪̈ʈ԰ݳ~tuw⹺SїtRNS" OIDATxb h; h; h; h; h; h; h; h; h; h; d~Vj @Tt '30QT9;ZĀ8d0@QɁ :&u@+5ÏXB aᇕ6eDC3HPd(3+H硼 *0,𱱱"H  @pcFVDfxbN dF60:5@1P9S J><u Z}†p/p~ll 8 L6!P#Q @@>vXmՁA#."ÁX.M.-rJE"݁,XZ.Pxcdcs@n`SB cfgcbFkAjIB〥ZRkg"сebVfFRIj@$: ˱`3Ji4P,PUr"eq@@!lP Y`lY&idFd>&ffᙔg) $#Dn @$9:ػuH$$r;j ٬,(7 <`Da1ƀZ[&DȌ:)vI u RBIH2Has/I s 36" HuӁ$uTz!‡Q@  ύ4ȁ^ bR5  ȃ0̰Z:B!<("3 3K>XVlpT^I@}  KqlDɄP ,xN4DZUǃHv|BLHm06TrPk$UD96nA Atf ۃ6>,q cvH Ht c"+'rOZ\#`ؔYMj"O 8y2) RȊ6XɁK ,8u&}DzǝgF9]S4l$@Q<#&s3;?!L"km=X=Sx!"sMR:CMDt{9q ɱ s ;*B Bƫ,"Iodž 'o r 'r=u';33#@x5@1EG ǂ`U3R,Mt&R3#;J {n v 3̈2!Ɔ/ %Q9vȁ@@d;5H5jמ r | 'R_3UYGQA;ٳDTRďV#Hs dD^]̀6ZVs@9ɲ s;' %f <Vzp`w aYDf6&2' u %ZTS0 D}_NĈއ"0](Qd%2y%YPCDٲN r$ !$x(Za@k<1W@f&N> -A h; h; h; h; h; h; $ sq݁s(((#p"75p Y PU7DFn^a+; @ ㆋ1p BA@s͎<>Td72B+Έ DX;BK3!M33#8F .m@?@`B}@^H*%V pg1 cgce DPa-m`DeEp8jACh@܈&u +YE@0Fr ؅P;A u b(.n("Cm .. YaJA4Zc u 't)@ 2hc-ABq: :3yI`9 2 +IA,OJϒinȇmrR.S:.~QI;R`r\LY@stqR~$Ö4...s@t,-;OWhj*0E!Q&dk7MhW+'W4PL\L\@/;?VvCH%a ক3q2MP;9L|K&.o e $tucM i\ .KE&vݳ4k)W1 ȥRB\`2Y%aZ'1LL*ARԾ joCP;!@ $e`D@*`+kFZ3PYHo7)t6XHv842@"Ф4$13dd"ށUL!ځZ$gL v ,gf8@D;P ԋe"5CT/P#́D|2س*KYbԩ &9i w u>[ܰCh܋ȂXZ ~9 HŬhi`ά1BuUNM!-;9d,vX@.LK c'iMfty1C"Łg fQ111&;&DJ,bN1vC" !3P &DV!فDJt_|uҖd4(ubx[r0)ۦ# ,\A"%pWkzFCp\X(O"94R @4&0:UPTJ 3d@"!Ep-g,K,ປԙ "ӄfq1V%\DNuYłIs @T`5a сDZ= @2L$*YģIƉ E.~peg@ԖbH!(L"bb$DYY}JcK7le%!9@6x o2身Yh6DJVNTяk$A{Vr:XL@b~GyPxYa٧{HM%-.!h1at&/hB{ОO"Ł58zO'1*B HI&<|pPx@"Łn20@"9a BZ HŬmhe1bG$a$}&)1 U Hb"ɁS,fdYGH^I`z7b&@"ɁbX"" Hq`3G@I}|~`j!ׁ)SHs"@XN3==[ƄuYH@"́Jŀ 4k$"۪5D'v^!p. \ B2 {x+OxE3Xj(#VNUDڭL132RfX18pȔ3gjX=|U!\Vn`t{ +X[ A@A@A@A@A@A@@VVdA@hP;PJQ zNiDrssi1DYa$(@b@n[Za-^}-܌n)͉R*d32rc-+)  y1}P.@1lA8n}!@'Bj(=͕!`%X5Kl4 A eA4\U( Ls36@fd:507# *Sԩ0ca4#;4$+ J32J] ć z[C; f$Pa=2e  r۶cGE1wpE!aK @g bNH$رEI܌`-\Pcraƀ@1Le# x[@ҌL5ՔKNhv2d̩厀. fv EnF'Vt ,:!ư+! H.`Kۆ9Ͳ~0'=(`4MS<h0!0A \## V x(U I/( tb4 ʼn<#…&ܠm bj< 2 B0oX7+ H#'( *!IЬ9ʚ` 0VA-jPt+$ #vT~Enx*U!Hq.Ȣx\cdi:,:Y=cД 00+0Neuv8 n2$#qskB:`8)!eq@N 0F+VE٪Nc##+FEVC` -S8 b @h8k0 g웊Ł|@=u #4 E҄b I=Z:5\B<ā2@'4 4q 0U!;5 [ XNA]}"%tC%+,ƀ `p^NDbV`Xk E1w0ڒ o8@vW\5%@AȎ@>x:`ruN&"Nn#ȉ$ #(>Wc. @  ![ X,yj7'F0zC9$,XQV77Xb@ mP sb@M`,0v$n` 1C@,$4`psQ@g!ۘq28@A wd춬2-S9R"U+( H`Nb3z&k$ԁQ!z5B Vnj`$k+3ڇ;hX *0L ,u 0|!"ހ$(@DNmh &ZŞќlrׂR!0 Z`3c! A pqZ:T͝|VBT@ÍATZS@ ^YIlSefC_ܐI0ѧ RKp=$ o'n^ 0})PLJ 7RD*e-< : vVXPk[!Ham s_Dꚃb1Tl1چz 2.YBP1 ]"Vh鏭 T# p-'Il%zȕX NI-z[P p&! @&+61\-M|X:sX#~ ҇>J , [`*@#/`mIENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/donate.png 777 0 0 3453 10146727703 20612 0PNG  IHDRI,egAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEM*a`bPh;㺷5ׇؘPҕ>@E郀NC tRNS\\IDATxb   pM IL"$$+)/@ bLrYnyb 9v&yb$vn&qyI, @f >K$2 &`P%]NZMJJGHa@MefVfI`sf JA$B6 ;$&Rp 3 f9xA&I3"7Mj@M␓fcgg؁L!'. d$B2IOO[@@&4XH: =6IP$vfV>^V^n>1avI 4Dq r@(&I 1˰00 $. Q.nqn~nIn^Fn.QnQIj + 4  7$^.~qIF.^&nF.66Q^n~FIb0MI10w"\\\ "\|b b0$>p8',*Lݢ50$$y!..%...( qBIr,r ž Q'NlT@)(<

    IDdܡwD@P)ܢ@A^\ؔpr,7(E@RDVT h&Yq ,<@Z”`s\ 0O12IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/favicon.ico 777 0 0 2247 10131714366 20746 0JFIFddDuckydAdobed     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?{',/IM8bq՛)35Vap>SCU_djVƕ(̢1y](}j # DUΑ6:7mii*VEt2")'G(SP鿫;qm̖&fDUmꪍŅfq閫dsX֠XD8ܵmD,J{ojnvPҠk!jRbVSHՉeII)A;4k) E:6r]#ъ ^ T4˞}^ 4Tx1P0U/*1t8JTۼcm&MOAXe"mڋ(mA'06]$|KhɥuD 5!Y. *KDT9qh ڸ d1dsQٕ/쭑.7k/Q@HHc)F ]ծ%#:hEDE@C^a]xs$q t|OKe8QhP5uaroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/file_pdf.png 777 0 0 1552 10155057317 21103 0PNG  IHDR !YcgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEwww99989⚛bbb8;MQXXXjmRUEEE[]NNN34nqsu㌎87㏑|WX༽EH-2䁃cfEGUX+.kkk2HIDATxbde8y 8@ 8#P &F)NNb`d $Apd y`T0 ``@  &0j  p ,66).Ff030 AjQE8 X8Y٥Hh ) .v66^$/ ;$t/rtH $ ; pTPR## R@@G 9GTTPG^ ٹX $x,~#bdy M$0 Jn9 D^`53+,+H Y.`)Pbce)) @A5nVVAfVfaVViAi..Ƞ*fa1(* v XXDXXe  D`PM`e BS`fU* ! +FfbbF\i %""bŒ8"8aȴiIENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/file_swf.png 777 0 0 4046 10155156463 21134 0PNG  IHDR !Yc pHYs  gAMA|Q cHRMz%u0`:o_FPLTE&rrvvӯ '%:c~FFrrr.Zxxy2dd "__1^1Z YY{CC %q--abb4^7accd&I0G𻻼ҭ1ddd \켨¯o++ (&ΎЗ](MMs//~PPu==Hl~%#؏nn+ݬyy3(-ptttGg Y#yII cdd)/Y,3Ty:]өűůڕ%%֠yy[[ O)3I1<Aizzź[[ccffqqq:نtRNSS%IDATxba{mol[@X?@1W^ նm^;c ((xuc2@RQ ! &v,Z<(@7DhĢ H@Ǽ؀Ic w W7.Sm۱*H|@~7\Tūc7$oW sYvXּ@޸!) 7|߷ Ą ?l)X R@ %64|+Sg{d] 1``X 1'O2H3M b@J6\*;&PAa17o@ 6@T|[CLzp 1PΌ9o+P~b4ҥK ! }aXQ?@>@7Zl@Mpi+sbUb1fÆbfJ/Inq@1\*t'S sG@}aF7.]jR1&l@ ntA<@7> b1]}#K3f *(@ nQ #'cbxn?@S /lɿ4E@@r/k+< Ɍ+շϿA,Zt@AR-f2ȑQjٞviZ(ow* !$ &T#;T!,H<@P~U|!z4?@R~*IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/file_txt.png 777 0 0 3426 10155074753 21156 0PNG  IHDR ?gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEtzynooy|{hAz}}nno~oooilljmlw{{onooop}~~퉌x|{uzzoo鶻gkkpppmnn؛q(q1#@X C(P( t/\ܒp V\J50/P/0Wŭs[@! Ta q$@HUph Z*0KBc1_PK\AOFL:R,@p6*jvbҖ`gCL &\A / ĝM@wKH+0RڂFpPpnԝxW@T+[OB(8 v8@E!V\eW  Kjd!A @p^ NN>gB eg@ ~pT@ u鼶%`~ e٭vf\  [~brƭ%IG|ԩ   [;lA-vKL{vkGava- X -IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/green_dot.png 777 0 0 276 10167221002 21246 0PNG  IHDR mfgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTErwtRNS0J0IDATxb`dd          0qJIENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/openned_mail.png 777 0 0 1725 10146727774 22002 0PNG  IHDR W)gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTETm\tRNS0JMIDATxb`@ ` "Fbd@ 0 3B  =3N%IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/pixel.png 777 0 0 1623 10146727763 20464 0PNG  IHDR(4gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE0tRNS@f IDATxb`0OmYIENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/sn.png 777 0 0 1364 10166563673 17765 0PNG  IHDRE/gAMA7tEXtSoftwareAdobe ImageReadyqe<3PLTErw{ƀ̍͑љ٪ʈݳբ?@tRNS%b*IDATxbʉ$@H ` d9^Nf,@%Yp.Re\(.R.@  ȕ \I. (@@I6+V230,]03 01pIN>&.Fbb`Y%ebzE X8@^de䂚2 ^ q= t?t 3@%*xb| '$h6vf<'0 xb4' @>#&^6201@@`9_V0 D >.`q 3! v@$&r:Pe@$;(x8X9 @ If`<@I#Y| @ ;!,@/3řX!O:$ah9a4ċ Th82r2AX<`a&&nv`Y0}q_2IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/img/unopenned_mail.png 777 0 0 1674 10146730003 22323 0PNG  IHDR ERgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTETm\tRNS0J4IDATxb`"F`` s,P@IENDB`aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/logo.inc.tpl.php 777 0 0 2101 10170737257 21064 0 aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/mag_item.tpl.php 777 0 0 26331 10170665003 21156 0

     










    $i): ?>






    $i): ?>



    $r): ?>



    img/pixel.png width="1" height="20">



      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/mag_list.tpl.php 777 0 0 12562 10170665400 21175 0

      $i): ?>






    $i): ?>






    $i): ?>



    $i): ?>






    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/mag_menu.inc.tpl.php 777 0 0 4606 10170665375 21731 0


    "; } else { echo "" . $lang['menu_latest'] . "
    "; } if ($page_name_short == "mag_list" && isset($blogs)) { echo $lang['menu_blog'] . "
    "; } else { echo "" . $lang['menu_blog'] . "
    "; } if ($page_name_short == "mag_list" && isset($library_items)) { echo $lang['menu_library'] . "
    "; } else { echo "" . $lang['menu_library'] . "
    "; } if ($page_name_short == "mag_list" && isset($subjects)) { echo $lang['menu_forum_subject'] . "
    "; } else { echo "" . $lang['menu_forum_subject'] . "
    "; } if ($page_name_short == "mag_list" && isset($polls)) { echo $lang['menu_polls'] . "
    "; } else { echo "" . $lang['menu_polls'] . "
    "; } ?>
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/mag_overview.tpl.php 777 0 0 26127 10170665373 22103 0







      $i): if (isset($cms_blogs[$key]['cms_sticky']) && $cms_blogs[$key]['cms_sticky'] = 1) { ?> $i): if (!isset($cms_blogs[$key]['cms_sticky']) || $cms_blogs[$key]['cms_sticky'] != 1) { ?>



     /  : 0) { echo $lang['arr_genre'][$i['genre_id']];}?>







    $i): if (isset($cms_subjects[$key]['cms_sticky']) && $cms_subjects[$key]['cms_sticky'] = 1) { ?> $i): if (!isset($cms_subjects[$key]['cms_sticky']) || $cms_subjects[$key]['cms_sticky'] != 1) { ?>



     /  : 0) { echo $lang['arr_genre'][$i['genre_id']];}?>






      $i): ?>




    $i): if (isset($cms_library_items[$key]['cms_sticky']) && $cms_library_items[$key]['cms_sticky'] = 1) { ?> $i): if (!isset($cms_library_items[$key]['cms_sticky']) || $cms_library_items[$key]['cms_sticky'] != 1) { ?>



     /  : 0) { echo $lang['arr_genre'][$i['genre_id']];}?>






    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/msg_compose.tpl.php 777 0 0 25123 10170665370 21714 0

     










      






      






     


    $i) : ?>

    100) { $percentage_used = 100; } ?>






     ()










    0) {?>


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/msg_item.tpl.php 777 0 0 21512 10170665365 21207 0








       

     


    :
    :



     


    <?php echo $message['image']['file_title'];?>


    100) { $percentage_used = 100; } ?>






     ()










    0) {?>


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/msg_list.tpl.php 777 0 0 22400 10170665363 21217 0




      



       

     


    $i): ?>
     
    "; } else if ($i['message_status'] == $message_status_unread) { echo " 
    "; } ?>







    100) { $percentage_used = 100; } ?>








     ()








    0) {?>


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/msg_menu.inc.tpl.php 777 0 0 4161 10170665357 21747 0


    "; } else { echo "" . $lang['href_in_box'] . "
    "; } if (isset($message_box) && $message_box == 'out_box' && $page_name_short == "msg_list") { echo $lang['href_out_box'] . "
    "; } else { echo "" . $lang['href_out_box'] . "
    "; } if (isset($message_box) && $message_box == 'save_box' && $page_name_short == "msg_list") { echo $lang['href_save_box'] . "
    "; } else { echo "" . $lang['href_save_box'] . "
    "; } ?>
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_blog.tpl.php 777 0 0 43572 10170665354 21043 0






     


    1) { ?>


















    $i): if (isset($blog['degree_id']) && $key == $blog['degree_id']) { $selected=" checked=\"checked\""; } ?>
    />


    />


    /> 




     no image
    $i): $selected = ""; if (isset($blog['file_id']) && $blog['file_id'] == $i['file_id']) { $selected = "checked"; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    .
    $f): ?> .
    />


       0) { ?>





      






    $i): ?>







    $i): ?>




    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_bookmarks.tpl.php 777 0 0 33335 10170665351 22101 0

      $i): ?>









    $i): ?>

    <?php echo $i['image']['file_title'];?>




    $i): ?>

    <?php echo $i['image']['file_title'];?>





    $i): ?>

    :





    $i): ?>



     

     






    $i): ?>






    $i): ?>






    $i): ?>

    <?php echo $i['image']['file_title'];?>





    $i): ?>

    :





    $i): ?>



     

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_files.tpl.php 777 0 0 20737 10170665346 21221 0

     












    :





    ()







     







    .
    kb



    : kb
    : kb
    100) { $percentage_used = 100; } $percentage_unused = 100 - $percentage_used; ?>
    img/pixel.png width="1" height="7" alt="" />
    img/pixel.png width="1" height="7" alt="" />

    $storage['allocation_used']) { ?>

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_library.tpl.php 777 0 0 15556 10170665343 21563 0








      $i): ?>






    $i): ?>














    $i): ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_library_edit.tpl.php 777 0 0 30631 10170665340 22554 0







     

















    $i): if (isset($library['degree_id']) && $key == $library['degree_id']) { $selected=" checked=\"checked\""; } ?>
    />


    />


    /> 




     no image
    $i): $selected = ""; if (isset($library['file_id']) && $library['file_id'] == $i['file_id']) { $selected = "checked"; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    .
    $f): ?> .
    />


      




      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_membership.tpl.php 777 0 0 27422 10170665335 22246 0





     








    /> />








      1) { ?> 1) { ?>


    *


    $i): //find out if the language is selected unset($selected); foreach($user['language_ids'] as $key2 => $r): if ($key1 == $r) { $selected = "checked"; } endforeach; ?> /> 




    $i): $selected=""; if ($user['user_homepage'] == $i) { $selected = "checked=\"checked\""; } ?> /> 

















    $i): echo $lang['arr_lang_name'][$i] . "
    "; endforeach; ?>
















    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_menu.inc.tpl.php 777 0 0 7251 10170665332 21602 0




















    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_overview.tpl.php 777 0 0 24636 10170665327 21766 0

      $i): ?>








    $i): ?>







    $i): ?>










    :


    :


    :


    :

     



    <?php echo $profile['image']['file_title'];?>





    $i): ?>






    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_profile.tpl.php 777 0 0 44206 10170665324 21550 0







     









     















    />

    />









     no image
    $i): $selected = ""; if (isset($profile['file_id']) && $profile['file_id'] == $i['file_id']) { $selected = "checked"; } ?> "; $r=0; } endforeach; if ($r != $images_per_row) { $r = $images_per_row-$r; print ""; } ?>

    />





    <?php echo $profile['image']['file_title'];?>


























    $i): ?>




    <?php echo $i['image']['file_title'];?>


    />



    $i): ?>







    $i): ?>







       "; }} ?>

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_publishing.tpl.php 777 0 0 16614 10170665317 22260 0

      $i): ?>







    $i): ?>








    $i): ?>







      $i): ?>









    $i): ?>



    :


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/my_shoutbox.tpl.php 777 0 0 11633 10170665315 21761 0

      $i): ?>







      user_acs->checkPermission($resource_ids['shoutbox'], $privilege_ids['add_item'])) { //resourece_id, Priv_id ?>










    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_abuse_reports.tpl.php 777 0 0 14373 10170665312 23264 0





     

















    ', $string ); echo $string; ?>

    $i): ?>


     










    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_acs.tpl.php 777 0 0 10636 10170665307 21157 0

     



    $role): ?> $res): ?> $priv): ?> $perm): $checked = ""; if ($perm == 1) { $checked = "checked"; } ?>





    ]" value="1" />

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_admin.tpl.php 777 0 0 3175 10170665303 21455 0

     


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_cms.tpl.php 777 0 0 50531 10170665301 21163 0





      $i): foreach($cms_subjects as $key1 => $r): if ($i['subject_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_library_items as $key1 => $r): if ($i['library_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_activities as $key1 => $r): if ($i['activity_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_tasks as $key1 => $r): if ($i['task_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_blogs as $key1 => $r): if ($i['blog_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_files as $key1 => $r): if ($i['file_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?> $i): foreach($cms_polls as $key1 => $r): if ($i['poll_id'] == $r['item_id']) { $temp = $r; break; } endforeach; ?>













     
     
          




    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          




    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          





    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          





    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />


     
     
          




    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          



    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />



     
     
          



    />
    $r): $selected = ""; if (isset($temp['status_id']) && $temp['status_id'] == $key_r) { $selected = " checked=\"checked\""; } ?> />


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_group.tpl.php 777 0 0 25525 10170665276 21555 0







     






    $group['group_election_date']) { echo "" . $group['display_group_election_date'] . ""; } else { echo $group['display_group_election_date']; } ?>







     















    kb










    kb






    $i): ?>


     











     

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_menu.inc.tpl.php 777 0 0 4775 10170665274 22117 0


    "; } else { echo "" . $lang['menu_group_list'] . "
    "; } if ($page_name_short == 'node_user') { echo $lang['menu_user_list'] . "
    "; } else { echo "" . $lang['menu_user_list'] . "
    "; } if ($page_name_short == 'node_newsletter') { echo $lang['menu_newsletter'] . "
    "; } else { echo "" . $lang['menu_newsletter'] . "
    "; } if ($page_name_short == 'node_acs') { echo $lang['menu_acs'] . "
    "; } else { echo "" . $lang['menu_acs'] . "
    "; } if ($page_name_short == 'node_cms') { echo $lang['menu_cms'] . "
    "; } else { echo "" . $lang['menu_cms'] . "
    "; } if ($page_name_short == 'node_abuse_reports') { echo $lang['menu_abuse_reports'] . "
    "; } else { echo "" . $lang['menu_abuse_reports'] . "
    "; } ?>
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_newsletter.tpl.php 777 0 0 10204 10170665271 22574 0

     


    :










    $i): ?> /> 



    (total: )
    (total: )
    (total: )
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_register_user.tpl.php 777 0 0 25255 10170665265 23301 0

     
















    $i): echo $i . "
    "; endforeach; ?>







      
    1) { ?>




     *

     *

     *




    $i): ?>  


     *

     *

    *


      
     








    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_structure.tpl.php 777 0 0 7351 10170665257 22435 0











     







     







    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/node_user.tpl.php 777 0 0 24147 10170665254 21372 0








     
























    kb



    <?php echo $profile['image']['file_title'];?>
















    kb





    $i): ?>


     







     

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/poll.inc.tpl.php 777 0 0 4165 10170665251 21100 0




    %
     
    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/poll_detail.inc.tpl.php 777 0 0 6160 10170665245 22422 0
    $p): ?>



    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/report_abuse.tpl.php 777 0 0 5064 10170665242 22053 0
    " class="txt_sub_menu">

     









    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_blocked.tpl.php 777 0 0 4453 10170665237 21471 0

      $i): ?>







    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_blog.tpl.php 777 0 0 26224 10170665235 21027 0






      $i): ?>








    $i): ?>










    $i): ?>





    img/pixel.png width="1" height="20">



      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_friends.tpl.php 777 0 0 7641 10170665232 21515 0

      $i): ?>




    , , , " . $lang['arr_user_online_status'][1] . "
    "; } else { echo $lang['arr_user_online_status'][$i['online_status']] . "
    "; } ?>
      
    <?php echo $i['image']['file_title'];?>


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_invite.tpl.php 777 0 0 10434 10170665227 21377 0

     




     


    :






    $i): ?>



    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_library.tpl.php 777 0 0 31625 10170665225 21550 0










     


    $i): ?>







    $i): ?>












    $i): ?>





    img/pixel.png width="1" height="20">



      



      


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_menu.inc.tpl.php 777 0 0 11543 10170665221 21611 0


























    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_network.tpl.php 777 0 0 14312 10170665215 21566 0

     



    $i): ?>


    0) { $sub_total = $i['sn_total']; } echo $sub_total; $total = $total+$sub_total; ?>


    0) { $sub_total = $outstanding_invites; } echo $sub_total; $total = $total+$sub_total; ?>



    $i): ?>




    , , , " . $lang['arr_user_online_status'][1] . "
    "; } else { echo $lang['arr_user_online_status'][$i['online_status']] . "
    "; } ?>
      
    <?php echo $i['image']['file_title'];?>


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_profile.tpl.php 777 0 0 21510 10170665212 21530 0











     




    $r): ?>


    $i): ?> $key1+1) { echo ""; } ?>
    "; } else { foreach($relationship_profiles as $keyrp => $rp): if ($i == $rp['user_id']) { if (count($r['relation']) > $key1+1) { echo "" . $rp['profile_nic'] . "
    "; } else { echo $rp['profile_nic'] . "
    "; } break; } endforeach; } ?>
    ->













     



    <?php echo $profile['image']['file_title'];?>

    " . $lang['arr_user_online_status'][1] . "
    "; } else { echo $lang['arr_user_online_status'][$profile['online_status']] . "
    "; } ?>





    $i): ?>





    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_publishing.tpl.php 777 0 0 16053 10170665207 22246 0

      $i): ?>







    $i): ?>








    $i): ?>


     






      $i): ?>








    $i): ?>


    :


    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_recommended.tpl.php 777 0 0 13316 10170665204 22360 0

      $i): ?>






      $i): ?>








    $i): ?>









    $i): ?>


    :




    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/sn_statistics.tpl.php 777 0 0 7444 10170665201 22252 0

      $i): ?>






     



    :


    :


    :


    :

    aroundme_0_4_0/www/aroundme_0_4_0/template/am_default/welcome.tpl.php 777 0 0 10030 10170665176 21027 0















     











    aroundme_0_4_0/www/aroundme_0_4_0/vote.php 777 0 0 4201 10170662727 13621 0Connect($c_node['db']['host'], $c_node['db']['user'] , $c_node['db']['pass'] , $c_node['db']['db']); $db->prefix = $c_node['db']['prefix']; require_once($c_node['dir']['class_path'] . 'Date.class.php'); $date = new Date(); session_start(); if (isset($_POST['option_id'])) { //setup data $option_id = $_POST['option_id']; $user_id = $_SESSION['s_user_id']; //setup poll require_once($c_node['dir']['class_path'] . 'Poll.class.php'); $poll = new Poll($db, null, $date); $poll->poll_id = $_POST['poll_id']; $poll->user_id = $user_id; $current_answer = $poll->pollUserCurrentVote(); if (isset($current_answer) && $current_answer != $option_id) { $poll->updateAnswer($option_id); } } header("Location: " . $_POST['return_url']."&".SID); exit; ?>aroundme_0_4_0/www/aroundme_0_4_0/welcome.php 777 0 0 2446 10170662722 14303 0set('user', $output_user); } $template_pageLink = $lang['txt_welcome'] . " " . $output_user['user_firstname'] . "!"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/config/ 777 0 0 0 10152641433 10614 5aroundme_0_4_0/www/config/config.inc.php 777 0 0 2330 10170662354 13430 0 aroundme_0_4_0/www/inc/ 777 0 0 0 10163751044 10122 5aroundme_0_4_0/www/inc/footer.inc.php 777 0 0 3355 10170700655 12772 0set('lang', $lang); $tpl->set('lang', $lang); //error reporting if (isset($GLOBALS['am_error_log'])) { if (isset($c_node['node']['debug_mode'])) { $tpl->set('error_handling', $c_node['node']['debug_mode']); } $tpl->set('log', $GLOBALS['am_error_log']); } $body->set('pagename', $page_name[0]); $tpl->set('current_filename', $current_filename); $body->set('language_id', $language_id); $tpl->set('language_id', $language_id); $body->set('aroundme_dir', $c_node['dir']['aroundme']); if ($c_node['node']['allow_registration'] == 1) { $body->set('allow_registration', 1); } $template_file = $page_name[0] . ".tpl.php"; $tpl->set('content', $body->fetch($template_file)); echo $tpl->fetch('default.tpl.php'); ?> aroundme_0_4_0/www/inc/header.inc.php 777 0 0 6101 10170662563 12721 0set('templatePath', $templatePath); $body = & new Template($templatePath); // This is the inner template $body->set('templatePath', $templatePath); //SETUP LANGUAGE session_start(); if(isset($_REQUEST['language_id'])) { $language_id = $_REQUEST['language_id']; $_SESSION['s_language_id'] = $language_id; } elseif (isset($_SESSION['s_language_id']) && $_SESSION['s_language_id'] > 0){ $language_id = $_SESSION['s_language_id']; } else { $language_id = $c_node['node']['language_default']; $_SESSION['s_language_id'] = $language_id; } //include error handling files from aroundme $languagePath = $c_node['dir']['aroundme'] . "language/" . $language_id . "/" . $c_node['node']['template_default_name']; $languageArrayPath = $languagePath . "/arrays/"; $languageTextPath = $languagePath . "/texts/"; require_once($languageArrayPath . 'arr_language_name.lang.php'); require_once($languageArrayPath . 'arr_error.lang.php'); //SETUP FILE AND PAGE VARS $current_filename = basename($_SERVER['PHP_SELF']); $page_name = explode(".",$current_filename); //RETRIEVE LANGUAGE FILE AND PASS TO TEMPLATE $languagePath = "language/" . $language_id . "/"; require_once($languagePath . $page_name[0] . '.lang.php'); //database setup and connect require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'Adodb/adodb.inc.php'); $ADODB_CACHE_DIR = 'cache/Adodb'; $ADODB_FETCH_MODE = ADODB_FETCH_BOTH; $db = NewADOConnection('mysql'); $db->Connect($c_node['db']['host'], $c_node['db']['user'] , $c_node['db']['pass'] , $c_node['db']['db']); $db->prefix = $c_node['db']['prefix']; //Date require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'Date.class.php'); $date = new Date(); ?> aroundme_0_4_0/www/index.php 777 0 0 5553 10170662327 11267 0status_ids = $c_node['user']['status']; //if the session is timed out we destroy it if(isset($_SESSION['s_user_id'])) { session_unset(); session_destroy(); session_start(); $_SESSION['s_language_id'] = $language_id; } //form actions if (isset($_POST['login'])) { if (isset($_POST['email']) && $_POST['email'] && isset($_POST['password']) && $_POST['password']) { $user->relation_type = $c_node['user']['relation_type']['approved']; $user->aroundme_dir = $c_node['dir']['aroundme']; require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, 1, null); $user->statistic = $statistic; $user->total_login_stat_id = $c_node['statistic']['user']['total_logins']; $user->checkLogin($_REQUEST['email'],$_REQUEST['password']); if (empty($GLOBALS['am_error_log'])) { //setup social network require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'SocialNetwork.class.php'); $sn = new SocialNetwork(null, $db, $c_node['node']['node_id'], $c_node['sn']['max_degree']); $sn->relation_type_ids = $c_node['user']['relation_type']; $sn->status_ids = $c_node['user']['status']; $user->sn = $sn; $user->loginUser($_REQUEST['email'],$_REQUEST['password'], $c_node['node']['node_id']); } } else { $GLOBALS['am_error_log'][] = array(20, null, null); } } elseif (isset($_REQUEST['registration_complete'])) { $display = "registration_complete"; } //TEMPLATE $body->set('language_available', $c_node['node']['language_available']); if (isset($error)) { $tpl->set('error', $error); } if (isset($display)) { $body->set('display', $display); } $pagename = "index"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/info.php 777 0 0 2301 10170662321 11071 0 aroundme_0_4_0/www/js/ 777 0 0 0 10152641250 7760 5aroundme_0_4_0/www/js/functions.js 777 0 0 2411 10170662546 12422 0// ----------------------------------------------------------------------- // This file is part of aroundme // // Copyright (C) 2003, 2005 Barnraiser // http://www.barnraiser.org/ // info@barnraiser.org // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) any // later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with program; see the file COPYING. If not, write to the Free // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // ----------------------------------------------------------------------- var myWindow; function popup(page, scrollbar) { if(myWindow && !myWindow.closed) { myWindow.close(); } myFile = page; myWindow = window.open(myFile,"me","toolbar=no,width=335,height=400,resizable,scrollbars=" + scrollbar + ", status=no, left=10, top=10"); myWindow.focus(); } aroundme_0_4_0/www/language/ 777 0 0 0 10170663043 11133 5aroundme_0_4_0/www/language/1/ 777 0 0 0 10163743360 11276 5aroundme_0_4_0/www/language/1/common.lang.php 777 0 0 3443 10170662512 14303 0 aroundme_0_4_0/www/language/1/index.lang.php 777 0 0 3256 10170662506 14127 0"; $lang['txt_email'] = "your email address"; $lang['txt_password'] = "your password"; $lang['txt_new_password'] = "If you have forgotten your password you can get a new password here."; ?> aroundme_0_4_0/www/language/1/info.lang.php 777 0 0 5265 10170662503 13752 0

    As part of their mission they maintain 'aroundme', the software platform that this community is build upon.

    Visit Barnraiser at www.barnraiser.org to find out more about their work.

    "; $lang['txt_contact'] = "place your organisations contact details here."; $lang['txt_administration'] = "place information about the administrators here. Include a description of contact procedures."; $lang['txt_structure'] = "describe the structure, goals and mission of your organisation. Divulge any information regarding policy, decision making procedure and structure that may affect the members rights."; $lang['txt_notes'] = "place any notes or tips you wish to make to your membership."; ?> aroundme_0_4_0/www/language/1/new_password.lang.php 777 0 0 4261 10170662477 15537 0

    "; $lang['txt_pass_sent'] = "We have emailed you a new password. When you get the email you can use the password to login."; $lang['txt_email_subject_new_pass'] = "Your new password"; $lang['txt_change_password'] = "After you log in you can edit your profile and change your password to something more memorable to you."; ?> aroundme_0_4_0/www/language/1/register.lang.php 777 0 0 7201 10170662473 14641 0

    Your place of residence is the city, town or village you live now.

    We record your gender, date of birth and place of residence for summary statistics for the community only. This information is not revealed to any member of the community.

    Remember to put your correct date of birth. If you ever forget your password we will ask you for this before we give you a new one.

    "; $lang['txt_invited_personal'] = "Join my friends in this community!"; $lang['txt_male'] = "male"; $lang['txt_nickname'] = "nickname"; $lang['txt_reg_legal'] = "I agree to observe the laws of my country within this site and the rules stipulated in our 'rules & information' section. For countries that are not open or do not support human rights and democracy, I agree that this site has the right to impose site rules as defined by Swedish law."; $lang['txt_surname'] = "surname"; $lang['txt_welcome'] = "Demo Join text. Simply fill in the form to the right and come on in!"; $lang['txt_index_intro_post_reg'] = "Thank you for completing registration with us."; $lang['txt_instructions2'] = "Check your email! You will receive an email from us with a link in it. Press the link to complete registration.
    "; $lang['txt_lang_selection'] = "languages I can read"; $lang['txt_preview'] = "check your information and if correct press 'register'"; $lang['txt_default_profile_name'] = "default"; $lang['txt_default_profile_hometown'] = "stockholm"; ?> aroundme_0_4_0/www/language/1/setup.lang.php 777 0 0 6376 10170662467 14174 0 true social networking and team building software."; $lang['txt_invite_to_help'] = "Type in your friends email addresses. You can either put one of each line or use a comma (,) between them like 'support@aroundme.org, info@aroundme.org'. Please don't send more that 20 emails at a time."; $lang['txt_default_library_title'] = "welcome"; $lang['txt_default_library_synopsis'] = "default library item"; $lang['txt_default_library_page_name'] = "MyFirstPage"; //must be WIKI formatted LikeThisExample $lang['txt_invite'] = "You have been invited into Barnraiser!"; $lang['txt_invite_message_txt'] = "Join me in aroundme!"; $lang['txt_intro'] = "Welcome to aroundme where you can join groups and activities with your friends....just need a little setting up first. You just need to do 3 things:"; $lang['txt_access_code'] = "enter your access code"; $lang['txt_access_code_help'] = "You were sent an email with an access code. Enter the code here."; $lang['txt_create_password'] = "create your password"; $lang['txt_create_password_help'] = "Use a password that no one will guess. It has to be at least 5 characters long and with no spaces. Remember that it will be case sensetive, so 'Barnraiser' is not the same as 'barnraiser'."; $lang['txt_password1'] = "Type in a password."; $lang['txt_password2'] = "Repeat your password."; $lang['txt_add_friends'] = "add your friends"; $lang['txt_add_friends_help'] = "Type in the email addresses of up to 20 of your friends."; $lang['txt_hi'] = "Hi"; //a greeting, Hi Tom, $lang['txt_already_setup'] = "You've already set up with us. Click the link below."; $lang['txt_default_library_body'] = "I've not started my scrapbook yet."; $lang['txt_finish'] = "your done"; $lang['txt_finish_help'] = "Now your done. Press 'finished' and you will enter 'aroundme'."; ?> aroundme_0_4_0/www/new_password.php 777 0 0 7142 10170662313 12662 0prefix . "_user u where u.user_email='" . $_POST['email'] . "' and u.user_dob='" . $dob . "'" ; $result = $db->Execute($query); if (isset($result->fields['user_id'])) { $temp = $result->fields; //update the password and send email $password = $user->createPassword(); $user->savePassword($password, $temp['user_email']); //get file to send $body_file = $languageTextPath . "send_new_password.txt.php"; $handle = fopen($body_file, "rb"); $body_file_txt = ""; do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } $body_file_txt .= $data; } while (true); fclose($handle); $body_file_txt = str_replace("\\\"", "\"", $body_file_txt); $body_file_txt = str_replace("FIRSTNAME", $temp['user_firstname'], $body_file_txt); $body_file_txt = str_replace("PASSWORD", $password, $body_file_txt); $url = "http://" . $_SERVER['HTTP_HOST']; if (dirname ($_SERVER['PHP_SELF']) != "/") { $url .= dirname ($_SERVER['PHP_SELF']); $url .= "/"; } $body_file_txt = str_replace("URL", $url, $body_file_txt); //setup mail require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . '/Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['no_reply_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->Subject = $lang['txt_email_subject_new_pass']; $mail->AddAddress($temp['user_email'], $temp['user_firstname']); $mail->Body = $body_file_txt; if(!$mail->Send()) { $GLOBALS['am_error_log'][] = array(23, 1, $mail->ErrorInfo); } } else { $GLOBALS['am_error_log'][] = array(22, null, null); } $display = "sent_pass"; if (!empty($GLOBALS['am_error_log'])) { $display = "lost_pass"; } } //TEMPLATE $body->set('language_available', $c_node['node']['language_available']); if (isset($display)) { $body->set('display', $display); } $body->set('datedropdown', $date->dateDropdown()); $pagename = "new password"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/register.php 777 0 0 13023 10170662307 12011 0aroundme_dir = $c_node['dir']['aroundme']; $user->language_dir = $c_node['node']['template_default_name']; if (isset($_POST['data'])) { $data = $_POST['data']; } //form actions if (isset($_POST['preview'])) { $display = "preview"; } elseif (isset($_POST['edit_again'])) { } elseif (isset($_POST['register'])) { // Checks the email and the password if (isset($_POST['language_ids'])) { $data['language_ids'] = $_POST['language_ids']; } $user->checkRegister($data); if (empty($GLOBALS['am_error_log'])) { //setup email require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . '/Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['no_reply_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->Subject = $lang['subject_welcome_br']; $mail->language = "en"; $user->mail = $mail; if (isset($data['invitee_id'])) { $user->invitee_id = $data['invitee_id']; } $user->user_image_allocation = $c_node['file']['default_max_user_space']; $user->template_id = $c_node['node']['template_default_id']; $data['user_dob'] = $_REQUEST['year']."-".$_REQUEST['month']."-".$_REQUEST['day']; $user->txt_default_profile_name = $lang['txt_default_profile_name']; $user->txt_default_profile_hometown = $lang['txt_default_profile_hometown']; $user->status_id = $c_node['user']['status']['pending']; $user->template_id = $c_node['node']['template_default_id']; $user->page_default = $c_node['node']['page_default']; $user->max_degree = $c_node['sn']['max_degree']; $user->registerUser($data); //check if we need to add invitee into social network if (isset($data) && !empty($data['invitee_id'])) { require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'SocialNetwork.class.php'); $sn = new SocialNetwork($user->user_id, $db, $c_node['node']['node_id'], $c_node['sn']['max_degree']); $relation = $sn->insertRelation($data['invitee_id'], $c_node['user']['relation_type']['approved']); } $display = "registration_complete"; } } //if someone has invited someone here if ((isset($_REQUEST['invitee']) && $_REQUEST['invitee'] > 0) || isset($data['invitee_id'])) { if (isset($_REQUEST['invitee'])) { $invitee = $_REQUEST['invitee']; } else { $invitee = $data['invitee_id']; } if ($invitee > 0) { $_SESSION['s_user_id'] = "x"; $user->user_id = $invitee; $output_invite = $user->getProfile(); require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'File.class.php'); $file = new File($db, null, $c_node['file'], $c_node['dir']); $file->path = "user"; $file->noimage = $c_node['file']['image']['thumb'][1]['noimage']; $file->thumb = $c_node['file']['image']['thumb'][1]['name']; if (isset($output_invite['file_id'])) { $file->file_id = $output_invite['file_id']; $output_invite['image'] = $file->getFileRecord(); } else { $output_invite['image']['file_title'] = ""; $output_invite['image']['file'] = $file->noimage; } } } //TEMPLATE if (isset($c_node['node']['language_available'])) { $body->set('language_available', $c_node['node']['language_available']); } if (isset($c_node['node']['language_default'])) { $body->set('language_default', $c_node['node']['language_default']); } if (isset($output_invite)) { $body->set('invite', $output_invite); } if (isset($display)) { $body->set('display', $display); } if (isset($data)) { $body->set('data', $data); $user_dob = $_REQUEST['year']."-".$_REQUEST['month']."-".$_REQUEST['day']; $body->set('datedropdown', $date->dateDropdown($user_dob)); $body->set('display_dob', $user_dob); $body->set('year', $_REQUEST['year']); $body->set('month', $_REQUEST['month']); $body->set('day', $_REQUEST['day']); } else { $data = array("language_id" => $language_id); if (isset($_REQUEST['email'])) { $data['user_email'] = $_REQUEST['email']; } $body->set('data', $data); $body->set('datedropdown', $date->dateDropdown()); } $pagename = "register"; include "inc/footer.inc.php"; ?> aroundme_0_4_0/www/robots.txt 777 0 0 30 10115257411 11432 0User-agent: * Disallow: aroundme_0_4_0/www/setup.php 777 0 0 15542 10170675643 11344 0aroundme_dir = $c_node['dir']['aroundme']; $user->node_id = $c_node['node']['node_id']; //form processing if (isset($_POST['setup'])) { $data = $_POST['data']; $user->user_id = $data['user_id']; $output_user = $user->getUser(); //check the access code $query = " SELECT user_id FROM " . $db->prefix . "_user WHERE user_id=" . $data['user_id'] . " AND user_password=MD5('" . $data['access_code'] . "')" ; $result = $db->Execute($query); if(!isset($result->fields['user_id']) || $result->fields['user_id'] < 0) { $GLOBALS['am_error_log'][] = array(27, null, null);//access code wrong } if(isset($data['user_password1']) && isset($data['user_password2']) && $data['user_password1'] != $data['user_password2']) { $GLOBALS['am_error_log'][] = array(15, null, null); } if(isset($data['user_password1']) && strlen($data['user_password1']) < 5) { $GLOBALS['am_error_log'][] = array(16, null, null); } if (!empty($data['to'])) { //check for emails $emails = trim($data['to']); $emails = preg_split("/[\s,]+/", $emails); //check each email foreach($emails as $key => $i): if(!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,8}$/', $i)) { $GLOBALS['am_error_log'][] = array(3, null, $i); //email invalid } endforeach; } if (empty($GLOBALS['am_error_log'])) { require_once($languageTextPath . 'message.lang.php'); //setup social network require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'SocialNetwork.class.php'); $sn = new SocialNetwork($user->user_id, $db, $c_node['node']['node_id'], $c_node['sn']['max_degree']); $sn->relation_type_ids = $c_node['user']['relation_type']; $sn->status_ids = $c_node['user']['status']; $user->sn = $sn; //setup statistics require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'Statistic.class.php'); $statistic = new Statistic($db, 1, null); $user->statistic = $statistic; $user->total_login_stat_id = $c_node['statistic']['user']['total_logins']; //setup instant messaging require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . 'IM.class.php'); $im = new IM($output_user['user_id'], $db, $c_node['messaging']['message_box_max_size']); $im->setStatus($c_node['messaging']['message_status_unread'], $c_node['messaging']['message_status_read']); $im->setBoxes($c_node['messaging']['message_in_box'], $c_node['messaging']['message_save_box'], $c_node['messaging']['message_out_box']); $user->im = $im; $user->body_welcome_txt = readTxtFile($languageTextPath . "im_welcome.txt.php"); $user->body_invitee_txt = readTxtFile($languageTextPath . "im_invitee_joined.txt.php"); $user->user_firstname = $output_user['user_firstname']; $user->user_email = $output_user['user_email']; $user->user_language_id = $output_user['language_id']; $user->subject_im_welcome = $lang['subject_im_welcome']; $user->relation_type = $c_node['user']['relation_type']; $user->subject_im_joined = $lang['subject_im_joined']; $user->status_id = $c_node['user']['status']['active']; $user->txt_invite = $lang['txt_invite']; $user->setupUser($_POST['data']); //send the invites if (!empty($data['to'])) { //setup email require_once($c_node['dir']['aroundme'] . $c_node['dir']['class_path'] . '/Mail/class.phpmailer.php'); $mail = new PHPMailer(); $mail->Host = $c_node['mail']['host']; $mail->Mailer = $c_node['mail']['mailer']; $mail->From = $c_node['mail']['no_reply_address']; $mail->FromName = $c_node['mail']['from_name']; $mail->WordWrap = $c_node['mail']['wordwrap']; $mail->Subject = $lang['txt_invite_message_txt']; $mail->AddReplyTo($c_node['mail']['no_reply_address'], $lang['subject_noreply']); $user->mail = $mail; $user->body_file_mail_txt = readTxtFile($languageTextPath . "mail_invite.txt.php"); $user->body_file_im_txt = readTxtFile($languageTextPath . "im_invite.txt.php"); $user->subject_im_friendship_invite = $lang['subject_im_friendship_invite']; $user->userSetupInvites($data); } } else { //return vars to form $output_data = $data; $display = "setup"; } if (empty($GLOBALS['am_error_log'])) { $user->relation_type = $c_node['user']['relation_type']['approved']; $user->total_login_stat_id = $c_node['statistic']['user']['total_logins']; $user->loginUser($output_user['user_email'],$data['user_password1'], $c_node['node']['node_id']); } } elseif (isset($_REQUEST['em'])) { //get user $user->user_email = $_REQUEST['em']; $output_user = $user->getUser(); if ($output_user['status_id'] == $c_node['user']['status']['pending']) { //we can set up $display = "setup"; } else{ //you have already setup. $display = "setup_already"; } } else { //we error becuase we did not get the right vars passed to the page header("Location: index.php"); exit; } //TEMPLATE if ($c_node['node']['allow_setup_invites'] == 1) { $body->set('allow_setup_invites', 1); } if (isset($output_user)) { $body->set('user', $output_user); } if (isset($display)) { $body->set('display', $display); } if (isset($output_data)) { $body->set('formdata', $output_data); } //MOVE VARS TO TEMPLATE $body->set('lang', $lang); //error reporting if (isset($GLOBALS['am_error_log'])) { if (isset($c_node['node']['debug_mode'])) { $body->set('error_handling', $c_node['node']['debug_mode']); } $body->set('log', $GLOBALS['am_error_log']); } echo $body->fetch("setup.tpl.php"); $db->Close(); ?> aroundme_0_4_0/www/template/ 777 0 0 0 10163743562 11172 5aroundme_0_4_0/www/template/aroundme.css 777 0 0 10336 10170662432 13616 0 /* # ----------------------------------------------------------------------- # This file is part of aroundme # # Copyright (C) 2003, 2005 Barnraiser # http://www.barnraiser.org/ # info@barnraiser.org # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) any # later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with program; see the file COPYING. If not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # ----------------------------------------------------------------------- */ body { margin-top: 20px; margin-right: 20px; margin-bottom: 20px; margin-left: 20px; font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; color: #333333 } .txt_main_menu { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 16pt; font-weight: bold; color: #333333; text-decoration: none } .txt_main_menu:hover, .txt_main_menu_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 16pt; font-weight: bold; color: #79C36D; text-decoration: none } .txt_sub_menu { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: normal; color: #333333; text-decoration: none } .txt_sub_menu:hover, .txt_sub_menu_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: normal; color: #79C36D } .txt_title { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: normal; color: #8F8F8F } hr { background-color: #BDBDBD; height: 1pt; margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; } .txt_light { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: normal; color: #8F8F8F; text-decoration: none } a { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; color: #333333; text-decoration: underline } a:hover, .txt_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; color: #79C36D; text-decoration: underline } .txt_on { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; color: #79C36D; text-decoration: none } .formInput { background-color: #FFFFFF; border-color: #BDBDBD #BDBDBD #BDBDBD #BDBDBD; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 10pt; color: #333333 } .txt_breadcrumb { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: normal; color: #8F8F8F; text-decoration: none } .txt_breadcrumb:hover { font-family: Trebuchet MS, Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: normal; color: #79C36D; text-decoration: none } .picture { border-color: #333333 #333333 #333333 #333333; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; } .txt_footer { font-family: Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: normal; color: #666666; text-decoration: none } .txt_footer_link { font-family: Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: normal; color: #666666; text-decoration: underline } .txt_footer_link:hover { font-family: Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: normal; color: #79C36D; text-decoration: underline } .code { font-family: Courier New, Helvetica, sans-serif; font-size: 10pt; color: #666666; background-color: #eeeeee; } .txt_error { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; color: #AA0000; } aroundme_0_4_0/www/template/default.tpl.php 777 0 0 7051 10170662424 14206 0 \n";?> <?php echo "aroundme: " . $lang['node_num'] . " / " . $lang['node_name'];?>
      / 
    1) { $end_num = 1; foreach($lang['arr_lang_name'] as $key => $i): ?>

    $i): if (isset($i[0])) { unset($error); if (isset($error_handling) && $error_handling>0 && isset($i[1])) { $error = $lang['arr_error'][$i[0]] . ": " . $i[2] . "
    "; } elseif (empty($i[1])) { $error = $lang['arr_error'][$i[0]] . "
    "; } } if (isset($error)) { ?>

    aroundme_0_4_0/www/template/img/ 777 0 0 0 10152641247 11741 5aroundme_0_4_0/www/template/img/aroundme.png 777 0 0 6075 10146661657 14366 0PNG  IHDRwMDgAMA7tEXtSoftwareAdobe ImageReadyqe<NPLTErwfff̙{ƀݧ٪̈ʈ԰ݳ~tuw⹺v5tRNS" OIDATxb h; h; h; h; h; h; h; h; h; h; bfj @Tt 0ST9;Z€d0@QɁ :&u@+5ÏIYXB!a6eD @3HPd(3H硼 *03#H  @pcFAfDfxbN dB60:5@1P9 P J><u Z}Žp/p~\ 8 Lv!P#Q @@>XmՁA#."ÁX.M.-rJE"݁XZ.Pxcd `sDnbSJ cb`gaBkAjIBㄥZVRkg"сebf&FRIj@$:˱b3Ji4P',PUr!eq@@!lP YaY&idBd>&&g)$#Dn @$9:ػuH$$rj ̬(7+<`D9`1΀Z [DȄ: )vIu RBÎH2Has/I s 6" HuӁ$uTz!ʇQ@ ύ4ȉ^ bR5  ȃ0LZ:B!<(" K>XVspɃT3^ID} KqDɂP ,x.4DZUǃHv|B,Hm0vTrPk$UD6nA Atpf ۃv> ,q q`vH Ht "3rO Z\#`ؔYMj"O pLL8y2) RȌ6XɉK ̬8u&}DzǝgF]S4l$@Q<#.s3#L"k m=X=Sx!"sMR:NCMDt{p ȱ s *B Bƫ,2#Eoǎ 'o r  r=u#@x5@1EXG NJ`UR,MLt&R3!J${n v L2!Ǝ/ $Q9vȉ@N@d; 5LH5jמ r | 'R_ 3UY@QAN;ٳDTR,"V Hs"dD^]Ā6ZVsB9ɲ s; %& <Vzpbw aYDfv2' u %;ZTS0 D}_.Ĉއ"0](NQd%2x%YPCDٲ. r$2 !$xX(Za@k<0W@&A.> -A h; h; h; h; h; h; $ ݁s(((#p"75p Y PU7DFn^a+ @ ㆋ1p BAś<>Td72B+Έ D;BK M33!8F .m@?@`fB}@^H*%f pg1 `gf DPa-m`GeEp8jAC\h@܈&u 3E@0Fr ؅P;Au b(.n("Cm .. aJA4Zc u t)@ 2hc-ABq: :3yI`Z'1LL*ARԾ joCP;!@ $e`D@*`+kFZ3PYHo7)t6XHv842@"Ф4$13dd"ށUL!ځZ$gL v ,gf8@D;P ԋe"5CT/P#́D|2س*KYbԩ &9i w u>[ܰCh܋ȂXZ ~9 HŬhi`ά1BuUNM!-;9d,vX@.LK c'iMfty1C"Łg fQ111&;&DJ,bN1vC" !3P &DV!فDJt_|uҖd4(ubx[r0)ۦ# ,\A"%pWkzFCp\X(O"94R @4&0:UPTJ 3d@"!Ep-g,K,ປԙ "ӄfq1V%\DNuYłIs @T`5a сDZ= @2L$*YģIƉ E.~peg@ԖbH!(L"bb$DYY}JcK7le%!9@6x o2身Yh6DJVNTяk$A{Vr:XL@b~GyPxYa٧{HM%-.!h1at&/hB{ОO"Ł58zO'1*B HI&<|pPx@"Łn20@"9a BZ HŬmhe1bG$a$}&)1 U Hb"ɁS,fdYGH^I`z7b&@"ɁbX"" Hq`3G@I}|~`j!ׁ)SHs"@XN3==[ƄuYH@"́Jŀ 4k$"۪5D'v^!p. \ B2 {x+OxE3Xj(#VNUDڭL132RfX18pȔ3gjX=|U!\Vn`t{ +X[ A@A@A@A@A@A@@VVdA@hP;PJQ zNiDrssi1DYa$(@b@n[Za-^}-܌n)͉R*d32rc-+)  y1}P.@1lA8n}!@'Bj(=͕!`%X5Kl4 A eA4\U( Ls36@fd:507# *Sԩ0ca4#;4$+ J32J] ć z[C; f$Pa=2e  r۶cGE1wpE!aK @g bNH$رEI܌`-\Pcraƀ@1Le# x[@ҌL5ՔKNhv2d̩厀. fv EnF'Vt ,:!ư+! H.`Kۆ9Ͳ~0'=(`4MS<h0!0A \## V x(U I/( tb4 ʼn<#…&ܠm bj< 2 B0oX7+ H#'( *!IЬ9ʚ` 0VA-jPt+$ #vT~Enx*U!Hq.Ȣx\cdi:,:Y=cД 00+0Neuv8 n2$#qskB:`8)!eq@N 0F+VE٪Nc##+FEVC` -S8 b @h8k0 g웊Ł|@=u #4 E҄b I=Z:5\B<ā2@'4 4q 0U!;5 [ XNA]}"%tC%+,ƀ `p^NDbV`Xk E1w0ڒ o8@vW\5%@AȎ@>x:`ruN&"Nn#ȉ$ #(>Wc. @  ![ X,yj7'F0zC9$,XQV77Xb@ mP sb@M`,0v$n` 1C@,$4`psQ@g!ۘq28@A wd춬2-S9R"U+( H`Nb3z&k$ԁQ!z5B Vnj`$k+3ڇ;hX *0L ,u 0|!"ހ$(@DNmh &ZŞќlrׂR!0 Z`3c! A pqZ:T͝|VBT@ÍATZS@ ^YIlSefC_ܐI0ѧ RKp=$ o'n^ 0})PLJ 7RD*e-< : vVXPk[!Ham s_Dꚃb1Tl1چz 2.YBP1 ]"Vh鏭 T# p-'Il%zȕX NI-z[P p&! @&+61\-M|X:sX#~ ҇>J , [`*@#/`mIENDB`aroundme_0_4_0/www/template/img/donate.png 777 0 0 3453 10146661746 14022 0PNG  IHDRI,egAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEM*a`bPh;㺷5ׇؘPҕ>@E郀NC tRNS\\IDATxb   pM IL"$$+)/@ bLrYnyb 9v&yb$vn&qyI, @f >K$2 &`P%]NZMJJGHa@MefVfI`sf JA$B6 ;$&Rp 3 f9xA&I3"7Mj@M␓fcgg؁L!'. d$B2IOO[@@&4XH: =6IP$vfV>^V^n>1avI 4Dq r@(&I 1˰00 $. Q.nqn~nIn^Fn.QnQIj + 4  7$^.~qIF.^&nF.66Q^n~FIb0MI10w"\\\ "\|b b0$>p8',*Lݢ50$$y!..%...( qBIr,r ž Q'NlT@)(<

    IDdܡwD@P)ܢ@A^\ؔpr,7(E@RDVT h&Yq ,<@Z”`s\ 0O12IENDB`aroundme_0_4_0/www/template/img/favicon.ico 777 0 0 2247 10131714366 14152 0JFIFddDuckydAdobed     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?{',/IM8bq՛)35Vap>SCU_djVƕ(̢1y](}j # DUΑ6:7mii*VEt2")'G(SP鿫;qm̖&fDUmꪍŅfq閫dsX֠XD8ܵmD,J{ojnvPҠk!jRbVSHՉeII)A;4k) E:6r]#ъ ^ T4˞}^ 4Tx1P0U/*1t8JTۼcm&MOAXe"mڋ(mA'06]$|KhɥuD 5!Y. *KDT9qh ڸ d1dsQٕ/쭑.7k/Q@HHc)F ]ծ%#:hEDE@C^a]xs$q t|OKe8QhP5uaroundme_0_4_0/www/template/img/pixel.png 777 0 0 1623 10146661765 13667 0PNG  IHDR(4gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE0tRNS@f IDATxb`0OmYIENDB`aroundme_0_4_0/www/template/index.tpl.php 777 0 0 5502 10170662420 13664 0
     


     










    aroundme_0_4_0/www/template/info.tpl.php 777 0 0 7605 10170662414 13521 0
     











     















    aroundme_0_4_0/www/template/menu.inc.php 777 0 0 5117 10170662411 13475 0


    "; } else { echo "" . $lang['menu_home'] . "
    "; } if (isset($allow_registration) && $allow_registration == 1) { if ($pagename == "register") { echo $lang['menu_register'] . "
    "; } else { echo "" . $lang['menu_register'] . "
    "; } } if ($pagename == "barnraiser") { echo $lang['menu_barnraiser'] . "
    "; } else { echo "" . $lang['menu_barnraiser'] . "
    "; } if ($pagename == "info") { echo $lang['menu_info'] . "
    "; } else { echo "" . $lang['menu_info'] . "
    "; } ?>


    aroundme
    aroundme_0_4_0/www/template/new_password.tpl.php 777 0 0 6441 10170662406 15277 0
     





     











    aroundme_0_4_0/www/template/register.tpl.php 777 0 0 26767 10170662402 14441 0
     



     




















    $i): echo $i . "
    "; endforeach; ?>







      
    1) { ?>




     *

     *

     *




    $i): ?>  


     *

     *

    *


      
     








    aroundme_0_4_0/www/template/setup.tpl.php 777 0 0 15724 10170662377 13757 0 \n";?> <?php echo "barnraiser: " . $lang['node_num'] . " / " . $lang['node_name'];?> $i): if (isset($i[0])) { unset($error); if (isset($error_handling) && $error_handling>0 && isset($i[1])) { $error = $lang['arr_error'][$i[0]] . ": " . $i[2] . "
    "; } elseif (empty($i[1])) { $error = $lang['arr_error'][$i[0]] . "
    "; } } if (isset($error)) { ?>

    aroundme

    barnraiser
     
















     









    ,