[Evolvis-commits] r405: Initial revision↵

mirabilos at evolvis.org mirabilos at evolvis.org
Thu Feb 25 14:21:31 CET 2010


Author: mirabilos
Date: 2010-02-25 13:21:30 +0000 (Thu, 25 Feb 2010)
New Revision: 405

Added:
   trunk/gforge_base/evolvisforge/gforge/TARBALL
   trunk/gforge_base/evolvisforge/gforge/common/
   trunk/gforge_base/evolvisforge/gforge/common/include/
   trunk/gforge_base/evolvisforge/gforge/common/include/Error.class
   trunk/gforge_base/evolvisforge/gforge/common/include/Foundry.class
   trunk/gforge_base/evolvisforge/gforge/common/include/Group.class
   trunk/gforge_base/evolvisforge/gforge/common/include/Permission.class
   trunk/gforge_base/evolvisforge/gforge/common/include/Project.class
   trunk/gforge_base/evolvisforge/gforge/common/include/User.class
   trunk/gforge_base/evolvisforge/gforge/common/include/account.php
   trunk/gforge_base/evolvisforge/gforge/common/include/database.php
   trunk/gforge_base/evolvisforge/gforge/common/include/jpcache.php
   trunk/gforge_base/evolvisforge/gforge/common/include/ldap.php
   trunk/gforge_base/evolvisforge/gforge/common/include/session.php
   trunk/gforge_base/evolvisforge/gforge/common/include/timezones.php
   trunk/gforge_base/evolvisforge/gforge/common/include/utils.php
   trunk/gforge_base/evolvisforge/gforge/common/include/vars.php
   trunk/gforge_base/evolvisforge/gforge/common/pm/
   trunk/gforge_base/evolvisforge/gforge/common/pm/pm_data.php
   trunk/gforge_base/evolvisforge/gforge/common/tracker/
   trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifact.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCanned.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCategory.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactFile.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactGroup.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactResolution.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactType.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactTypes.class
   trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifacts.class
   trunk/gforge_base/evolvisforge/gforge/cronjobs/check_stale_tracker_items.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/db_foundry_boxes.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/db_project_sums.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/db_stats_agg.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/kt_dump.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/massmail.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/project_weekly_metric-backfill.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects-backfill.php
   trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects.inc
   trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_site.inc
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/README
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-conversion.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-convert-files.php
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-fkeys.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-man.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001209.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001214.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001220.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010109.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010112.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010126.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010206.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010301.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010304.NOTE
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010305.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010313.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010317.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010409.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010412.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010507.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010509.sql
   trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010511.sql
   trunk/gforge_base/evolvisforge/gforge/db/dbusers.sql
   trunk/gforge_base/evolvisforge/gforge/db/languages.tab
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/DefaultValues.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/Languages.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/SourceForge.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/database-oci8.php
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/trove_defaults.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5_oci8.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_auto.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_er.sql
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/database.php
   trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/pgdb-convert.pl
   trunk/gforge_base/evolvisforge/gforge/db/replicate.sh
   trunk/gforge_base/evolvisforge/gforge/db/replication-master.sql
   trunk/gforge_base/evolvisforge/gforge/db/replication-reset-master.sql
   trunk/gforge_base/evolvisforge/gforge/db/replication-reset-slave.sql
   trunk/gforge_base/evolvisforge/gforge/db/replication-slave.sql
   trunk/gforge_base/evolvisforge/gforge/db/replication.plan
   trunk/gforge_base/evolvisforge/gforge/db/sfdocs.sql
   trunk/gforge_base/evolvisforge/gforge/db/trove_cat.tab
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/coding_standards.html
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/sf2.sda
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.sda
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/templating.php
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first0.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first1.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.htm
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.jpg
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.htm
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.jpg
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.htm
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.jpg
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/index.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last0.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last1.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next0.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next1.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev0.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev1.gif
   trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/standards.htm
   trunk/gforge_base/evolvisforge/gforge/docs/background/
   trunk/gforge_base/evolvisforge/gforge/docs/background/charter.html
   trunk/gforge_base/evolvisforge/gforge/docs/background/org_chart.html
   trunk/gforge_base/evolvisforge/gforge/docs/background/whos_who.html
   trunk/gforge_base/evolvisforge/gforge/docs/doc_utils.php
   trunk/gforge_base/evolvisforge/gforge/docs/index.php
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/change_control.html
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/community.html
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/development_process.html
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/ps_engineers.html
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/requirements.html
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/review.html
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/source_branching.sda
   trunk/gforge_base/evolvisforge/gforge/docs/project_management/source_control.html
   trunk/gforge_base/evolvisforge/gforge/docs/templates/
   trunk/gforge_base/evolvisforge/gforge/docs/templates/generic_document.html
   trunk/gforge_base/evolvisforge/gforge/docs/templates/project_index.html
   trunk/gforge_base/evolvisforge/gforge/pager.php3
   trunk/gforge_base/evolvisforge/gforge/utils/download/README
   trunk/gforge_base/evolvisforge/gforge/utils/groupCreator
   trunk/gforge_base/evolvisforge/gforge/utils/ldap-check-replica
   trunk/gforge_base/evolvisforge/gforge/www/account/unsubscribe.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/admin_table.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/database.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_filetype.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_processor.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/edit_supported_languages.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/intelapprove.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/massmail-old.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/resetapc.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/unsubscribe.php
   trunk/gforge_base/evolvisforge/gforge/www/admin/vhost.php
   trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_featuredprojects.php
   trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_mostactive.php
   trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_topdownloads.php
   trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdn_search.php
   trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdnnews.php
   trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.php
   trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.xsd
   trunk/gforge_base/evolvisforge/gforge/www/help/tracker.php
   trunk/gforge_base/evolvisforge/gforge/www/images/favicon.ico
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/c.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/i.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/l.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/m.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/n.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/p.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/t.gif
   trunk/gforge_base/evolvisforge/gforge/www/images/phorum/trans.gif
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Base.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Bulgarian.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Catalan.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Chinese.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Dutch.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/English.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Esperanto.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/French.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/German.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Greek.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Hebrew.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Indonesian.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Italian.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Japanese.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Korean.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Norwegian.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Polish.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Portuguese.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/PortugueseBrazillian.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Russian.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/SimplifiedChinese.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Spanish.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Swedish.tab
   trunk/gforge_base/evolvisforge/gforge/www/include/languages/Thai.tab
   trunk/gforge_base/evolvisforge/gforge/www/kernel_traffic.php
   trunk/gforge_base/evolvisforge/gforge/www/my/intelagreement.php
   trunk/gforge_base/evolvisforge/gforge/www/news/admin/news_admin_utils.php
   trunk/gforge_base/evolvisforge/gforge/www/project/admin/database.php
   trunk/gforge_base/evolvisforge/gforge/www/project/admin/rmuser.php
   trunk/gforge_base/evolvisforge/gforge/www/project/admin/userpermedit.php
   trunk/gforge_base/evolvisforge/gforge/www/project/admin/vhost.php
   trunk/gforge_base/evolvisforge/gforge/www/register/projectinfo.php
   trunk/gforge_base/evolvisforge/gforge/www/stats/lastlogins.php
   trunk/gforge_base/evolvisforge/gforge/www/testsecurity.php
   trunk/gforge_base/evolvisforge/gforge/www/themes/ultralite/
   trunk/gforge_base/evolvisforge/gforge/www/themes/ultralite/Theme.class
   trunk/gforge_base/evolvisforge/gforge/www/top/topusers.php
   trunk/gforge_base/evolvisforge/gforge/www/tos/privacy_generic.php
   trunk/gforge_base/evolvisforge/gforge/www/tos/tos_generic.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/
   trunk/gforge_base/evolvisforge/gforge/www/tracker/add.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/admin/
   trunk/gforge_base/evolvisforge/gforge/www/tracker/admin/index.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/browse.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/detail.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/download.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/include/
   trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactFileHtml.class
   trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactHtml.class
   trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactTypeHtml.class
   trunk/gforge_base/evolvisforge/gforge/www/tracker/index.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/mod.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/reporting/
   trunk/gforge_base/evolvisforge/gforge/www/tracker/reporting/index.php
   trunk/gforge_base/evolvisforge/gforge/www/tracker/tracker-er-diagram.sda
Modified:
   trunk/gforge_base/evolvisforge/
Log:
Initial revision



Property changes on: trunk/gforge_base/evolvisforge
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2001-11-01 19:04:02.000000000 +0000
committer: lo-lan-do

   + timestamp: 2001-11-01 19:19:12.000000000 +0000
committer: lo-lan-do

Name: bzr:file-ids
   - gforge/debian/changelog	7 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdebian%2Fchangelog

   + gforge/TARBALL	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2FTARBALL
gforge/common	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon
gforge/common/include	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude
gforge/common/include/Error.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2FError.class
gforge/common/include/Foundry.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2FFoundry.class
gforge/common/include/Group.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2FGroup.class
gforge/common/include/Permission.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2FPermission.class
gforge/common/include/Project.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2FProject.class
gforge/common/include/User.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2FUser.class
gforge/common/include/account.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Faccount.php
gforge/common/include/database.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Fdatabase.php
gforge/common/include/jpcache.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Fjpcache.php
gforge/common/include/ldap.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Fldap.php
gforge/common/include/session.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Fsession.php
gforge/common/include/timezones.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Ftimezones.php
gforge/common/include/utils.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Futils.php
gforge/common/include/vars.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Finclude%2Fvars.php
gforge/common/pm	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Fpm
gforge/common/pm/pm_data.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Fpm%2Fpm_data.php
gforge/common/tracker	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker
gforge/common/tracker/Artifact.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifact.class
gforge/common/tracker/ArtifactCanned.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactCanned.class
gforge/common/tracker/ArtifactCategory.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactCategory.class
gforge/common/tracker/ArtifactFile.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactFile.class
gforge/common/tracker/ArtifactGroup.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactGroup.class
gforge/common/tracker/ArtifactResolution.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactResolution.class
gforge/common/tracker/ArtifactType.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactType.class
gforge/common/tracker/ArtifactTypes.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifactTypes.class
gforge/common/tracker/Artifacts.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcommon%2Ftracker%2FArtifacts.class
gforge/cronjobs/check_stale_tracker_items.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fcheck_stale_tracker_items.php
gforge/cronjobs/db_foundry_boxes.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fdb_foundry_boxes.php
gforge/cronjobs/db_project_sums.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fdb_project_sums.php
gforge/cronjobs/db_stats_agg.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fdb_stats_agg.php
gforge/cronjobs/kt_dump.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fkt_dump.php
gforge/cronjobs/massmail.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fmassmail.php
gforge/cronjobs/project_weekly_metric-backfill.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fproject_weekly_metric-backfill.php
gforge/cronjobs/stats_projects-backfill.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fstats_projects-backfill.php
gforge/cronjobs/stats_projects.inc	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fstats_projects.inc
gforge/cronjobs/stats_site.inc	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fcronjobs%2Fstats_site.inc
gforge/db/SQL_migrate-2.5-to-2.6	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6
gforge/db/SQL_migrate-2.5-to-2.6/README	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2FREADME
gforge/db/SQL_migrate-2.5-to-2.6/artifact-conversion.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fartifact-conversion.sql
gforge/db/SQL_migrate-2.5-to-2.6/artifact-convert-files.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fartifact-convert-files.php
gforge/db/SQL_migrate-2.5-to-2.6/artifact-fkeys.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fartifact-fkeys.sql
gforge/db/SQL_migrate-2.5-to-2.6/artifact-man.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fartifact-man.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001209.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20001209.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001214.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20001214.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001220.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20001220.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010109.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010109.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010112.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010112.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010126.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010126.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010206.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010206.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010301.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010301.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010304.NOTE	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010304.NOTE
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010305.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010305.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010313.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010313.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010317.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010317.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010409.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010409.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010412.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010412.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010507.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010507.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010509.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010509.sql
gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010511.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2FSQL_migrate-2.5-to-2.6%2Fsqlchanges20010511.sql
gforge/db/dbusers.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Fdbusers.sql
gforge/db/languages.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Flanguages.tab
gforge/db/oci8port	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port
gforge/db/oci8port/pssonline	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fpssonline
gforge/db/oci8port/pssonline/DefaultValues.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fpssonline%2FDefaultValues.sql
gforge/db/oci8port/pssonline/Languages.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fpssonline%2FLanguages.sql
gforge/db/oci8port/pssonline/SourceForge.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fpssonline%2FSourceForge.sql
gforge/db/oci8port/pssonline/database-oci8.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fpssonline%2Fdatabase-oci8.php
gforge/db/oci8port/pssonline/trove_defaults.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fpssonline%2Ftrove_defaults.sql
gforge/db/oci8port/shaguo	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fshaguo
gforge/db/oci8port/shaguo/SourceForge2.5_oci8.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fshaguo%2FSourceForge2.5_oci8.sql
gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_auto.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fshaguo%2FSourceForge2.5oci8-Trigger_auto.sql
gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_er.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fshaguo%2FSourceForge2.5oci8-Trigger_er.sql
gforge/db/oci8port/shaguo/database.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fshaguo%2Fdatabase.php
gforge/db/oci8port/shaguo/pgdb-convert.pl	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Foci8port%2Fshaguo%2Fpgdb-convert.pl
gforge/db/replicate.sh	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Freplicate.sh
gforge/db/replication-master.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Freplication-master.sql
gforge/db/replication-reset-master.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Freplication-reset-master.sql
gforge/db/replication-reset-slave.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Freplication-reset-slave.sql
gforge/db/replication-slave.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Freplication-slave.sql
gforge/db/replication.plan	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Freplication.plan
gforge/db/sfdocs.sql	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Fsfdocs.sql
gforge/db/trove_cat.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdb%2Ftrove_cat.tab
gforge/docs/architecture	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture
gforge/docs/architecture/coding_standards.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Fcoding_standards.html
gforge/docs/architecture/sf2.sda	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Fsf2.sda
gforge/docs/architecture/stats	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Fstats
gforge/docs/architecture/stats/stats-process.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Fstats%2Fstats-process.gif
gforge/docs/architecture/stats/stats-process.sda	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Fstats%2Fstats-process.sda
gforge/docs/architecture/templating.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftemplating.php
gforge/docs/architecture/tour	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour
gforge/docs/architecture/tour/first0.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Ffirst0.gif
gforge/docs/architecture/tour/first1.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Ffirst1.gif
gforge/docs/architecture/tour/img0.htm	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fimg0.htm
gforge/docs/architecture/tour/img0.jpg	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fimg0.jpg
gforge/docs/architecture/tour/img1.htm	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fimg1.htm
gforge/docs/architecture/tour/img1.jpg	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fimg1.jpg
gforge/docs/architecture/tour/img2.htm	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fimg2.htm
gforge/docs/architecture/tour/img2.jpg	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fimg2.jpg
gforge/docs/architecture/tour/index.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Findex.gif
gforge/docs/architecture/tour/last0.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Flast0.gif
gforge/docs/architecture/tour/last1.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Flast1.gif
gforge/docs/architecture/tour/next0.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fnext0.gif
gforge/docs/architecture/tour/next1.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fnext1.gif
gforge/docs/architecture/tour/prev0.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fprev0.gif
gforge/docs/architecture/tour/prev1.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fprev1.gif
gforge/docs/architecture/tour/standards.htm	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Farchitecture%2Ftour%2Fstandards.htm
gforge/docs/background	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fbackground
gforge/docs/background/charter.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fbackground%2Fcharter.html
gforge/docs/background/org_chart.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fbackground%2Forg_chart.html
gforge/docs/background/whos_who.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fbackground%2Fwhos_who.html
gforge/docs/doc_utils.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fdoc_utils.php
gforge/docs/index.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Findex.php
gforge/docs/project_management	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management
gforge/docs/project_management/change_control.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Fchange_control.html
gforge/docs/project_management/community.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Fcommunity.html
gforge/docs/project_management/development_process.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Fdevelopment_process.html
gforge/docs/project_management/ps_engineers.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Fps_engineers.html
gforge/docs/project_management/requirements.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Frequirements.html
gforge/docs/project_management/review.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Freview.html
gforge/docs/project_management/source_branching.sda	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Fsource_branching.sda
gforge/docs/project_management/source_control.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Fproject_management%2Fsource_control.html
gforge/docs/templates	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Ftemplates
gforge/docs/templates/generic_document.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Ftemplates%2Fgeneric_document.html
gforge/docs/templates/project_index.html	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fdocs%2Ftemplates%2Fproject_index.html
gforge/pager.php3	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fpager.php3
gforge/utils/download/README	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Futils%2Fdownload%2FREADME
gforge/utils/groupCreator	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Futils%2FgroupCreator
gforge/utils/ldap-check-replica	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Futils%2Fldap-check-replica
gforge/www/account/unsubscribe.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Faccount%2Funsubscribe.php
gforge/www/admin/admin_table.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fadmin_table.php
gforge/www/admin/database.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fdatabase.php
gforge/www/admin/edit_frs_filetype.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fedit_frs_filetype.php
gforge/www/admin/edit_frs_processor.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fedit_frs_processor.php
gforge/www/admin/edit_supported_languages.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fedit_supported_languages.php
gforge/www/admin/intelapprove.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fintelapprove.php
gforge/www/admin/massmail-old.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fmassmail-old.php
gforge/www/admin/resetapc.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fresetapc.php
gforge/www/admin/unsubscribe.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Funsubscribe.php
gforge/www/admin/vhost.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fadmin%2Fvhost.php
gforge/www/export/rss_foundry_featuredprojects.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Frss_foundry_featuredprojects.php
gforge/www/export/rss_foundry_mostactive.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Frss_foundry_mostactive.php
gforge/www/export/rss_foundry_topdownloads.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Frss_foundry_topdownloads.php
gforge/www/export/rss_osdn_search.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Frss_osdn_search.php
gforge/www/export/rss_osdnnews.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Frss_osdnnews.php
gforge/www/export/sf_tracker_export.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Fsf_tracker_export.php
gforge/www/export/sf_tracker_export.xsd	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fexport%2Fsf_tracker_export.xsd
gforge/www/help/tracker.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fhelp%2Ftracker.php
gforge/www/images/favicon.ico	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Ffavicon.ico
gforge/www/images/phorum	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum
gforge/www/images/phorum/c.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Fc.gif
gforge/www/images/phorum/i.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Fi.gif
gforge/www/images/phorum/l.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Fl.gif
gforge/www/images/phorum/m.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Fm.gif
gforge/www/images/phorum/n.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Fn.gif
gforge/www/images/phorum/p.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Fp.gif
gforge/www/images/phorum/t.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Ft.gif
gforge/www/images/phorum/trans.gif	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fimages%2Fphorum%2Ftrans.gif
gforge/www/include/languages/Base.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FBase.tab
gforge/www/include/languages/Bulgarian.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FBulgarian.tab
gforge/www/include/languages/Catalan.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FCatalan.tab
gforge/www/include/languages/Chinese.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FChinese.tab
gforge/www/include/languages/Dutch.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FDutch.tab
gforge/www/include/languages/English.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FEnglish.tab
gforge/www/include/languages/Esperanto.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FEsperanto.tab
gforge/www/include/languages/French.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FFrench.tab
gforge/www/include/languages/German.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FGerman.tab
gforge/www/include/languages/Greek.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FGreek.tab
gforge/www/include/languages/Hebrew.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FHebrew.tab
gforge/www/include/languages/Indonesian.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FIndonesian.tab
gforge/www/include/languages/Italian.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FItalian.tab
gforge/www/include/languages/Japanese.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FJapanese.tab
gforge/www/include/languages/Korean.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FKorean.tab
gforge/www/include/languages/Norwegian.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FNorwegian.tab
gforge/www/include/languages/Polish.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FPolish.tab
gforge/www/include/languages/Portuguese.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FPortuguese.tab
gforge/www/include/languages/PortugueseBrazillian.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FPortugueseBrazillian.tab
gforge/www/include/languages/Russian.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FRussian.tab
gforge/www/include/languages/SimplifiedChinese.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FSimplifiedChinese.tab
gforge/www/include/languages/Spanish.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FSpanish.tab
gforge/www/include/languages/Swedish.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FSwedish.tab
gforge/www/include/languages/Thai.tab	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Finclude%2Flanguages%2FThai.tab
gforge/www/kernel_traffic.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fkernel_traffic.php
gforge/www/my/intelagreement.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fmy%2Fintelagreement.php
gforge/www/news/admin/news_admin_utils.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fnews%2Fadmin%2Fnews_admin_utils.php
gforge/www/project/admin/database.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fproject%2Fadmin%2Fdatabase.php
gforge/www/project/admin/rmuser.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fproject%2Fadmin%2Frmuser.php
gforge/www/project/admin/userpermedit.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fproject%2Fadmin%2Fuserpermedit.php
gforge/www/project/admin/vhost.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fproject%2Fadmin%2Fvhost.php
gforge/www/register/projectinfo.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fregister%2Fprojectinfo.php
gforge/www/stats/lastlogins.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fstats%2Flastlogins.php
gforge/www/testsecurity.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftestsecurity.php
gforge/www/themes/ultralite	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fthemes%2Fultralite
gforge/www/themes/ultralite/Theme.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Fthemes%2Fultralite%2FTheme.class
gforge/www/top/topusers.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftop%2Ftopusers.php
gforge/www/tos/privacy_generic.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftos%2Fprivacy_generic.php
gforge/www/tos/tos_generic.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftos%2Ftos_generic.php
gforge/www/tracker	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker
gforge/www/tracker/add.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fadd.php
gforge/www/tracker/admin	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fadmin
gforge/www/tracker/admin/index.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fadmin%2Findex.php
gforge/www/tracker/browse.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fbrowse.php
gforge/www/tracker/detail.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fdetail.php
gforge/www/tracker/download.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fdownload.php
gforge/www/tracker/include	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Finclude
gforge/www/tracker/include/ArtifactFileHtml.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Finclude%2FArtifactFileHtml.class
gforge/www/tracker/include/ArtifactHtml.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Finclude%2FArtifactHtml.class
gforge/www/tracker/include/ArtifactTypeHtml.class	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Finclude%2FArtifactTypeHtml.class
gforge/www/tracker/index.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Findex.php
gforge/www/tracker/mod.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Fmod.php
gforge/www/tracker/reporting	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Freporting
gforge/www/tracker/reporting/index.php	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Freporting%2Findex.php
gforge/www/tracker/tracker-er-diagram.sda	180 at 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk%2Fgforge%2Fwww%2Ftracker%2Ftracker-er-diagram.sda

Name: bzr:revision-id:v4
   - 1 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:1
2 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:2
3 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:7
4 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:9
5 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:10
6 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:11
7 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:12
8 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:13
9 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:14
10 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:15
11 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:16
12 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:17
13 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:18
14 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:19
15 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:20
16 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:21
17 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:22
18 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:23
19 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:24
20 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:25
21 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:26
22 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:27
23 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:28
24 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:29
25 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:30
26 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:31
27 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:32
28 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:33
29 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:34
30 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:35
31 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:36
32 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:37
33 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:38
34 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:39
35 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:40
36 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:41
37 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:42
38 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:43
39 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:44
40 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:45
41 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:46
42 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:47
43 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:48
44 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:49
45 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:50
46 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:51
47 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:52
48 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:53
49 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:54
50 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:55
51 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:56
52 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:57
53 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:58
54 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:59
55 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:60
56 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:61
57 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:62
58 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:63
59 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:64
60 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:65
61 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:66
62 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:67
63 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:68
64 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:69
65 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:70
66 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:71
67 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:72
68 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:73
69 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:74
70 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:75
71 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:76
72 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:77
73 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:78
74 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:79
75 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:80
76 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:81
77 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:82
78 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:83
79 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:84
80 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:85
81 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:86
82 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:87
83 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:88
84 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:89
85 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:90
86 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:91
87 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:92
88 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:93
89 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:94
90 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:95
91 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:96
92 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:97
93 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:98
94 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:99
95 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:100
96 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:101
97 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:102
98 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:103
99 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:104
100 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:105
101 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:106
102 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:107
103 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:108
104 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:109
105 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:110
106 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:111
107 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:112
108 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:113
109 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:114
110 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:115
111 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:116
112 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:117
113 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:118
114 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:119
115 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:120
116 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:121
117 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:122
118 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:123
119 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:124
120 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:125
121 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:126
122 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:127
123 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:128
124 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:129
125 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:130
126 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:131
127 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:132
128 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:133
129 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:134
130 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:135
131 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:136
132 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:137
133 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:138
134 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:139
135 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:140
136 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:141
137 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:142
138 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:143
139 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:144
140 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:145
141 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:146
142 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:147
143 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:148
144 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:149
145 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:150
146 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:151
147 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:152
148 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:153
149 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:154
150 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:155
151 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:156
152 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:157
153 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:158
154 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:159
155 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:160
156 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:161
157 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:162
158 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:163
159 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:164
160 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:165
161 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:166
162 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:167
163 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:168
164 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:169
165 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:170
166 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:172
167 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:173
168 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:174
169 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:175
170 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:176

   + 1 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:1
2 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:2
3 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:7
4 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:9
5 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:10
6 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:11
7 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:12
8 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:13
9 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:14
10 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:15
11 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:16
12 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:17
13 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:18
14 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:19
15 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:20
16 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:21
17 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:22
18 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:23
19 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:24
20 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:25
21 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:26
22 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:27
23 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:28
24 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:29
25 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:30
26 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:31
27 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:32
28 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:33
29 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:34
30 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:35
31 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:36
32 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:37
33 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:38
34 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:39
35 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:40
36 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:41
37 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:42
38 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:43
39 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:44
40 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:45
41 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:46
42 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:47
43 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:48
44 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:49
45 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:50
46 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:51
47 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:52
48 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:53
49 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:54
50 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:55
51 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:56
52 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:57
53 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:58
54 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:59
55 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:60
56 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:61
57 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:62
58 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:63
59 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:64
60 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:65
61 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:66
62 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:67
63 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:68
64 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:69
65 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:70
66 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:71
67 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:72
68 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:73
69 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:74
70 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:75
71 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:76
72 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:77
73 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:78
74 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:79
75 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:80
76 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:81
77 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:82
78 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:83
79 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:84
80 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:85
81 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:86
82 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:87
83 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:88
84 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:89
85 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:90
86 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:91
87 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:92
88 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:93
89 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:94
90 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:95
91 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:96
92 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:97
93 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:98
94 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:99
95 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:100
96 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:101
97 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:102
98 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:103
99 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:104
100 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:105
101 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:106
102 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:107
103 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:108
104 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:109
105 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:110
106 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:111
107 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:112
108 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:113
109 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:114
110 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:115
111 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:116
112 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:117
113 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:118
114 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:119
115 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:120
116 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:121
117 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:122
118 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:123
119 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:124
120 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:125
121 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:126
122 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:127
123 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:128
124 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:129
125 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:130
126 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:131
127 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:132
128 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:133
129 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:134
130 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:135
131 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:136
132 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:137
133 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:138
134 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:139
135 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:140
136 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:141
137 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:142
138 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:143
139 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:144
140 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:145
141 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:146
142 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:147
143 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:148
144 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:149
145 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:150
146 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:151
147 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:152
148 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:153
149 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:154
150 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:155
151 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:156
152 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:157
153 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:158
154 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:159
155 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:160
156 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:161
157 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:162
158 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:163
159 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:164
160 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:165
161 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:166
162 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:167
163 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:168
164 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:169
165 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:170
166 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:172
167 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:173
168 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:174
169 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:175
170 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:176
171 svn-v4:9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:trunk:180


Added: trunk/gforge_base/evolvisforge/gforge/TARBALL
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/TARBALL	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/TARBALL	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,196 @@
+#!/usr/bin/perl
+#
+# SourceForge: Breaking Down the Barriers to Open Source Development
+# Copyright 1999-2001 (c) VA Linux Systems
+# http://sourceforge.net
+#
+# $Id: TARBALL,v 1.14 2001/07/09 21:54:14 pfalcon Exp $
+#
+
+use strict;
+
+my $CVS_TAG;
+tarball_init();
+
+# ------------------------------------------------------------------------------
+# 1. TARBALL
+# ------------------------------------------------------------------------------
+# 
+# This document describes and executes the steps to create a SourceForge tarball
+# release from CVS.  This file should be up to date in CVS for each
+# release but should not be included in the actual tarball.
+# 
+# ------------------------------------------------------------------------------
+# 2. RELEASE VERSION
+# ------------------------------------------------------------------------------
+# 
+#
+# RELEASE_VERSION=2.6.1pre4
+# 
+# The above string should be updated with each tarball release to be in
+# the form "MAJOR.MINOR.REVISION".
+# 
+# ------------------------------------------------------------------------------
+# 3. PROCESS
+# ------------------------------------------------------------------------------
+# 
+# 0. tag CVS at SF_<VERSION>pre<N> where VERSION is listed above (2. RELEASE
+#    VERSION) and (with dots replaced with underscores) N is an increasing
+#    integer starting at 1.
+
+system('cvs -Q tag SF_' . $CVS_TAG);
+
+# 1. create a scratch directory 
+
+system("rm -rf /tmp/scratch");
+system('mkdir /tmp/scratch');
+chdir('/tmp/scratch');
+
+# 2. check out CVS into this directory 
+
+system('cvs -z9 -Q export -rHEAD alexandria');
+
+# 3. process the file removal list (4. REMOVE) 
+
+process_removes();
+
+# 4. process the file addition list (5. ADD) 
+
+process_adds();
+
+# 5. read and act on any notes (6. NOTES)
+
+process_notes();
+
+# 6. Create tarball in the form "SourceForge-VERSIONpreN.tar.gz"
+#    and email a URL to the tarball to:
+# 
+#    - Engine Team and PS (sf-engine at valinux.com)
+#    - SF.net Team (staff at sourceforge.net)
+
+create_tarball();
+
+# 7. review should generate changes in CVS to:
+# 
+#    - critical bugs
+#    - files missing copyright statements
+#    - README, AUTHORS, and other administrative files
+# 
+# 8. Goto 0.  Repeat until step 7 generates no comments.  Upon approval,
+#    tag CVS at VERSION and repeat steps 1 through 5.  Create tarball in
+#    the form "SourceForge-VERSION.tar.gz" and release on SourceForge.net.
+# 
+# ------------------------------------------------------------------------------
+# 4. REMOVE
+# ------------------------------------------------------------------------------
+# 
+# Note: this section should be a list of 'rm path/to/file'
+# statements, suitable to be pasted into a console.
+
+sub process_removes {
+	my @stuff_to_remove = (
+		'rm -rf alexandria/include',
+		'rm -rf alexandria/backend/',
+		'rm -rf alexandria/monitor/',
+		'rm -rf alexandria/docs/',
+		'rm -rf alexandria/utils/',
+		'rm -f alexandria/TARBALL',
+		'rm -f alexandria/pager.php3',
+		'rm -f alexandria/www/my/intelagreement.php',
+		'rm -f alexandria/www/admin/intelapprove.php',
+		'rm -rf alexandria/www/themes/forged/',
+		'rm -rf alexandria/www/themes/classic/',
+		'rm -f alexandria/cronjobs/kt_dump.php',
+		'rm -f alexandria/www/kernel_traffic.php'
+	);
+
+	foreach(@stuff_to_remove) {
+		system $_;
+	}
+}
+
+# ------------------------------------------------------------------------------
+# 5. ADD
+# ------------------------------------------------------------------------------
+
+sub process_adds {
+}
+
+# ------------------------------------------------------------------------------
+# 6. NOTES
+# ------------------------------------------------------------------------------
+
+sub process_notes {
+        print "
+WARNING: PLEASE READ CAREFULLY!
+
+Automated preparation of SF source code snapshot has been completed.
+In particular, removals and additions has been performed. You should
+check that the latter were correct, however.
+
+For your convenience, as the next step, tarball package will be created,
+put at the appropriate place, and notice about snapshot availability
+will be sent to concerned parties. But you should review resulting tarball
+immediately to make sure it is correct, including (but not limited to):
+1. Additions made are based on the latest versions of subfacilities.
+2. Source code does not contain elements pertinent only to .net
+   installation (www/index.php is obvious candidate for review).
+If in doubt, ask via the staff list or IRC.
+
+If you will find that changes are required you may make them (among
+other means) to snapshot tree residing in /tmp/scratch and
+recreate tarball with following command:
+
+cd /tmp/scratch; tar cfz /usr/local/sourceforge.net/www/SourceForge-$ARGV[0].tar.gz alexandria
+
+";
+}
+
+################################################################################
+
+sub tarball_init {
+	# Check that CVS tag is in place
+	if (!$ARGV[0] || !($ARGV[0] =~ /((\d+)\.(\d+)\.(\d+))(\w*)/)) {
+		print("Usage: TARBALL <major.minor.revision>\n");
+		print("Example: TARBALL 1.2.3pre4\n");
+		exit;
+	}
+
+	# Replace '.' with '_'
+	$CVS_TAG = $ARGV[0];
+	$CVS_TAG =~ s/[\.]/_/g;
+
+	# Update this file with the new release name
+	open(FH, "+< TARBALL") or die("Opening: $!");
+	my $out = '';
+	while (<FH>) {
+		s/# RELEASE_VERSION=((\d+)\.(\d+)\.(\d+))(\w*)/# RELEASE_VERSION=$ARGV[0]/g;
+		$out .= $_;
+	}
+
+	seek(FH, 0, 0)          or die("Can't seek to start of file: $!");
+	print FH $out           or die("Can't print to file: $!");
+	truncate(FH, tell(FH))  or die("Can't truncate file: $!");
+	close(FH)               or die("Can't close file: $!");
+}
+
+sub create_tarball {
+	# Create the tarball 
+	system('tar cfz /usr/local/sourceforge.net/www/SourceForge-' . $ARGV[0] . '.tar.gz alexandria');
+
+	# Send email notices
+##	open(SENDMAIL, "|/usr/sbin/sendmail -oi -t -odq") or die("Can't fork for sendmail: $!\n");
+	open(SENDMAIL, "|/usr/sbin/sendmail -oi -t") or die("Can't fork for sendmail: $!\n");
+##	my $body = "From: noreply\@sourceforge.net
+	my $body = "To: sf-engine\@valinux.com, staff\@sourceforge.net
+Subject: New Tarball ($ARGV[0]) Created
+
+A new SourceForge tarball is available for review at http://webdev.sourceforge.net/SourceForge-$ARGV[0].tar.gz";
+	print SENDMAIL $body;
+	close(SENDMAIL)	or warn("sendmail didn't close nicely: $!\n");
+
+	# Remove the scratch dir
+	# Don't do this as source tree will likely need manual
+	# augmentation/cleanup for package release
+#	system("rm -rf /tmp/scratch");
+}

Added: trunk/gforge_base/evolvisforge/gforge/common/include/Error.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/Error.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/Error.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,96 @@
+<?php   
+
+/**
+ * A very base error class.
+ *
+ * Provides a basic uniform API for setting and testing error conditions and
+ * error messages.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ * @author Tim Perdue <tperdue at valnux.com>
+ * @date 2000-08-28
+ *
+ */
+
+class Error {
+	/**
+	 * The current error state.
+	 *
+	 * @var bool $error_state
+	 */
+	var $error_state;
+
+	/**
+	 * The current error message(s).
+	 *
+	 * @var string $error_message
+	 */
+	var $error_message;
+
+	/**
+	 * Error() - Constructor
+	 * Constructor for the Error class.
+	 * Sets the error state to false.
+	 *
+	 */
+	function Error() {
+		//nothing
+		$this->error_state=false;
+	}
+
+	/**
+	 * setError() - Sets the error string.
+	 * Set the error string $error_message to the value of $string
+	 # and enable the $error_state flag.
+	 *
+	 * @param	string  The error string to set.
+	 *
+	 */
+	function setError($string) {
+		$this->error_state=true;
+		$this->error_message=$string;
+	}
+
+	/**
+	 * clearError() - Clear the current error.
+	 * Clear the current error string and disable the $error_state flag.
+	 *
+	 */
+	function clearError() {
+		$this->error_state=false;
+		$this->error_message='';
+	}
+
+	/**
+	 * getErrorMessage() - Retrieve the error message string.
+	 * Returns the value of $error_message.
+	 *
+	 * @return    $error_message The current error message string.
+	 *
+	 */
+	function getErrorMessage() {
+		if ($this->error_state)	{
+			return $this->error_message;
+		} else {
+			return 'No Error';
+		}
+	}
+
+	/**
+	 * isError() - Determines the current error state.
+	 * This function returns the current value of $error_state.
+	 *
+	 * @return    $error_state     The boolean error status.
+	 *
+	 */
+	function isError() {
+		return $this->error_state;
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/Foundry.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/Foundry.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/Foundry.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,182 @@
+<?php
+/**
+ * Wrapper for Foundry data.
+ *
+ * An object wrapper for Foundry (as opposed to project) data.
+ * Extends the base object, Group.
+ *
+ * Example of proper use:
+ * 
+ * // Instantiates the object
+ * $grp = new Foundry($group_id);
+ *
+ * // Now use the object to get the unix_name for the project
+ * $grp->getUnixName();
+ *
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id: Foundry.class,v 1.4 2001/06/06 21:30:03 dbrogdon Exp $
+ * @author Tim Perdue <tperdue at valnux.com>
+ * @date 2000-08-28
+ *
+ */
+
+class Foundry extends Group {
+	/**
+	 * Foundry preferences, etc - associative array from the database
+	 *
+	 * @var array $foundry_data_array
+	 */
+	var $foundry_data_array;
+
+	/**
+	 * Database result set handle for foundry_data
+	 *
+	 * @var int $foundry_db_result
+	 */
+	var $foundry_db_result;
+
+	/**
+	 * Foundry() - Constructor
+	 * Constructor for the Error class.
+	 * Basically just call the parent to set up everything
+	 *
+	 * @param	int		The foundry ID
+	 * @param	int		Database resource ID
+	 *
+	 */
+	function Foundry($id,$res=false) {
+		$this->Group($id,$res);
+
+		//now set up the foundry data
+
+		$this->foundry_db_result=db_query("SELECT * FROM foundry_data WHERE foundry_id='$id'");
+		if (db_numrows($this->foundry_db_result) < 1) {
+			//function in class we extended
+			$this->setError('Foundry Data Not Found');
+			$this->foundry_data_array=array(); 
+		} else {
+			//set up an associative array for use by other functions
+			$this->foundry_data_array=db_fetch_array($this->foundry_db_result);
+		}       
+	}
+
+	/**
+	 * refreshFoundryData() - Refresh object member values.
+	 * Retreive the latest foundry data and update object members with the new data.
+	 *
+	 */
+	function refreshFoundryData() {
+		$this->refreshGroupData();
+		$this->foundry_db_result=db_query("SELECT * FROM foundry_data WHERE foundry_id='". $this->getID() ."'");
+		$this->foundry_data_array=db_fetch_array($this->foundry_db_result);
+	}
+
+	/**
+	 * getFreeformHTML1() - Return value of 'freeform1_html' from the foundry_data table.
+	 * Return value of 'freeform1_html'.
+	 *
+	 * @return $foundry_data_array['freeform1_html'] The value of 'freeform1_html' from the foundry_data table.
+	 *
+	 */
+	function getFreeformHTML1() {
+		return $this->foundry_data_array['freeform1_html'];
+	}
+
+	/**
+	 * getFreeformHTML2() - Return value of 'freeform2_html' from the foundry_data table.
+	 * Return value of 'freeform2_html'.
+	 *
+	 * @return $foundry_data_array['freeform2_html'] The value of 'freeform2_html' from the foundry_data table.
+	 *
+	 */
+	function getFreeformHTML2() {
+		return $this->foundry_data_array['freeform2_html'];
+	}
+
+	/**
+	 * getSponsorHTML1() - Return value of 'sponsor1_html' from the foundry_data table.
+	 * Return value of 'sponsor1_html'.
+	 *
+	 * @return $foundry_data_array['sponsor1_html'] The value of 'sponsor1_html' from the foundry_data table.
+	 *
+	 */
+	function getSponsorHTML1() {
+		return $this->foundry_data_array['sponsor1_html'];
+	}
+
+	/**
+	 * getSponsorHTML2() - Return value of 'sponsor2_html' from the foundry_data table.
+	 * Return value of 'sponsor2_html'.
+	 *
+	 * @return $foundry_data_array['sponsor2_html'] The value of 'sponsor2_html' from the foundry_data table.
+	 *
+	 */
+	function getSponsorHTML2() {
+		return $this->foundry_data_array['sponsor2_html'];
+	}
+
+	/**
+	 * getGuideImageID() - Return value of 'guide_image_id' from the foundry_data table.
+	 * Returns the ID number that corresponds to the appropriate ID # in
+	 * the db_images table
+	 *
+	 * @return $foundry_data_array['guide_image_id'] The value of 'guide_image_id' from the foundry_data table.
+	 *
+	 */
+	function getGuideImageID() {
+		return $this->foundry_data_array['guide_image_id'];
+	}
+
+	/**
+	 * getLogoImageID() - Return value of 'logo_image_id' from the foundry_data table.
+	 * Get the ID number that corresponds to the appropriate ID # in the db_images table.
+	 *
+	 * @return $foundry_data_array['logo_image_id'] The value of 'logo_image_id' from the foundry_data table.
+	 *
+	 */
+	function getLogoImageID() {
+		return $this->foundry_data_array['logo_image_id'];
+	}       
+
+	/**
+	 * getTroveCategories() - Get the trove categories.
+	 * Return value of 'trove_categories' from the foundry_data table.
+	 *
+	 * @return $foundry_data_array['trove_categories'] The value of 'trove_categories' from the foundry_data table.
+	 *
+	 */
+	function getTroveCategories() {
+		return $this->foundry_data_array['trove_categories'];
+	}
+
+	/**
+	 * getProjectCommaSep() - Get comma separated list of projects.
+	 * Returns a comma separated list of member project ids
+	 *
+	 * @see getMemberProjects()
+	 *
+	 */
+	function getProjectsCommaSep() {
+		return implode(',',$this->getMemberProjects());
+	}
+
+	/**
+	 * getMemberProjects() - Return an array of member project ID's.
+	 * Returns an array of member project ids
+	 *
+	 * @see utils.php::util_result_column_to_array()
+	 *
+	 */
+	function getMemberProjects() {
+		//return an array of group_id's in this project
+		$sql="SELECT DISTINCT project_id FROM foundry_projects WHERE foundry_id='". $this->getID() ."' ORDER BY project_id ASC";
+		$result=db_query($sql);
+		return util_result_column_to_array($result);
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/Group.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/Group.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/Group.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,1454 @@
+<?php   
+/**
+ *	Group object
+ *
+ *	Sets up database results and preferences for a group and abstracts this info.
+ *
+ *	Foundry.class and Project.class call this.
+ *
+ *	Project.class contains all the deprecated API from the old group.php file
+ *
+ *	DEPENDS on user.php being present and setup properly
+ *
+ *	GENERALLY YOU SHOULD NEVER INSTANTIATE THIS OBJECT DIRECTLY
+ *	USE group_get_object() to instantiate properly
+ *
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ * @author Tim Perdue <tperdue at valinux.com>
+ * @date 2000-08-28
+ *
+ */
+
+require_once('common/tracker/ArtifactTypes.class');
+require_once('www/include/frs.class');
+
+$GROUP_OBJ=array();
+
+/**
+ *  group_get_object() - Get the group object.
+ *
+ *  group_get_object() is useful so you can pool group objects/save database queries
+ *  You should always use this instead of instantiating the object directly.
+ *
+ *  You can now optionally pass in a db result handle. If you do, it re-uses that query
+ *  to instantiate the objects.
+ *
+ *  IMPORTANT! That db result must contain all fields
+ *  from groups table or you will have problems
+ *
+ *  @param		int		Required
+ *  @param		int		Result set handle ("SELECT * FROM groups WHERE group_id=xx")
+ *  @return a group object or false on failure
+ */
+function &group_get_object($group_id,$res=false) {
+	//create a common set of group objects
+	//saves a little wear on the database
+
+	//automatically checks group_type and 
+	//returns appropriate object
+	
+	global $GROUP_OBJ;
+	if (!isset($GROUP_OBJ["_".$group_id."_"])) {
+		if ($res) {
+			//the db result handle was passed in
+		} else {
+			$res=db_query("SELECT * FROM groups WHERE group_id='$group_id'");
+		}
+		if (!$res || db_numrows($res) < 1) {
+			$GROUP_OBJ["_".$group_id."_"]=false;
+		} else {
+			/*
+				check group type and set up object
+			*/
+			if (db_result($res,0,'type')==1) {
+				//project
+				$GROUP_OBJ["_".$group_id."_"]= new Project($group_id,$res);
+			} else if (db_result($res,0,'type')==2) {
+				//foundry
+				$GROUP_OBJ["_".$group_id."_"]= new Foundry($group_id,$res);
+			} else {
+				//invalid
+				$GROUP_OBJ["_".$group_id."_"]=false;
+			}
+		}
+	}
+	return $GROUP_OBJ["_".$group_id."_"];
+}
+
+class Group extends Error {
+	/**
+	 * Associative array of data from db
+	 * 
+	 * @var array $data_array
+	 */
+	var $data_array;
+
+	/**
+	 * The group ID
+	 *
+	 * @var int $group_id
+	 */
+	var $group_id;
+
+	/** 
+	 * Database result set handle
+	 *
+	 * @var int $db_result
+	 */
+	var $db_result;
+
+	/**
+	 * Permissions data row from db
+	 * 
+	 * @var array $perm_data_array
+	 */
+	var $perm_data_array;
+
+	/**
+	 * Whether the use is an admin/super user of this project
+	 *
+	 * @var bool $is_admin
+	 */
+	var $is_admin;
+
+	/**
+	 * Artifact types result handle
+	 * 
+	 * @var int $types_res;
+	 */
+	var $types_res;
+
+	/**
+	 *	Group() - Group object constructor - use group_get_object() to instantiate
+	 *
+	 *	@param	int		Required - group_id of the group you want to instantiate
+	 *	@param	int		Database result from select query
+	 */
+	function Group($id=false, $res=false) {
+		$this->Error();
+		if (!$id) {
+			//setting up an empty object
+			//probably going to call create()
+			return true;
+		}
+		$this->group_id=$id;
+		if (!$res) {
+			$this->db_result=db_query("SELECT * FROM groups WHERE group_id='$id'");
+		} else {
+			$this->db_result=$res;
+		}
+		if (db_numrows($this->db_result) < 1) {
+			//function in class we extended
+			$this->setError('Group Not Found');
+			$this->data_array=array();
+		} else {
+			//set up an associative array for use by other functions
+
+			db_reset_result($this->db_result);
+
+			$this->data_array=db_fetch_array($this->db_result);
+		}
+	}
+
+
+	/**
+	 *	getData()
+	 *
+	 *	Generally should NOT be used - here for supporting deprecated group.php
+	 *	@return a database result set handle
+	 *	@access private
+	 */
+	function getData() {
+		db_reset_result($this->db_result);
+		return $this->db_result;
+	}
+
+	/**
+	 *	refreshGroupData() - May need to refresh database fields if an update occurred
+	 */
+	function refreshGroupData() {
+		$this->db_result=db_query("SELECT * FROM groups WHERE group_id='". $this->getID() ."'");
+		$this->data_array=db_fetch_array($this->db_result);
+	}
+
+
+	/**
+	 *	create() - Create new group
+	 *
+	 *	This method should be called on empty Group object
+	 *  
+	 *  @param	object	The User object
+	 *  @param	string	The full name of the user
+	 *  @param	string	The Unix name of the user
+	 *  @param	string	The new group description
+	 *  @param	int		The ID of the license to use
+	 *  @param	string	The 'other' license to use if any
+	 *  @param	string	The purpose of the group
+	 */
+	function create(&$user, $full_name, $unix_name, $description,
+		$license, $license_other, $purpose) {
+
+		// $user is ignored - anyone can create pending group
+
+		if ($this->getID()!=0) {
+			$this->setError("Group::create: Group object already exists");
+			return false;
+		}
+
+		srand((double)microtime()*1000000);
+		$random_num = rand(0,1000000);
+
+		db_begin();
+
+		$res = db_query("
+			INSERT INTO groups (
+				group_name,
+				is_public,
+				unix_group_name,
+				short_description,
+				http_domain,
+				homepage,
+				status,
+				unix_box,
+				cvs_box,
+				license,
+				register_purpose,
+				register_time,
+				license_other,
+				rand_hash
+			)
+			VALUES (
+				'$full_name',
+				1,
+				'$unix_name',
+				'$description',
+				'$unix_name.".$GLOBALS['sys_default_domain']."',
+				'$unix_name.".$GLOBALS['sys_default_domain']."',
+				'P',
+				'shell1',
+				'cvs1',
+				'$license',
+				'".htmlspecialchars($purpose)."',
+				".time().",
+				'".htmlspecialchars($license_other)."',
+				'".md5($random_num)."'
+			)
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR: Could not create group: '.db_error());
+			db_rollback();
+			return false;
+		}
+
+		$this->group_id = db_insertid($res, 'groups', 'group_id');
+
+		//
+		// Now, make the user an admin
+		//
+		$res = db_query("
+			INSERT INTO user_group (
+				user_id,
+				group_id,
+				admin_flags,
+				cvs_flags,
+				artifact_flags,
+				forum_flags
+			)
+			VALUES (
+				".$user->getID().",
+				".$this->getID().",
+				'A',
+				1,
+				2,
+				2
+			)
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR: Could not add admin to newly created group: '.db_error());
+			db_rollback();
+			return false;
+		}
+
+		db_commit();
+		$this->refreshGroupData();
+		return true;
+	}
+
+
+	/**
+	 *	updateAdmin($user) - Update core properties of group object
+	 *
+	 *	This function require site admin privilege
+	 *
+	 *	@param	object	User requesting operation (for access control)
+	 *	@param	bool	Whether group is publicly accessible (0/1)
+	 *	@param	string	Project's license (string ident)
+	 *	@param	int		Group type (1-project, 2-foundry)
+	 *	@param	string	Machine on which group's home directory located
+	 *	@param	string	Domain which serves group's WWW
+	 *	@return status
+	 *	@access public
+	 */
+	function updateAdmin(&$user, $is_public, $license, $type, $unix_box, $http_domain) {
+
+		$perm =& $this->getPermission($user);
+
+		if (!$perm || !is_object($perm)) {
+			$this->setError('Could not get permission');
+			return false;
+		}
+
+		if (!$perm->isSuperUser()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+
+		db_begin();
+
+		$res = db_query("
+			UPDATE groups
+			SET is_public='$is_public',
+				license='$license',type='$type',
+				unix_box='$unix_box',http_domain='$http_domain'
+			WHERE group_id='".$this->getID()."'
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR: DB: Could not change group properties: '.db_error());
+			db_rollback();
+			return false;
+		}
+
+		/*
+			If this is a foundry, see if they have a preferences row, if not, create one
+		*/
+		if ($type=='2') {
+
+			$res = db_query("
+				SELECT *
+				FROM foundry_data
+				WHERE foundry_id='".$this->getID()."'
+			");
+
+			if (db_numrows($res) < 1) {
+				$res = db_query("
+					INSERT INTO foundry_data (foundry_id)
+					VALUES ('".$this->getID()."')
+				");
+
+				if (!$res || db_affected_rows($res) < 1) {
+					$this->setError('Could not insert foundry_data row: '.db_error());
+					db_rollback();
+					return false;
+				}
+			}
+		}
+
+		db_commit();
+
+		// Log the audit trail
+		if ($is_public != $this->isPublic()) {
+			$this->addHistory('is_public', $this->isPublic());
+		}
+		if ($license != $this->data_array['license']) {
+			$this->addHistory('license', $this->data_array['license']);
+		}
+		if ($type != $this->data_array['type']) {
+			$this->addHistory('type', $this->data_array['type']);
+		}
+		if ($unix_box != $this->data_array['unix_box']) {
+			$this->addHistory('unix_box', $this->data_array['unix_box']);
+		}
+		if ($http_domain != $this->data_array['http_domain']) {
+			$this->addHistory('http_domain', $this->data_array['http_domain']);
+		}
+
+		$this->refreshGroupData();
+		return true;
+	}
+
+	/**
+	 *	update() - Update number of common properties
+	 *
+	 *	Unlike updateAdmin(), this function accessible to project
+	 *	admin.
+	 *
+	 *	@param	object	User requesting operation (for access control)
+	 *	@param	bool	Whether group is publicly accessible (0/1)
+	 *	@param	string	Project's license (string ident)
+	 *	@param	int		Group type (1-project, 2-foundry)
+	 *	@param	string	Machine on which group's home directory located
+	 *	@param	string	Domain which serves group's WWW
+	 *	@return status
+	 *	@access public
+	 */
+	function update(&$user, $group_name,$homepage,$short_description,$use_mail,$use_survey,$use_forum,
+		$use_pm,$use_pm_depend_box,$use_cvs,$use_news,$use_docman,
+		$new_task_address,$send_all_tasks,$logo_image_id) {
+
+		$perm =& $this->getPermission($user);
+
+		if (!$perm || !is_object($perm)) {
+			$this->setError('Could not get permission');
+			return false;
+		}
+
+		if (!$perm->isAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+
+		// Validate some values
+		if (!$group_name) {
+			$this->setError('Invalid Group Name');
+			return false;
+		}
+
+		if ($new_task_address && !validate_email($new_task_address)) {
+			$this->setError('Task Address Appeared Invalid');
+			return false;
+		}
+
+		// in the database, these all default to '1',
+		// so we have to explicity set 0
+		if (!$use_mail) {
+			$use_mail=0;
+		}
+		if (!$use_survey) {
+			$use_survey=0;
+		}
+		if (!$use_forum) {
+			$use_forum=0;
+		}
+		if (!$use_pm) {
+			$use_pm=0;
+		}
+		if (!$use_pm_depend) {
+			$use_pm_depend=0;
+		}
+		if (!$use_cvs) {
+			$use_cvs=0;
+		}
+		if (!$use_news) {
+			$use_news=0;
+		}
+		if (!$use_docman) {
+			$use_docman=0;
+		}
+		if (!$send_all_tasks) {
+			$send_all_tasks=0;
+		}
+
+		if (!$homepage) {
+			$homepage='http://'.$GLOBALS['sys_default_domain'].'/projects/'.$this->getUnixName().'/';
+		}
+
+		$res = db_query("
+			UPDATE groups
+			SET 
+				group_name='$group_name',
+				homepage='$homepage',
+				short_description='$short_description',
+				use_mail='$use_mail',
+				use_survey='$use_survey',
+				use_forum='$use_forum',
+				use_pm='$use_pm',
+				use_pm_depend_box='$use_pm_depend_box',
+				use_cvs='$use_cvs',
+				use_news='$use_news',
+				use_docman='$use_docman',
+				new_task_address='$new_task_address',
+				send_all_tasks='$send_all_tasks'".
+// XXX: not active yet
+//				logo_image_id='$logo_image_id' 
+			"
+			WHERE group_id='".$this->getID()."'
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('Error updating project information: '.db_error());
+			return false;
+		}
+
+		// Log the audit trail
+		$this->addHistory('Changed Public Info', '');
+
+		$this->refreshGroupData();
+		return true;
+	}
+
+	/**
+	 *	getID() - Simply return the group_id for this object
+	 *
+	 *	@return integer group_id
+	 */
+	function getID() {
+		return $this->group_id;
+	}
+
+	/**
+	 *	getType() - Foundry, project, etc
+	 *
+	 *	@return the type flag from the database
+	 */
+	function getType() {
+		return $this->data_array['type'];
+	}
+
+
+	/**
+	 *	getStatus()
+	 *
+	 *	Statuses include I,H,A,D
+	 */
+	function getStatus() {
+		return $this->data_array['status'];
+	}
+
+	/**
+	 *	setStatus($user, $status)
+	 *
+	 *	Statuses include I,H,A,D
+	 *
+	 *	@param	object	User requesting operation (for access control)
+	 *	@param	string	Status value
+	 *
+	 *	@access public
+	 */
+	function setStatus(&$user, $status) {
+
+		$perm =& $this->getPermission($user);
+
+		if (!$perm || !is_object($perm)) {
+			$this->setError('Could not get permission');
+			return false;
+		}
+
+		if (!$perm->isSuperUser()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+
+		//	Projects in 'A' status can only go to 'H' or 'D'
+		//	Projects in 'D' status can only go to 'A'
+		//	Projects in 'P' status can only go to 'A' OR 'D'
+		//	Projects in 'I' status can only go to 'P'
+		//	Projects in 'H' status can only go to 'A' OR 'D'
+		$allowed_status_changes = array(
+			'AH'=>1,'AD'=>1,'DA'=>1,'PA'=>1,'PD'=>1,
+			'IP'=>1,'HA'=>1,'HD'=>1
+		);              
+
+		// Check that status transition is valid
+		if ($this->getStatus() != $status
+		    && !$allowed_status_changes[$this->getStatus().$status]) {
+			$this->setError('Invalid Status Change');
+			return false;
+		}
+
+		db_begin();
+
+		$res = db_query("
+			UPDATE groups
+			SET status='$status'
+			WHERE group_id='". $this->getID()."'
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR: DB: Could not change group status: '.db_error());
+			db_rollback();
+			return false;
+		}
+
+		if ($status=='A') {
+			// Activate LDAP group, if not yet
+			if (!sf_ldap_check_group($this->getID())) {
+
+				if (!sf_ldap_create_group($this->getID())) {
+					$this->setError(sf_ldap_get_error_msg());
+					db_rollback();
+					return false;
+				}
+
+				if (!$this->activateUsers()) {
+					db_rollback();
+					return false;
+				}
+			}
+
+		/* Otherwise, the group is not active, and make sure that
+		   LDAP group is not active either */
+		} else if (sf_ldap_check_group($this->getID())) {
+
+			if (!sf_ldap_remove_group($this->getID())) {
+				$this->setError(sf_ldap_get_error_msg());
+				db_rollback();
+				return false;
+			}
+
+		}
+
+		// Make sure that active group have default trackers
+		if ($status=='A') {
+			$ats = new ArtifactTypes($this);
+			if (!$ats || !is_object($ats)) {
+				$this->setError('Error creating ArtifactTypes object');
+				db_rollback();
+				return false;
+			} else if ($ats->isError()) {
+				$this->setError($ats->getErrorMessage());
+				db_rollback();
+				return false;
+			}
+			if (!$ats->createTrackers()) {
+				$this->setError($ats->getErrorMessage());
+				db_rollback();
+				return false;
+			}
+		}
+
+		db_commit();
+
+		// Log the audit trail
+		if ($status != $this->getStatus()) {
+			$this->addHistory('status', $this->getStatus());
+		}
+
+		$this->data_array['status'] = $status;
+		return true;
+	}
+
+	/**
+	 *	isFoundry() - Simple boolean test to see if it's a foundry or not
+	 *
+	 *	@return true/false
+	 */
+	function isFoundry() {
+		if ($this->getType()==2) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 *	isProject() - Simple boolean test to see if it's a project or not
+	 *
+	 *	@return true/false
+	 */
+	function isProject() {
+		if ($this->getType()==1) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 *	isPublic() - Simply returns the is_public flag from the database
+	 *
+	 *	@return true/false
+	 */
+	function isPublic() {
+		return $this->data_array['is_public'];
+	}
+
+	/**
+	 *	isActive() - Database field status of 'A' returns true
+	 *
+	 *	@return true/false
+	 */
+	function isActive() {
+		if ($this->getStatus()=='A') {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 *  getUnixName()
+	 *
+	 *  @return text unix_name
+	 */
+	function getUnixName() {
+		return strtolower($this->data_array['unix_group_name']);
+	}
+
+	/**
+	 *  getPublicName()
+	 *
+	 *  @return text group_name
+	 */
+	function getPublicName() {
+		return htmlspecialchars($this->data_array['group_name']);
+	}
+
+	/**
+	 *  getDescription()
+	 *
+	 *  @return text description
+	 */
+	function getDescription() {
+		return $this->data_array['short_description'];
+	}
+
+	/**
+	 *  getStartDate()
+	 *
+	 *  @return integer (unix time) of registration
+	 */
+	function getStartDate() {
+		return $this->data_array['register_time'];
+	}
+
+	/**
+	 *  getLogoImageID()
+	 *
+	 *  @return ID of logo image in db_images table (or 100 if none)
+	 */
+	function getLogoImageID() {
+		return $this->data_array['logo_image_id'];
+	}
+
+	/**
+	 *  getUnixBox()
+	 *
+	 *  @return name of the unix machine for the group
+	 */
+	function getUnixBox() {
+		return $this->data_array['unix_box'];
+	}
+
+	/**
+	 *  getDomain()
+	 *
+	 *  @return name of the group [web] domain
+	 */
+	function getDomain() {
+		return $this->data_array['http_domain'];
+	}
+
+	/**
+	 *  getLicense()
+	 *
+	 *  @return string ident of group license
+	 */
+	function getLicense() {
+		return $this->data_array['license'];
+	}
+
+	/**
+	 *  getLicenseOther()
+	 *
+	 *  @return text custom license
+	 */
+	function getLicenseOther() {
+		if ($this->getLicense() == 'other') {
+			return $this->data_array['license_other'];
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	 *  getRegistrationPurpose()
+	 *
+	 *  @return text application for project hosting
+	 */
+	function getRegistrationPurpose() {
+		return $this->data_array['register_purpose'];
+	}
+
+
+
+
+
+	/*
+
+		Common Group preferences for tools
+
+	*/
+
+	/**
+	 *	usesCVS() - whether or not this group has opted to use CVS
+	 *
+	 *	@return true/false
+	 */
+	function usesCVS() {
+		return $this->data_array['use_cvs'];
+	}
+
+	/**
+	 *	usesMail() - whether or not this group has opted to use mailing lists
+	 *
+	 *	@return true/false
+	 */
+	function usesMail() {
+		return $this->data_array['use_mail'];
+	}
+
+	/**
+	 * 	usesNews() - whether or not this group has opted to use news
+	 *
+	 *	@return true/false
+	 */
+	function usesNews() {
+		return $this->data_array['use_news'];
+	}
+
+	/**
+	 *	usesForum() - whether or not this group has opted to use discussion forums
+	 *
+	 *  @return true/false
+	 */
+	function usesForum() {
+		return $this->data_array['use_forum'];
+	}	   
+
+	/**
+	 *  usesDocman() - whether or not this group has opted to use docman
+	 *
+	 *  @return true/false
+	 */
+	function usesDocman() {
+		return $this->data_array['use_docman'];
+	}
+
+	/**
+	 *  usesSurvey() - whether or not this group has opted to use surveys
+	 *
+	 *  @return true/false
+	 */
+	function usesSurvey() {
+		return $this->data_array['use_survey'];
+	}	   
+
+	/**
+	 *  usesPM() - whether or not this group has opted to Project Manager
+	 *
+	 *  @return true/false
+	 */
+	function usesPM() {
+		return $this->data_array['use_pm'];
+	}
+
+	/**
+	 *  usesPMDependencies() - whether or not this group has opted to use task dependencies
+	 *
+	 *  @return true/false
+	 */
+	function usesPMDependencies() {
+		return $this->data_array['use_pm_depend'];
+	}
+
+	// Warning: names for 2 functions below were choosen to be
+	// consistent with trackers code
+
+	/**
+	 *  PMEmailAddress() - get email address to send PM notifications to
+	 *
+	 *  @return true/false
+	 */
+	function PMEmailAddress() {
+		return $this->data_array['new_task_address'];
+	}
+
+	/**
+	 *  PMEmailAll() - whether or not this group has opted to use task dependencies
+	 *
+	 *  @return true/false
+	 */
+	function PMEmailAll() {
+		return $this->data_array['send_all_tasks'];
+	}
+
+
+	/**
+	 *	getHomePage() - The URL for this project's home page
+	 *
+	 *	@return text homepage URL
+	 */
+	function getHomePage() {
+		return $this->data_array['homepage'];
+	}
+
+	/**
+	 *	getArtifactTypes() - Get all Artifact types for this group
+	 *
+	 *	@return result set
+	 */
+	function getArtifactTypes() {
+		if (!isset($this->types_res)) {
+			$sql="SELECT group_artifact_id,name
+				FROM artifact_group_list
+				WHERE group_id='".$this->getID()."'
+				ORDER BY name";
+			$this->types_res=db_query($sql);
+		}
+		return $this->types_res;
+	}
+
+	/**
+	 *	getPermission() - Return a Permission for this Group and the specified User
+	 *
+	 *	@param	object	The user you wish to get permission for (usually the logged in user)
+	 *	@return permission
+	 */
+	function &getPermission(&$_user) {
+		return permission_get_object(&$this, &$_user);
+	}
+
+	/*
+
+
+		Basic functions to add/remove users to/from a group
+		and update their permissions
+
+
+	*/
+
+	/**
+	 *	addUser() - controls adding a user to a group
+	 *  
+	 *  @param	string	Unix name of the user to add
+	 *	@return true/false
+	 *	@access public
+	 */
+	function addUser($user_unix_name) {
+		/*
+			Admins can add users to groups
+		*/
+?><?php
+//TODO should not assume logged in user only - $user should be passed in or $perm passed in
+		$perm =& $this->getPermission( session_get_user() );
+
+		if (!$perm || !is_object($perm) || !$perm->isAdmin()) {
+			$this->setError('You Are Not An Admin For This Group');
+			return false;
+		}
+
+		db_begin();
+		
+		/*
+			get user id for this user's unix_name
+		*/
+		$res_newuser = db_query("SELECT * FROM users WHERE user_name='" . strtolower($user_unix_name) . "'");
+
+		if (db_numrows($res_newuser) > 0) {
+			//
+			//	make sure user is active
+			//
+			if (db_result($res_newuser,0,'status') != 'A') {
+				$this->setError('User is not active. Only active users can be added.');
+				db_rollback();
+				return false;
+			}
+
+			//
+			//	user was found - set new user_id var
+			//
+			$form_newuid = db_result($res_newuser,0,'user_id');
+
+			//
+			//	if not already a member, add them
+			//
+			$res_member = db_query("SELECT user_id FROM user_group ".
+				"WHERE user_id='$form_newuid' AND group_id='". $this->getID() ."'");
+
+			if (db_numrows($res_member) < 1) {
+				//
+				//	user was not already a member
+				//
+				//	if no unix account, give them a unix_uid
+				//
+				if ( !db_result($res_newuser,0,'unix_uid') ) {
+					$user=&user_get_object($form_newuid,$res_newuser);
+					if (!$user->setUpUnixUID()) {
+						$this->setError('ERROR: Cannot assign UNIX uid to the user');
+						db_rollback();
+						return false;
+					}
+					if (!sf_ldap_create_user($form_newuid)) {
+						$this->setError(sf_ldap_get_error_msg());
+						db_rollback();
+						return false;
+					}
+				} else {
+					//
+					//	User already had unix account
+					//
+					if (!sf_ldap_check_create_user($form_newuid)) {
+						$this->setError(sf_ldap_get_error_msg());
+						db_rollback();
+						return false;
+					}
+				}
+				//
+				//	Create this user's row in the user_group table
+				//
+				$res=db_query("INSERT INTO user_group 
+					(user_id,group_id,admin_flags,forum_flags,project_flags,
+					doc_flags,cvs_flags,member_role,release_flags,artifact_flags)
+					VALUES ('$form_newuid','". $this->getID() ."','','0','0','0','1','100','0','0')");
+
+				//verify the insert worked
+				if (!$res || db_affected_rows($res) < 1) {
+					$this->setError('ERROR: Could Not Add User To Group');
+					db_rollback();
+					return false;
+				}
+				//
+				//	set up their ldap info
+				//
+				if (!sf_ldap_group_add_user($this->getID(),$form_newuid)) {
+					$this->setError(sf_ldap_get_error_msg());
+					db_rollback();
+					return false;
+				}
+
+			} else {
+				//
+				//	user was already a member
+				//	make sure they are set up with a unix_uid,
+				//	LDAP entry and membership
+				//
+				$user=&user_get_object($form_newuid,$res_newuser);
+				if (!$user->setUpUnixUID()) {
+					$this->setError('ERROR: could not set up unix_uid for user: '.$user->getErrorMessage());
+					db_rollback();
+					return false;
+				} else {
+					$user->refreshUserData();
+					if (!sf_ldap_check_create_user($form_newuid)) {
+						$this->setError(sf_ldap_get_error_msg());
+						db_rollback();
+						return false;
+					}
+						if (!sf_ldap_group_add_user($this->getID(),$form_newuid)) {
+						$this->setError(sf_ldap_get_error_msg());
+						db_rollback();
+						return false;
+					}
+					db_commit();
+					return true;
+				}
+			}
+		} else {
+			//
+			//	user doesn't exist
+			//
+			$this->setError('ERROR: User does not exist on SourceForge');
+			db_rollback();
+			return false;
+		}
+		//
+		//	audit trail
+		//
+		$this->addHistory('Added User',$user_unix_name);
+		db_commit();
+		return true;
+	}
+
+	/**
+	 *  removeUser() - controls removing a user from a group
+	 * 
+	 *  Users can remove themselves
+	 *
+	 *  @param	int		The ID of the user to remove
+	 *	@return true/false
+	 */ 
+	function removeUser($user_id) {
+
+		if ($user_id==user_getid()) {
+			//users can remove themselves
+			//everyone else must be a project admin
+		} else {
+//TODO should not assume logged in user only - $user should be passed in or $perm passed in
+			$perm =& $this->getPermission( session_get_user() );
+
+			if (!$perm || !is_object($perm) || !$perm->isAdmin()) {
+				$this->setError('You Are Not An Admin For This Group');
+				return false;
+			}
+		}
+		
+		$res=db_query("SELECT * FROM user_group ".
+			"WHERE group_id='".$this->getID()."' AND user_id='$user_id' AND admin_flags = 'A'");
+		if (db_numrows($res) > 0) {
+			$this->setError('Cannot remove admin');
+			return false;
+		}
+
+		db_begin();
+		$res=db_query("DELETE FROM user_group ".
+			"WHERE group_id='".$this->getID()."' AND user_id='$user_id' AND admin_flags <> 'A'");
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR: DB: User not removed.');
+			db_rollback();
+			return false;
+		} else {
+			//
+			//	remove them from artifact types
+			//
+			db_query("DELETE FROM artifact_perm 
+				WHERE group_artifact_id 
+				IN (SELECT group_artifact_id 
+				FROM artifact_group_list 
+				WHERE group_id='".$this->getID()."') 
+				AND user_id='$user_id'");
+
+			if (!sf_ldap_group_remove_user($this->getID(),$user_id)) {
+				$this->setError(sf_ldap_get_error_msg());
+				db_rollback();
+				return false;
+			}
+
+			//audit trail
+			$this->addHistory('removed user',$user_id);
+		}
+		db_commit();
+		return true;
+	}
+
+	/**	 
+	 *  updateUser() - controls updating a user's perms in this group
+	 *
+	 *	NOTE - bug_flags,patch_flags,support flags are deprecated
+	 *
+	 *  @param	int		The ID of the user
+	 *  @param	string	The admin flag for the user
+	 *  @param	int		The bug flag for the user  DEPRECATED
+	 *  @param	int		The forum flag for the user
+	 *  @param	int		The project flag for the user
+	 *  @param	int		The patch flag for the user  DEPRECATED
+	 *  @param	int		The support flag for the user  DEPRECATED
+	 *  @param	int		The doc flag for the user
+	 *  @param	int		The CVS flag for the user
+	 *  @param	int		The release flag for the user
+	 *	@param	int		The member role for the user
+	 *	@param	int		The artifact flags for the user
+	 *	@return true/false
+	 */	 
+	function updateUser($user_id,$admin_flags='',$bug_flags=1,$forum_flags=0,$project_flags=1,$patch_flags=1,$support_flags=1,$doc_flags=0,$cvs_flags=1,$release_flags=1,$member_role=100,$artifact_flags=0) {
+
+//TODO should not assume logged in user only - $user should be passed in or $perm passed in
+	$perm =& $this->getPermission( session_get_user() );
+
+	if (!$perm || !is_object($perm) || !$perm->isAdmin()) {
+			$this->setError('You Are Not An Admin For This Group');
+			return false;
+		}
+
+		if (user_getid() == $user_id) {
+			$admin_flags='A';
+		}
+
+		db_begin();
+		$res = db_query("UPDATE user_group SET
+			admin_flags='$admin_flags',
+			forum_flags='$forum_flags',
+			project_flags='$project_flags', 
+			doc_flags='$doc_flags', 
+			cvs_flags='$cvs_flags', 
+			release_flags='$release_flags', 
+			artifact_flags='$artifact_flags', 
+			member_role='$member_role' 
+			WHERE user_id='$user_id' AND group_id='". $this->getID() ."'");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR: Could Not Change Member Permissions: '.db_error());
+			db_rollback();
+			return false;
+		}
+
+		//
+		//	If user acquired admin access to CVS,
+		//	one to be given normal shell on CVS machine,
+		//	else - restricted.
+		//
+		if ($cvs_flags>1) {
+			if (!sf_ldap_user_set_attribute($user_id,"x-cvsShell","/bin/bash")) {
+				$this->setError(sf_ldap_get_error_msg());
+				db_rollback();
+				return false;
+			}
+		} else {
+			if (!sf_ldap_user_set_attribute($user_id,"x-cvsShell","/bin/cvssh")) {
+				$this->setError(sf_ldap_get_error_msg());
+				db_rollback();
+				return false;
+			}
+		}
+
+		//
+		//	If user acquired at least commit access to CVS,
+		//	one to be promoted to CVS group, else, demoted.
+		//
+		if ($cvs_flags>0) {
+			if (!sf_ldap_group_add_user($this->getID(),$user_id,1)) {
+				$this->setError(sf_ldap_get_error_msg());
+				db_rollback();
+				return false;
+			}
+		} else {
+			if (!sf_ldap_group_remove_user($this->getID(),$user_id,1)) {
+				$this->setError(sf_ldap_get_error_msg());
+				db_rollback();
+				return false;
+			}
+		}
+
+
+		db_commit();
+		return true;
+	}
+
+	/**
+	 *	addHistory() - Makes an audit trail entry for this project
+	 *
+	 *  @param	string	The name of the field
+	 *  @param	string	The Old Value for this $field_name
+	 *	@return database result handle
+	 *	@access public
+	 */
+	function addHistory($field_name, $old_value) {
+		$sql="
+			INSERT INTO group_history(group_id,field_name,old_value,mod_by,date) 
+			VALUES ('". $this->getID() ."','$field_name','$old_value','". user_getid() ."','".time()."')
+		";
+		return db_query($sql);
+	}		  
+
+	/**
+	 *	activateUsers() - Make sure that group members have unix accounts
+	 *
+	 *	Setup unix accounts for group members. Can be called even
+	 *	if members are already active. 
+	 *
+	 *	@access private
+	 *
+	 */
+	function activateUsers() {
+
+		/*
+			Activate member(s) of the project
+		*/
+
+		$member_res = db_query("
+			SELECT *
+			FROM users,user_group
+			WHERE user_group.group_id='".$this->getID()."'
+			AND users.user_id=user_group.user_id
+		");
+
+		$rows = db_numrows($member_res);
+
+		if ($rows > 0) {
+
+			for ($i=0; $i<$rows; $i++) {
+
+				$member =& user_get_object(db_result($member_res,$i,'user_id'));
+
+				if (!$member || !is_object($member)) {
+					$this->setError('Error getting member object');
+					return false;
+				} else if ($member->isError()) {
+					$this->setError('Error getting member object: '.$member->getErrorMessage());
+					return false;
+				}
+
+				if (!$this->addUser($member->getUnixName())) {
+					return false;
+				}
+			}
+
+		 }
+
+		 return true;
+	}
+
+	/**
+	 *	approve() - Approve pending project
+	 *
+	 *  @param	object	The User object
+	 *	@access public
+	 *
+	 */
+	function approve(&$user) {
+
+		if ($this->getStatus()=='A') {
+			$this->setError("Group already active");
+			return false;
+		}
+
+		db_begin();
+
+		// Step 1: Activate group and create LDAP entries
+		if (!$this->setStatus($user, 'A')) {
+			db_rollback();
+			return false;
+		}
+
+		// Step 2: Setup forums for this group
+		forum_create_forum($this->getID(),'Open Discussion',1,'General Discussion');
+		forum_create_forum($this->getID(),'Help',1,'Get Help');
+		forum_create_forum($this->getID(),'Developers',0,'Project Developer Discussion');
+
+		// Step 3: Setup default DocManager doc_group
+		db_query("
+			INSERT INTO doc_groups(groupname,group_id) 
+			VALUES ('Uncategorized Submissions',".$this->getID().")
+		");
+
+		// Step 4: Setup default filerelease package
+		$frs = new FRS($this->getID());
+		$frs->frsCreatePackage($this->getUnixName());
+
+		db_commit();
+
+		$this->sendApprovalEmail();
+		$this->addHistory('approved', 'x');
+
+		return true;
+	}
+
+
+
+	/**
+	 *	sendApprovalEmail() - Send new project email 
+	 *
+	 *	@return completion status
+	 *	@access public
+	 *
+	 */
+	function sendApprovalEmail() {
+
+		$res_admins = db_query("
+			SELECT users.user_name,users.email
+			FROM users,user_group
+			WHERE users.user_id=user_group.user_id
+			AND user_group.group_id='".$this->getID()."'
+			AND user_group.admin_flags='A'
+		");
+
+		if (db_numrows($res_admins) < 1) {
+			$this->setEror("Group does not have any administrators.");
+			return false;
+		}
+
+		// send one email per admin
+		while ($row_admins = db_fetch_array($res_admins)) {
+
+			$message = 
+'Your project registration for SourceForge has been approved. 
+
+Project Full Name:  '.$this->getPublicName().'
+Project Unix Name:  '.$this->getUnixName().'
+CVS Server:         cvs.'.$this->getUnixName().'.'.$GLOBALS['sys_default_domain'].'
+Shell/Web Server:   '.$this->getUnixName().'.'.$GLOBALS['sys_default_domain'].'
+
+Your DNS will take up to a day to become active on our site.
+While waiting for your DNS to resolve, you may try shelling into 
+'. $GLOBALS['sys_shell_host']. ' and pointing CVS to '. $GLOBALS['sys_cvs_host'].'.
+
+If after 6 hours your shell/CVS accounts still do not work, please
+open a support ticket so that we may take a look at the problem.
+Please note that all shell/CVS accounts are closed to telnet and only
+work with SSH1.
+
+Your web site is accessible through your shell account. Please read
+site documentation (see link below) about intended usage, available 
+services, and directory layout of the account.
+
+Please take some time to read the site documentation about project
+administration (http://'.$GLOBALS['sys_default_domain'].'/docs/site/). If you visit your 
+own project page in SourceForge while logged in, you will find 
+additional menu functions to your left labeled \'Project Admin\'. 
+
+We highly suggest that you now visit SourceForge and create a public
+description for your project. This can be done by visiting your project
+page while logged in, and selecting \'Project Admin\' from the menus
+on the left (or by visiting https://'.$GLOBALS['sys_default_domain'].'/project/admin/?group_id='.$this->getID().'
+after login).
+
+Your project will also not appear in the Trove Software Map (primary
+list of projects hosted on SourceForge which offers great flexibility in
+browsing and search) until you categorize it in the project administration 
+screens. So that people can find your project, you should do this now. 
+Visit your project while logged in, and select \'Project Admin\' from the 
+menus on the left.
+
+Enjoy the system, and please tell others about SourceForge. Let us know
+if there is anything we can do to help you.
+
+ -- the SourceForge crew';
+	
+			mail($row_admins['email'],"SourceForge Project Approved",$message,"From: noreply@$GLOBALS[HTTP_HOST]");
+			usleep(250000); // TODO: This is dirty. If sendmail required pause, let send_new... handle it
+
+		}
+
+		return true;
+	}
+
+
+	/*
+	 *	sendRejectionEmail() - Send project rejection email
+	 *
+	 *	This function sends out a rejection message to a user who
+	 *	registered a project.
+	 *
+	 *  @param	int		The id of the response to use
+	 *	@param	string	The rejection message
+	 *	@return completion status
+	 *	@access public
+	 *
+	 */
+	function sendRejectionEmail($response_id, $message="zxcv") {
+
+		// Get the email addr of the user who wants to register the project.
+		$email = db_result(db_query("
+			SELECT u.email AS email
+			FROM users u, user_group ug
+			WHERE ug.group_id='".$this->getID()."'
+			AND u.user_id=ug.user_id;
+		"), 0, "email");
+	
+		$response = 
+'Your project registration for SourceForge has been denied. 
+
+Project Full Name:  '.$this->getPublicName().'
+Project Unix Name:  '.$this->getUnixName().'
+
+Reasons for negative decision:
+
+';
+
+
+		// Check to see if they want to send a custom rejection response
+		if ($response_id == 0) {
+			$response .= $message;
+		} else {
+			$response .= db_result(db_query("
+				SELECT response_text
+				FROM canned_responses
+				WHERE response_id='$response_id'
+			"), 0, "response_text");
+		}
+
+		mail($email, "SourceForge Project Denied", $response, "From: noreply at sourceforge.net");
+
+		return true;
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/Permission.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/Permission.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/Permission.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,300 @@
+<?php
+/**
+ * A base permissions class.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+
+require_once('common/include/Error.class');
+
+$PERMISSION_OBJ=array();
+
+/**
+ * permission_get_object() - Get permission objects
+ *
+ * permission_get_object is useful so you can pool Permission objects/save database queries
+ * You should always use this instead of instantiating the object directly 
+ *
+ * @param		object	The Group in question
+ * @param		object	The User needing Permission
+ * @return a Permission or false on failure
+ *
+ */
+function &permission_get_object($_Group, $_User) {
+	//create a common set of Permission objects
+	//saves a little wear on the database
+	
+	global $PERMISSION_OBJ;
+
+	if (is_object($_Group)) {
+		$group_id = $_Group->getID();
+	} else {
+		$group_id = 0;
+	}
+
+	if (is_object($_User)) {
+		$user_id = $_User->getID();
+	} else {
+		//invalid object, probably from user not being logged in
+		$user_id = 0;
+	}
+
+	if (!isset($PERMISSION_OBJ["_".$group_id."_".$user_id])) {
+		$PERMISSION_OBJ["_".$group_id."_".$user_id]= new Permission($_Group, $_User);
+	}
+	return $PERMISSION_OBJ["_".$group_id."_".$user_id];
+}
+
+class Permission extends Error {
+	/**
+	 * Associative array of data from db
+	 *
+	 * @var array $data_array
+	 */
+	var $data_array;
+
+	/**
+	 * The Group object
+	 *
+	 * @var object $Group
+	 */
+	var $Group;
+
+	/**
+	 * The User object
+	 *
+	 * @var object $User
+	 */
+	var $User;
+
+	/**
+	 * Whether the user is an admin/super user of this project
+	 *
+	 * @var bool $is_admin
+	 */
+	var $is_admin=false;
+
+	/**
+	 * Whether the user is an admin/super user of the entire site
+	 *
+	 * @var bool $is_site_admin
+	 */
+	var $is_site_admin;
+
+	/**
+	 *	Constructor for this object
+	 *
+	 *	@param	object	Group Object required
+	 *	@param	object	User Object required
+	 *	
+	 */
+	function Permission (&$_Group, &$_User) {
+		if (!$_Group || !is_object($_Group)) {
+			$this->setError('No Valid Group Object');
+			return false;
+		}
+		if ($_Group->isError()) {
+			$this->setError('Permission: '.$_Group->getErrorMessage());
+			return false;
+		}
+		$this->Group =& $_Group;
+
+		if (!$_User || !is_object($_User)) {
+			$this->setError('No Valid User Object');
+			return false;
+		}   
+		if ($_User->isError()) {
+			$this->setError('Permission: '.$_User->getErrorMessage());
+			return false;
+		}   
+		$this->User =& $_User;
+
+		if (!$this->fetchData()) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	/**
+	 *  fetchData() - fetch the data for this Permission from the database
+	 *
+	 *  @return true/false
+	 *	@access private
+	 */
+	function fetchData() {
+		$res=db_query("SELECT * FROM user_group 
+			WHERE user_id='". $this->User->getID() ."' 
+			AND group_id='". $this->Group->getID() ."'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('Permission: User Not Found');
+
+			if ($this->setUpSuperUser()) {
+				return true;
+			}
+		} else {
+			$this->data_array =& db_fetch_array($res);
+			if (trim($this->data_array['admin_flags']) == 'A') {
+				$this->is_admin=true;
+			} else {
+				$this->setUpSuperUser();
+			}
+			db_free_result($res);
+			return true;
+		}
+	}
+
+	/**
+	 *	setUpSuperUser() - check to see if this User is a site super-user
+	 *
+	 *	@return true/false
+	 *	@access private
+	 */
+	function setUpSuperUser() {
+		//
+		//  see if they are a site super-user
+		//  if not a member of this group
+		//
+		if ($this->isSuperUser()) {
+			$this->clearError();
+			$this->is_admin = true;
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 *	getUser() - get the User object this Permission is associated with
+	 *
+	 *	@return the User object
+	 */
+	function &getUser() {
+		return $this->User;
+	}
+
+	/**
+	 *	getGroup() - get the Group object this ArtifactType is associated with
+	 *
+	 *	@return the Group object
+	 */
+	function &getGroup() {
+		return $this->Group;
+	}
+
+	/**
+	 *  isSuperUser() - whether the current user has site admin privilege
+	 *
+	 *  @return true/false
+	 */
+	function isSuperUser() {
+	        if (isset($this->is_site_admin)) {
+	        	return $this->is_site_admin;
+	        }
+
+		$res = db_query("SELECT * FROM user_group
+			WHERE user_id='". $this->User->getID() ."'
+			AND group_id='1'
+			AND admin_flags='A'");
+
+		if (!$res || db_numrows($res) < 1) {
+			$this->is_site_admin = false;
+		} else {
+			$this->is_site_admin = true;
+		}
+
+		db_free_result($res);
+		return $this->is_site_admin;
+	}
+
+	/**
+	 *  isForumAdmin() - whether the current user has form admin perms
+	 *
+	 *  @return true/false
+	 */
+	function isForumAdmin() {
+		return $this->isMember('forum_flags',2);
+	}
+
+	/**
+	 *  isDocEditor() - whether the current user has form doc editor perms
+	 *
+	 *  @return true/false
+	 */
+	function isDocEditor() {
+		return $this->isMember('doc_flags',1);
+	}
+
+	/**
+	 *  isReleaseTechnician() - whether the current user has FRS admin perms
+	 *
+	 *  @return true/false
+	 */
+	function isReleaseTechnician() {
+		return $this->isMember('release_flags',1);
+	}
+
+	/**
+	 *  useIsArtifactAdmin() - whether the current user has artifact admin perms
+	 *
+	 *  @return true/false
+	 */
+	function isArtifactAdmin() {
+		return $this->isMember('artifact_flags',2);
+	}
+
+	function isPMAdmin() {
+		return $this->isMember('project_flags',2);
+	}
+
+	/**
+	 *  isMember() - Simple test to see if the current user is a member of this project
+	 *
+	 *  Can optionally pass in vars to test other permissions
+	 *
+	 *  @param string	The field to check
+	 *  @param int		The value that $field should have
+	 *  @return true/false
+	 */
+	function isMember($field='user_id',$value='-1') {
+		if ($this->isAdmin()) {
+			//admins are tested first so that super-users can return true
+			//and admins of a project should always have full privileges 
+			//on their project
+			return true;
+		} else {
+			$arr =& $this->getPermData();
+			if ($arr[$field] >= $value) {
+				return true; 
+			} else {
+				return false;
+			}
+		}
+	}
+
+	/**
+	 *  userIsAdmin() - User is an admin of the project or admin of the entire site
+	 *
+	 *  @return true/false
+	 */
+	function isAdmin() {
+		return $this->is_admin;
+	}
+
+	/**
+	 *	getPermData() - returns the assocative array from the db
+	 *
+	 *	@return associative array
+	 *	@access private
+	 */
+	function &getPermData() {
+		return $this->data_array;
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/Project.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/Project.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/Project.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Project class
+ *
+ * An object wrapper for project (as opposed to foundry) data
+ * Extends the base object, Group
+ *
+ * Example of proper use:
+ *
+ *	//get a local handle for the object
+ *	$grp =& group_get_object($group_id);
+ *
+ *	//now use the object to get the unix_name for the project
+ *	$grp->getUnixName();
+ *
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id: Project.class,v 1.5 2001/06/06 21:30:03 dbrogdon Exp $
+ * @author Tim Perdue <tperdue at valinux.com>
+ * @date 2000-08-28
+ *
+ */
+
+class Project extends Group {
+
+	/**
+	 * An array containing project data.
+	 *
+	 * @var		array	$project_data_array
+	 */
+	var $project_data_array;
+
+	/**
+	 * Project() - Constructor
+	 * Basically just call the parent to set up everything
+	 *
+	 * @param	int		The project ID
+	 * @param	int		An optional database resource ID
+	 *
+	 */
+	function Project($id,$res=false) {
+		//echo "\n\nRows: ".db_numrows($res);
+		$this->Group($id,$res);
+
+		//for right now, just point our prefs 
+		//array at Group's data array
+		//this will change later when we split the
+		//project_data table off from groups table
+		$this->project_data_array=&$this->data_array;
+	}
+
+
+	/**
+	 * usesCVS() - Returns whether a project uses CVS
+	 * 
+	 */
+	function usesCVS() {
+		return $this->project_data_array['use_cvs'];
+	}
+
+	/**
+	 * usesPM() - Returns whether a project uses Project Manager
+	 *
+	 */
+	function usesPM() {
+		return $this->project_data_array['use_pm'];
+	}
+
+	/**
+	 * usesPmDependencies() - Returns whether a projected uses PM dependencies
+	 *
+	 */
+	function usesPmDependencies() {
+		return $this->project_data_array['use_pm_depend_box'];
+	}
+
+	/**
+	 * getNewTaskAddress() - Returns the default address to which new task submissions are sent
+	 *
+	 */
+	function getNewTaskAddress() {
+		return $this->project_data_array['new_task_address'];
+	}
+
+	/**
+	 * sendAllTaskUpdates() - Returns whether all task updates should be sent to the default address
+	 *
+	 * @see getNewTaskAddress()
+	 *
+	 */
+	function sendAllTaskUpdates() {
+		return $this->project_data_array['send_all_tasks'];
+	}
+}
+
+/**
+ * group_getname() - get the group name
+ *
+ * @param		int		The group ID
+ * @deprecated
+ *
+ */
+function group_getname ($group_id = 0) {
+	$grp = &group_get_object($group_id);
+	if ($grp) {
+		return $grp->getPublicName();
+	} else {
+		return 'Invalid';
+	}
+}
+
+/**
+ * group_getunixname() - get the unixname for a group
+ *
+ * @param		int		The group ID
+ * @deprecated
+ *
+ */
+function group_getunixname ($group_id) {
+	$grp = &group_get_object($group_id);
+	if ($grp) {
+		return $grp->getUnixName();
+	} else {
+		return 'Invalid';
+	}
+}
+
+/**
+ * group_get_result() - Get the group object result ID.
+ *
+ * @param		int		The group ID
+ * @deprecated
+ *
+ */
+function &group_get_result($group_id=0) {
+	$grp = &group_get_object($group_id);
+	if ($grp) {
+		return $grp->getData();
+	} else {
+		return 0;
+	}
+}       
+	
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/User.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/User.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/User.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,1119 @@
+<?php
+/**
+ * User class
+ *
+ * Sets up database results and preferences for a user and abstracts this info
+ *
+ *  You can now optionally pass in a db result
+ *  handle. If you do, it re-uses that query
+ *  to instantiate the objects
+ *
+ *  IMPORTANT! That db result must contain all fields
+ *  from users table or you will have problems
+ *
+ * GENERALLY YOU SHOULD NEVER INSTANTIATE THIS OBJECT DIRECTLY
+ * USE user_get_object() to instantiate properly - this will pool the objects
+ * and increase efficiency
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ * @author Tim Perdue tperdue at valinux.com
+ * @date 2000-10-11
+ *
+ */
+
+require_once('www/include/vote_function.php');
+$USER_OBJ=array();
+
+/**
+ * user_get_object_by_name() - Get User object by username.
+ *  user_get_object is useful so you can pool user objects/save database queries
+ *  You should always use this instead of instantiating the object directly 
+ *
+ *  @param		string	The unix username - required
+ *  @param		int		The result set handle ("SELECT * FROM USERS WHERE user_id=xx")
+ *  @return a user object or false on failure
+ *
+ */
+function &user_get_object_by_name($user_name,$res=false) {
+	$user_name = strtolower($user_name);
+	if (!$res) {
+		$res=db_query("SELECT * FROM users WHERE user_name='$user_name'");
+	}
+	return user_get_object(db_result($res,0,'user_id'),$res);
+}
+
+/**
+ * user_get_object() - Get User object by user ID.
+ *  user_get_object is useful so you can pool user objects/save database queries
+ *  You should always use this instead of instantiating the object directly 
+ *
+ *  @param		int		The ID of the user - required
+ *  @param		int		The result set handle ("SELECT * FROM USERS WHERE user_id=xx")
+ *  @return a user object or false on failure
+ *
+ */
+function &user_get_object($user_id,$res=false) {
+	//create a common set of group objects
+	//saves a little wear on the database
+	
+	//automatically checks group_type and 
+	//returns appropriate object
+	
+	global $USER_OBJ;
+	if (!isset($USER_OBJ["_".$user_id."_"])) {
+		if ($res) {
+			//the db result handle was passed in
+		} else {
+			$res=db_query("SELECT * FROM users WHERE user_id='$user_id'");
+		}
+		if (!$res || db_numrows($res) < 1) {
+			$USER_OBJ["_".$user_id."_"]=false;
+		} else {
+			$USER_OBJ["_".$user_id."_"]= new User($user_id,$res);
+		}
+	}
+	return $USER_OBJ["_".$user_id."_"];
+}
+
+class User extends Error {
+	/** 
+	 * Associative array of data from db
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+	
+	/**
+	 * The User ID
+	 *
+	 * @var		int		$user_id
+	 */
+	var $user_id;
+	
+	/**
+	 * Database result set handle
+	 *
+	 * @var		int		$db_result
+	 */
+	var $db_result;
+
+	/**
+	 * Is this person a site super-admin?
+	 *
+	 * @var		bool	$is_super_user
+	 */
+	var $is_super_user;
+
+	/**
+	 * Is this person the logged in user?
+	 *
+	 * @var		bool	$is_logged_in
+	 */
+	var $is_logged_in;
+
+	/**
+	 * Array of preferences
+	 *
+	 * @var		array	$user_pref
+	 */
+	var $user_pref;
+
+	/**
+	 *	User($id,$res) - CONSTRUCTOR - GENERALLY DON'T USE THIS
+	 *
+	 *	instead use the user_get_object() function call
+	 *
+	 *	@param	int		The user_id
+	 *	@param	int		The database result set
+	 */
+	function User($id=false,$res=false) {
+		$this->Error();
+		if (!$id) {
+			//setting up an empty object
+			//probably going to call create()
+			return true;
+		}
+		$this->user_id=$id;
+		if (!$res) {
+			$this->db_result=db_query("SELECT * FROM users WHERE user_id='$id'");
+		} else {
+			$this->db_result=$res;
+		}
+		if (db_numrows($this->db_result) < 1) {
+			//function in class we extended
+			$this->setError('User Not Found');
+			$this->data_array=array();
+			return false;
+		} else {
+			//set up an associative array for use by other functions
+			
+			db_reset_result($this->db_result);
+			
+			$this->data_array =& db_fetch_array($this->db_result);
+		}
+		$this->user_id=$this->data_array['user_id'];
+		$this->is_super_user=false;
+		$this->is_logged_in=false;
+		return true;
+	}
+	
+	/**
+	 * create() - Create a new user
+	 *
+	 * @param	string	The unix username 
+	 * @param	string	The real username
+	 * @param	string	The first password 
+	 * @param	string	The confirmation password 
+	 * @param	string	The users email address
+	 * @param	string	The users preferred default language
+	 * @param	string	The users preferred default timezone
+	 * @param	string	The users preference for receiving site updates by email
+	 * @param	string	The users preference for receiving community updates by email
+	 * @param	int		The ID of the language preference
+	 * @param	string	The users preferred timezone
+	 * @returns The newly created user ID
+	 *
+	 */
+	function create($unix_name,$realname,$password1,$password2,$email,
+		$mail_site,$mail_va,$language_id,$timezone) {
+		if (!$unix_name) {
+			$this->setError('You must supply a username');
+			return false;
+		}
+		if (!$realname) {
+			$this->setError('You must supply a real name');
+			return false;
+		}
+		if (!$password1) {
+			$this->setError('You must supply a password');
+			return false;
+		}
+		if ($password1 != $password2) {
+			$this->setError('Passwords do not match');
+			return false;
+		}
+		if (!account_pwvalid($password1)) {
+			$this->setError('Password must be at least 6 characters');
+			return false;
+		}
+		$unix_name=strtolower($unix_name);
+		if (!account_namevalid($unix_name)) {
+			$this->setError('Invalid Unix Name. ');
+			return false;
+		}
+		if (!validate_email($email)) {
+			$this->setError('Invalid Email Address');
+			return false;
+		}
+		if (db_numrows(db_query("SELECT user_id FROM users WHERE user_name LIKE '$unix_name'")) > 0) {
+			$this->setError('That username already exists.');
+			return false;
+		}
+		if ($GLOBALS['sys_require_unique_email']) {
+			if (db_numrows(db_query("SELECT user_id FROM users WHERE email='$email'")) > 0) {
+				$this->setError('User with this email already exists - use people search to recover your login.');
+				return false;
+			}
+		}
+		// if we got this far, it must be good
+		$confirm_hash = substr(md5($session_hash . $password1 . time()),0,16);
+		$result=db_query("INSERT INTO users (user_name,user_pw,unix_pw,realname,email,add_date,
+			status,confirm_hash,mail_siteupdates,mail_va,language,timezone) 
+			VALUES ('$unix_name',
+			'". md5($password1) . "',
+			'". account_genunixpw($password1) . "',
+			'". "$realname',
+			'$email',
+			'" . time() . "',
+			'P',
+			'$confirm_hash',
+			'". (($mail_site)?"1":"0") . "',
+			'". (($mail_va)?"1":"0") . "',
+			'$language_id',
+			'$timezone')");
+
+		$this->user_id = db_insertid($result,'users','user_id');
+	
+		if (!$result || !$this->user_id) {
+			$this->setError('Insert Failed '.db_error());
+			return false;
+		} else {
+
+			// send mail
+			$this->refreshUserData();
+
+			$this->sendRegistrationEmail();
+
+			return $this->user_id;
+		}
+	}
+
+	/**
+	 *	sendRegistrationEmail() - Send email for registration verification
+	 *
+	 *	@return true or false
+	 */
+	function sendRegistrationEmail() {
+		$message = "Thank you for registering on the SourceForge web site. You have\n"
+		. "account with username '".$this->getUnixName()."' created for you. In order\n"
+		. "to complete your registration, visit the following url: \n\n"
+		. "<https://". $GLOBALS['sys_default_domain'] ."/account/verify.php?confirm_hash=_".$this->getConfirmHash().">\n\n"
+		. "(If you don't see any URL above, it is likely due to bug in your mail client.\n"
+		. "Use one below, but make sure it is entered as the single line.)\n\n"
+		. "https://". $GLOBALS['sys_default_domain']."/account/verify.php?confirm_hash=_".$this->getConfirmHash()."\n\n"
+		. "Enjoy the site.\n\n"
+		. " -- the SourceForge staff\n";
+
+		mail(
+			$this->getEmail(),
+			"SourceForge Account Registration",
+			$message,
+			"From: noreply@".$GLOBALS['sys_default_domain']
+		);
+	}
+
+	/**
+	 *	update() - update *common* properties of User object
+	 *
+	 *	Use specific setter to change other properties
+	 *
+	 *  @param	string	The users real name
+	 *  @param	int		The ID of the users language preference
+	 *  @param	string	The useres timezone preference
+	 *  @param	string	The users preference for receiving site updates by email
+	 *  @param	string	The users preference for receiving community updates by email
+	 */
+	function update($realname,$language_id,$timezone,$mail_site,$mail_va,$use_ratings) {
+		$mail_site = $mail_site ? 1 : 0;
+		$mail_va   = $mail_va   ? 1 : 0;
+		$block_ratings = !$use_ratings;
+
+		$res = db_query("
+			UPDATE users
+			SET
+			realname='$realname',
+			language='$language_id',
+			timezone='$timezone',
+			mail_siteupdates=$mail_site,
+			mail_va=$mail_va,
+			block_ratings='$block_ratings'
+			WHERE user_id='".$this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User Object: '.db_error());
+			return false;
+		} else {
+			// If there's a transaction from using to not
+			// using ratings, remove all rating made by the
+			// user (ratings by others should not be removed,
+			// as it opens possibility to abuse rate system)
+			if (!$use_ratings && $this->usesRatings()) {
+				vote_remove_all_ratings_by($this->getID());
+			}
+			$this->refreshUserData();
+			return true;
+		}
+	}
+
+	/**
+	 *	getData() - Return database result handle for direct access
+	 *
+	 *	Generally should NOT be used - here for supporting deprecated group.php
+	 *	@return database result set handle
+	 */
+	function getData() {
+		db_reset_result($this->db_result);
+		return $this->db_result;
+	}
+
+	/**
+	 *	refreshUserData() - May need to refresh database fields
+	 *
+	 *	if an update occurred and you need to access the updated info
+	 */
+	function refreshUserData() {
+		$this->db_result=db_query("SELECT * FROM users WHERE user_id='". $this->getID() ."'");
+		$this->data_array=db_fetch_array($this->db_result);
+		return $this->db_result;
+	}
+	
+	/**
+	 *	getID() - Simply return the user_id for this object
+	 *
+	 *	@return this user's user_id number
+	 */
+	function getID() {
+		return $this->user_id;
+	}
+
+	/**
+	 *	getStatus()
+	 *
+	 *	Statuses include (A)ctive, (P)ending, (S)uspended ,(D)eleted
+	 *
+	 *	@return this user's status flag
+	 */
+	function getStatus() {
+		return $this->data_array['status'];
+	}
+
+	/**
+	 *	setStatus()
+	 *
+	 *	@param	string	Status - P, A, S, or D
+	 *	@sets user status
+	 */
+	function setStatus($status) {
+
+		if ($status != 'P' && $status != 'A'
+		    && $status != 'S' && $status != 'D') {
+			$this->setError('ERROR: Invalid status value');
+			return false;
+		}
+
+		db_begin();
+		$res=db_query("
+			UPDATE users 
+			SET status='$status' 
+			WHERE user_id='". $this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User Status: '.db_error());
+			db_rollback();
+			return false;
+		} else {
+			$this->data_array['status']=$status;
+			if ($status == 'D') {
+				// Remove this user from all groups
+				$res = db_query("
+					DELETE FROM user_group
+					WHERE user_id='".$this->getID()."'
+				");
+				if (!$res) {
+					$this->setError('ERROR - Could Not Propogate Deleted Status: '.db_error());
+					db_rollback();
+					return false;
+				}
+			}
+			db_commit();
+			return true;
+		}
+	}
+
+	/**
+	 *	isActive()
+	 *
+	 *	Database field status of 'A' returns true
+	 *	@return true or false
+	 */
+	function isActive() {
+		if ($this->getStatus()=='A') {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 *	getUnixStatus() - Status of activation of unix account
+	 *
+	 *	@return (N)one, (A)ctive, (S)uspended or (D)eleted
+	 */
+	function getUnixStatus() {
+		return $this->data_array['unix_status'];
+	}
+
+	/**
+	 *	setUnixStatus() - Sets status of activation of unix account
+	 *
+	 *  @param	string	The unix tatus
+	 *	@return true/false
+	 */
+	function setUnixStatus($status) {
+		db_begin();
+		$res=db_query("
+			UPDATE users 
+			SET unix_status='$status' 
+			WHERE user_id='". $this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User Unix Status: '.db_error());
+			db_rollback();
+			return false;
+		} else {
+			if ($status == 'A') {
+				if (!sf_ldap_check_create_user($this->getID())) {
+					$this->setError(sf_ldap_get_error_msg());
+					db_rollback();
+					return false;
+				}
+			} else {
+				if (sf_ldap_check_user($this->getID())) {
+					if (!sf_ldap_remove_user($this->getID())) {
+						$this->setError(sf_ldap_get_error_msg());
+						db_rollback();
+						return false;
+					}
+				}
+			}
+			
+			$this->data_array['unix_status']=$status;
+			db_commit();
+			return true;
+		}
+	}
+
+	/**
+	 *	getUnixName()
+	 *
+	 *	@return this user's unix/login name
+	 */
+	function getUnixName() {
+		return strtolower($this->data_array['user_name']);
+	}
+
+	/**
+	 *	getUnixPasswd()
+	 *
+	 * 	@return this user's unix crypted passwd
+	 */
+	function getUnixPasswd() {
+		return $this->data_array['unix_pw'];
+	}
+
+	/**
+	 *	getUnixBox()
+	 *
+	 * 	@return this user's shell login machine
+	 */
+	function getUnixBox() {
+		return $this->data_array['unix_box'];
+	}
+
+	/**
+	 *	getMD5Passwd()
+	 *
+	 *	@return this user's MD5-crypted passwd
+	 */
+	function getMD5Passwd() {
+		return $this->data_array['user_pw'];
+	}
+
+	/**
+	 *	getConfirmHash()
+	 *
+	 *	@return this user's confirmation hash
+	 */
+	function getConfirmHash() {
+		return $this->data_array['confirm_hash'];
+	}
+
+	/**
+	 *	getEmail()
+	 *
+	 *	@return this user's email address
+	 */
+	function getEmail() {
+		return $this->data_array['email'];
+	}
+
+	/**
+	 *	getNewEmail()
+	 *
+	 *	getNewEmail is a private operation for email change
+	 *
+	 *	@return this user's new (not yet confirmed) email address
+	 *	@private
+	 */
+	function getNewEmail() {
+		return $this->data_array['email_new'];
+	}
+
+	/**
+	 *	setEmail()
+	 *
+	 *  @param	string	The email address
+	 *	@sets user's email address
+	 */
+	function setEmail($email) {
+		if (!$email || !validate_email($email)) {
+			$this->setError('ERROR: Invalid Email');
+			return false;
+		}
+		$res=db_query("
+			UPDATE users 
+			SET email='$email' 
+			WHERE user_id='". $this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User Email: '.db_error());
+			return false;
+		} else {
+			$this->data_array['email'] = $email;
+			return true;
+		}
+	}
+
+	/**
+	 *	setNewEmailAndHash()
+	 *
+	 *	setNewEmailAndHash is a private operation for email change
+	 *
+	 *  @param	string	The email address
+	 *  @param	string	The emial hash
+	 *	@sets record of user's new email address and confirmation hash
+	 */
+	function setNewEmailAndHash($email, $hash='') {
+
+		if (!$hash) {
+			$hash = substr(md5(strval(time()) . strval(mt_rand())), 0, 16);
+		}
+
+		if (!$email || !validate_email($email)) {
+			$this->setError('ERROR - Invalid Email');
+			return false;
+		}
+
+		$res=db_query("
+			UPDATE users
+			SET confirm_hash='$hash',
+			email_new='$email'
+			WHERE user_id='".$this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User Email And Hash: '.db_error());
+			return false;
+		} else {
+			$this->data_array['email_new']	= $email;
+			$this->data_array['confirm_hash'] = $hash;
+			return true;
+		}
+	}
+
+	/**
+	 *	getRealName()
+	 *
+	 *	@return this user's real name
+	 */
+	function getRealName() {
+		return $this->data_array['realname'];
+	}
+
+	/**
+	 *	getAddDate()
+	 *
+	 *	@return this user's unix time since account was opened
+	 */
+	function getAddDate() {
+		return $this->data_array['add_date'];
+	}
+
+	/**
+	 *	getTimeZone()
+	 *
+	 *	@return this user's timezone setting
+	 */
+	function getTimeZone() {
+		return $this->data_array['timezone'];
+	}
+
+	/**
+	 *	getShell()
+	 *
+	 *	@return this user's preferred shell
+	 */
+	function getShell() {
+?><?php
+		return $this->data_array['shell'];
+	}
+
+	/**
+	 *	setShell()
+	 *
+	 *  @param	string	The users preferred shell
+	 *	@sets user's preferred shell
+	 */
+	function setShell($shell) {
+		$shells = file('/etc/shells');
+		$out_shells = array();
+		foreach ($shells as $s) {
+			if (substr($s, 0, 1) == '#') {
+				continue;
+			}
+			$out_shells[] = chop($s);
+		}
+		if (!in_array($shell, $out_shells)) {
+			$this->setError('ERROR: Invalid Shell');
+			return false;
+		}
+
+		db_begin();
+		$res=db_query("
+			UPDATE users 
+			SET shell='$shell' 
+			WHERE user_id='". $this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User Unix Shell: '.db_error());
+			db_rollback();
+			return false;
+		} else {
+			// Now change LDAP attribute, but only if corresponding
+			// entry exists (i.e. if user have shell access)
+			if (sf_ldap_check_user($this->getID()))
+			{
+				if (!sf_ldap_user_set_attribute($this->getID(),"loginShell",$shell)) {
+					$this->setError(sf_ldap_get_error_msg());
+					db_rollback();
+					return false;
+				}
+			}
+			$this->data_array['shell']=$shell;
+		}
+		db_commit();
+		return true;
+	}
+
+	/**
+	 *	getUnixUid()
+	 *
+	 *	@return this user's unix_uid
+	 */
+	function getUnixUID() {
+		return $this->data_array['unix_uid'];
+	}
+
+	/**
+	 *	getLanguage()
+	 *
+	 *	@return this user's language_id
+	 */
+	function getLanguage() {
+		return $this->data_array['language'];
+	}
+
+	/**
+	 *	getAuthorizedKeys()
+	 *
+	 *	@return this user's SSH authorized (public) keys
+	 */
+	function getAuthorizedKeys() {
+		return ereg_replace("###", "\n", $this->data_array['authorized_keys']);
+	}
+
+	/**
+	 *	setAuthorizedKeys()
+	 *
+	 *	@param	string	The users public keys
+	 *	@sets this user's SSH authorized (public) keys
+	 */
+	function setAuthorizedKeys($keys) {
+		$keys = trim($keys);
+		$keys = ereg_replace("(\r\n)|(\n)", "###", $keys);
+
+		$res=db_query("
+			UPDATE users 
+			SET authorized_keys='$keys'
+			WHERE user_id='".$this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User SSH Keys: '.db_error());
+			return false;
+		} else {
+			$this->data_array['authorized_keys']=$keys;
+			return true;
+		}
+	}
+
+	/**
+	 *	getAuthorizedKeys()
+	 *
+	 *	@return this user's SSH authorized (public) keys
+	 */
+	function getAuthorizedKeys() {
+		return ereg_replace("###", "\n", $this->data_array['authorized_keys']);
+	}
+
+	/**
+	 *	setAuthorizedKeys()
+	 *
+	 *  @param	string	The users public keys
+	 *	@sets this user's SSH authorized (public) keys
+	 */
+	function setAuthorizedKeys($keys) {
+		$keys = trim($keys);
+		$keys = ereg_replace("(\r\n)|(\n)", "###", $keys);
+
+		$res=db_query("
+			UPDATE users 
+			SET authorized_keys='$keys'
+			WHERE user_id='".$this->getID()."'
+		");
+
+		if (!$res) {
+			$this->setError('ERROR - Could Not Update User SSH Keys');
+			return false;
+		} else {
+			$this->data_array['authorized_keys'] = $keys;
+			return true;
+		}
+	}
+
+	/**
+	 *	setLoggedIn($val) - Really only used by session code
+	 *
+	 * 	@param	bool	The session value
+	 */
+	function setLoggedIn($val=true) {
+		$this->is_logged_in=$val;
+		if ($val) {
+			//if this is the logged in user - 
+			//see if they are a super user
+			$sql="SELECT * FROM user_group ".
+				"WHERE user_id='". $this->getID() ."' AND group_id='1' AND admin_flags='A'";
+			$result=db_query($sql);
+			if (!$result || db_numrows($result) < 1) {
+				$this->is_super_user=false;
+			} else {
+				$this->is_super_user=true;
+			}
+		}
+	}
+
+	/**
+	 *	isLoggedIn()
+	 *
+	 *	@return true or false
+	 */
+	function isLoggedIn() {
+		return $this->is_logged_in;
+	}
+
+	/**
+	 *	setPreference($preference_name,$value)
+	 *
+	 *	@param	string	Tthe unique field name for this preference
+	 *	@param	string	The value you are setting this preference to
+	 *	@return true or false on failure
+	 */
+	function setPreference($preference_name,$value) {
+		$preference_name=strtolower(trim($preference_name));
+		$result=db_query("UPDATE user_preferences SET preference_value='$value',set_date='". time() ."' ".
+			"WHERE user_id='". $this->getID() ."' ".
+			"AND preference_name='$preference_name'");
+		if (db_affected_rows($result) < 1) {
+			//echo db_error();
+			$result=db_query("INSERT INTO user_preferences (user_id,preference_name,preference_value,set_date) ".
+				"VALUES ('". $this->getID() ."','$preference_name','$value','". time() ."')");
+			return $result;
+		}
+	}
+
+	/**
+	 *	getPreference($preference_name)
+	 *
+	 *	@param	string	The unique field name for this preference
+	 *	@return the preference or false on failure
+	 */
+	function getPreference($preference_name) {
+		$preference_name=strtolower(trim($preference_name));
+		/*
+			First check to see if we have already fetched the preferences
+		*/
+		if ($this->user_pref) {
+			//echo "\n\nPrefs were fetched already";
+			if ($this->user_pref["$preference_name"]) {
+				//we have fetched prefs - return part of array
+				return $this->user_pref["$preference_name"];
+			} else {
+				//we have fetched prefs, but this pref hasn't been set
+				return false;
+			}
+		} else {
+			//we haven't returned prefs - go to the db
+			$result=db_query("SELECT preference_name,preference_value FROM user_preferences ".
+				"WHERE user_id='". $this->getID() ."'");
+			if (db_numrows($result) < 1) {
+				//echo "\n\nNo Prefs Found";
+				return false;
+			} else {
+				$pref=array();
+				//iterate and put the results into an array
+				for ($i=0; $i<db_numrows($result); $i++) {
+					$pref["".db_result($result,$i,'preference_name').""]=db_result($result,$i,'preference_value');
+				}
+				$this->user_pref =& $pref;
+
+				if ($this->user_pref["$preference_name"]) {
+					//we have fetched prefs - return part of array
+					return $this->user_pref["$preference_name"];
+				} else {
+					//we have fetched prefs, but this pref hasn't been set
+					return false;
+				}
+			}
+		}
+	}
+
+	/**
+	 *	setUpUnixUID() - Sets up this user's unix_uid for shell access
+	 *
+	 *	@return true on success false on failure
+	 */
+	function setUpUnixUID() {
+		global $sys_database_type;
+		if ($this->getUnixUID() > 1) {
+			//
+			//	already have unix_uid
+			//
+			return true;
+		}
+		//get the next unix uid
+
+		/*
+			hack to simulate sequences in mysql
+		*/
+		if ($sys_database_type=='mysql') {
+			$res=db_query("INSERT INTO unix_uids (id) values ('')");
+			$unixid=db_insertid($res,'unix_uids','id');
+			db_free_result($res);
+		} else {
+			$res=db_query("SELECT nextval('unix_uid_seq')");
+			$unixid=db_result($res,0,0);
+			db_free_result($res);
+		}
+		if (!$unixid) {
+			$this->setError('ERROR - Could Not Get Next Unix UID');
+			return false;
+		} else {
+			$res=db_query("
+				UPDATE users 
+				SET unix_status='A',unix_uid='$unixid' 
+				WHERE user_id='". $this->getID()."'
+			");
+
+			if (!$res || db_affected_rows($res) < 1) {
+				$this->setError('ERROR - Could Not Update User Account Flags: '.db_error());
+				return false;
+			} else {
+				$this->data_array['unix_uid'] = $unixid;
+				return true;
+			}
+		}
+	}
+	
+	/**
+	 *	setPasswd($passwd) - Changes user's password
+	 *
+	 *	@param	string	The plaintext password
+	 *	@return true on success false on failure
+	 */
+	function setPasswd($passwd) {
+	        if (!account_pwvalid($passwd)) {
+	        	$this->setError('Error: '.$GLOBALS['register_error']);
+			return false;
+	        }
+
+		db_begin();
+		$unix_pw = account_genunixpw($passwd);
+
+		$res=db_query("
+			UPDATE users
+			SET user_pw='" . md5($passwd) . "',
+				unix_pw='$unix_pw'
+			WHERE user_id='".$this->getID()."'
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ERROR - Could Not Change User Password: '.db_error());
+			db_rollback();
+			return false;
+		} else {
+			// Now change LDAP password, but only if corresponding
+			// entry exists (i.e. if user have shell access)
+			if (sf_ldap_check_user($this->getID()))
+			{
+				if (!sf_ldap_user_set_attribute($this->getID(),"userPassword",'{crypt}'.$unix_pw)) {
+					$this->setError(sf_ldap_get_error_msg());
+					db_rollback();
+					return false;
+				}
+			}
+		}
+		db_commit();
+		return true;
+	}
+
+	/**
+	 *	usesRatings() - whether user participates in rating system
+	 *
+	 *	@return true/false
+	 */
+	function usesRatings() {
+		return !$this->data_array['block_ratings'];
+	}
+
+	/**
+	 *	getMailingsPrefs($mailing_id) - Get activity status for one of the site mailings
+	 *
+	 *	@param	string	The id of mailing ('mail_va' for community mailings, 'mail_siteupdates' for site mailings)
+	 *	@return true/false
+	 */
+	function getMailingsPrefs($mailing_id) {
+		if ($mailing_id=='va') {
+			return $this->data_array['mail_va'];
+		} else if ($mailing_id=='site') {
+			return $this->data_array['mail_siteupdates'];
+		} else {
+			return 0;
+		}
+	}
+
+	/**
+	 *	unsubscribeFromMailings($all) - Disable email notifications for user
+	 *
+	 *	@param	bool	If false, disable general site mailings, else - all
+	 *	@return true on success false on failure
+	 */
+	function unsubscribeFromMailings($all=false) {
+		$res1 = $res2 = $res3 = true;
+		$res1 = db_query("
+			UPDATE users
+			SET mail_siteupdates=0,
+				mail_va=0
+			WHERE user_id='".$this->getID()."'
+		");
+		if ($all) {
+			$res2 = db_query("
+				DELETE FROM forum_monitored_forums
+				WHERE user_id='".$this->getID()."'
+			");
+			$res3 = db_query("
+				DELETE FROM filemodule_monitor
+				WHERE user_id='".$this->getID()."'
+			");
+		}
+
+		return $res1 && $res2 && $res3;
+	}
+
+}
+
+/*
+
+
+
+
+		EVERYTHING BELOW HERE IS DEPRECATED
+
+
+		DO NOT USE FOR ANY NEW CODE
+
+
+
+*/
+
+
+
+/**
+ * user_ismember() - DEPRECATED; DO NOT USE!
+ *
+ * @param		int		The Group ID
+ * @param		int		The Type
+ * @deprecated
+ *
+ */
+function user_ismember($group_id,$type=0) {
+	if (!user_isloggedin()) {
+		return false;
+	}
+
+	$project =& group_get_object($group_id);
+
+	if (!$project || !is_object($project)) {
+			return false;
+	}
+
+	$perm =& $project->getPermission( session_get_user() );
+	if (!$perm || !is_object($perm) || !$perm->isMember()) {
+		return false;
+	}
+
+	$type=strtoupper($type);
+	
+	switch ($type) {
+		case 'P2' : {
+			//pm admin
+			return $perm->isPMAdmin();
+			break; 
+		}
+		case 'F2' : {
+			//forum admin
+			return $perm->isForumAdmin();
+			break; 
+		}
+		case '0' : {
+			//just in this group
+			return $perm->isMember();
+			break;
+		}
+		case 'A' : {
+			//admin for this group
+			return $perm->isAdmin();
+			break;
+		}
+		case 'D1' : {
+			//document editor
+			return $perm->isDocEditor();
+			break;
+		}
+		default : {
+			//fubar request
+			return false;
+		}
+	}
+	return false;
+}
+
+/**
+ * user_getname() - DEPRECATED; DO NOT USE!
+ *
+ * @param		int		The User ID
+ * @deprecated
+ *
+ */
+function user_getname($user_id = false) {
+	// use current user if one is not passed in
+	if (!$user_id) {
+		if (user_isloggedin()) {
+			$user=&user_get_object(user_getid());
+			if ($user) {
+				return $user->getUnixName();
+			} else {
+				return 'Error getting user';
+			}
+		} else {
+			return 'No User Id';
+		}
+	} else {
+		$user=&user_get_object($user_id);
+		if ($user) {
+			return $user->getUnixName();
+		} else {
+			return 'Invalid User';
+		}
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/account.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/account.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/account.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,203 @@
+<?php
+/**
+ * account.php - A library of common account management functions.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+
+/**
+ * account_pwvalid() - Validates a password
+ *
+ * @param		string	The plaintext password string
+ * @returns		true on success/false on failure
+ *
+ */
+function account_pwvalid($pw) {
+	if (strlen($pw) < 6) {
+		$GLOBALS['register_error'] = "Password must be at least 6 characters.";
+		return 0;
+	}
+	return 1;
+}
+
+/**
+ * account_namevalid() - Validates a login username
+ *
+ * @param		string	The username string
+ * @returns		true on success/false on failure
+ *
+ */
+function account_namevalid($name) {
+	// no spaces
+	if (strrpos($name,' ') > 0) {
+		$GLOBALS['register_error'] = "There cannot be any spaces in the login name.";	
+		return 0;
+	}
+
+	// min and max length
+	if (strlen($name) < 3) {
+		$GLOBALS['register_error'] = "Name is too short. It must be at least 3 characters.";
+		return 0;
+	}
+	if (strlen($name) > 15) {
+		$GLOBALS['register_error'] = "Name is too long. It must be less than 15 characters.";
+		return 0;
+	}
+
+	if (!ereg('^[a-z][-a-z0-9_]+$', $name)) {
+		$GLOBALS['register_error'] = "Illegal character in name.";
+		return 0;
+	}
+
+	// illegal names
+	if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(news)"
+		. "|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)"
+		. "|(www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$",$name)) {
+		$GLOBALS['register_error'] = "Name is reserved.";
+		return 0;
+	}
+	if (eregi("^(anoncvs_)",$name)) {
+		$GLOBALS['register_error'] = "Name is reserved for CVS.";
+		return 0;
+	}
+		
+	return 1;
+}
+
+/**
+ * account_groupnamevalid() - Validates an account group name
+ *
+ * @param		string	The group name string
+ * @returns		true on success/false on failure
+ *
+ */
+function account_groupnamevalid($name) {
+	if (!account_namevalid($name)) return 0;
+	
+	// illegal names
+	if (eregi("^((www[0-9]?)|(cvs[0-9]?)|(shell[0-9]?)|(ftp[0-9]?)|(irc[0-9]?)|(news[0-9]?)"
+		. "|(mail[0-9]?)|(ns[0-9]?)|(download[0-9]?)|(pub)|(users)|(compile)|(lists)"
+		. "|(slayer)|(orbital)|(tokyojoe)|(webdev)|(projects)|(cvs)|(slayer)|(monitor)|(mirrors?))$",$name)) {
+		$GLOBALS['register_error'] = "Name is reserved for DNS purposes.";
+		return 0;
+	}
+
+	if (eregi("_",$name)) {
+		$GLOBALS['register_error'] = "Group name cannot contain underscore for DNS reasons.";
+		return 0;
+	}
+
+	return 1;
+}
+
+/**
+ * rannum() - Generate a random number
+ * 
+ * This is a local function used for account_salt()
+ *
+ * @return int $num A random number
+ *
+ */
+function rannum(){	     
+	mt_srand((double)microtime()*1000000);		  
+	$num = mt_rand(46,122);		  
+	return $num;		  
+}	     
+
+/**
+ * genchr() - Generate a random character
+ * 
+ * This is a local function used for account_salt()
+ *
+ * @return int $num A random character
+ *
+ */
+function genchr(){
+	do {	  
+		$num = rannum();		  
+	} while ( ( $num > 57 && $num < 65 ) || ( $num > 90 && $num < 97 ) );	  
+	$char = chr($num);	  
+	return $char;	  
+}	   
+
+/**
+ * account_gensalt() - A random salt generator
+ *
+ * @returns The random salt string
+ *
+ */
+function account_gensalt(){
+
+	$a = genchr(); 
+	$b = genchr();
+	$salt = "$1$" . "$a$b";
+	return $salt;	
+}
+
+/**
+ * account_genunixpw() - Generate unix password
+ *
+ * @param		string	The plaintext password string
+ * @return		The encrypted password
+ *
+ */
+function account_genunixpw($plainpw) {
+	return crypt($plainpw,account_gensalt());
+}
+
+/**
+ * account_shellselects() - Print out shell selects
+ *
+ * @param		string	The current shell
+ *
+ */
+function account_shellselects($current) {
+	$shells = file("/etc/shells");
+
+	for ($i = 0; $i < count($shells); $i++) {
+		$this_shell = chop($shells[$i]);
+
+		if ($current == $this_shell) {
+			echo "<option selected value=$this_shell>$this_shell</option>\n";
+		} else {
+			echo "<option value=$this_shell>$this_shell</option>\n";
+		}
+	}
+}
+
+/**
+ *	account_user_homedir() - Returns full path of user home directory
+ *
+ *  @param		string	The username
+ *	@return home directory path
+ */
+function account_user_homedir($user) {
+	return '/home/users/'.substr($user,0,1).'/'.substr($user,0,2).'/'.$user;
+}
+
+/**
+ *	account_group_homedir() - Returns full path of group home directory
+ *
+ *  @param		string	The group name
+ *	@return home directory path
+ */
+function account_group_homedir($group) {
+	return '/home/groups/'.substr($group,0,1).'/'.substr($group,0,2).'/'.$group;
+}
+
+/**
+ *	account_group_cvsweb_url() - Returns URL for group's CVS interface WWW
+ *
+ *  @param		string	The group name
+ *	@return URL to access CVS over HTTP
+ */
+function account_group_cvsweb_url($group) {
+	return 'http://'.$GLOBALS['sys_cvs_host'].'/cgi-bin/viewcvs.cgi/'.$group;
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/database.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/database.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/database.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,305 @@
+<?php
+/**
+ *
+ * database.php - The database abstraction library
+ * This is the PostgreSQL version of our database connection/querying layer
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+
+//$conn - database connection handle
+
+/**
+ * Current row for each result set
+ *
+ * @var			array	$sys_db_row_pointer
+ */
+$sys_db_row_pointer=array(); //current row for each result set
+
+
+/**
+ *  db_connect() - Connect to the database
+ *  Notice the global vars that must be set up
+ *  Sets up a global $conn variable which is used 
+ *  in other functions in this library.
+ */
+function db_connect() {
+	global $sys_dbhost,$sys_dbuser,$sys_dbpasswd,$conn,
+		$sys_dbname,$sys_db_use_replication,$sys_dbreaddb,$sys_dbreadhost;
+
+	//
+	//	Connect to primary database
+	//
+	$conn = @pg_pconnect("user=$sys_dbuser dbname=$sys_dbname host=$sys_dbhost password=$sys_dbpasswd"); 
+
+	//
+	//	If any replication is configured, connect
+	//
+	if ($sys_db_use_replication) {
+		$conn2 = @pg_pconnect("user=$sys_dbuser dbname=$sys_dbreaddb host=$sys_dbreadhost password=$sys_dbpasswd"); 
+	} else {
+		$conn2 = $conn;
+	}
+
+	//
+	//	Now map the physical database connections to the
+	//	"virtual" list that is used to distribute load in db_query()
+	//
+	define(SYS_DB_PRIMARY,$conn);
+	define(SYS_DB_STATS,$conn2);
+	define(SYS_DB_TROVE,$conn2);
+	define(SYS_DB_SEARCH,$conn2);
+
+	// Register top-level "finally" handler to abort current
+	// transaction in case of error
+	register_shutdown_function("system_cleanup");
+}
+
+/**
+ *  db_query() - Query the database.
+ *
+ *  @param text SQL statement.
+ *  @param int How many rows do you want returned.
+ *  @param int Of matching rows, return only rows starting here.
+ *	@param int ability to spread load to multiple db servers.
+ *	@return int result set handle.
+ */
+function db_query($qstring,$limit='-1',$offset=0,$dbserver=SYS_DB_PRIMARY) {
+	global $QUERY_COUNT;
+	$QUERY_COUNT++;
+
+	if ($limit > 0) {
+		if (!$offset || $offset < 0) {
+			$offset=0;
+		}
+		$qstring=$qstring." LIMIT $limit OFFSET $offset";
+	}
+
+	$GLOBALS['G_DEBUGQUERY'] .= $qstring .' |<font size="-2">'.$dbserver.'</font>'. "<P>\n";
+	return @pg_exec($dbserver,$qstring);
+}
+
+/* Current transaction level, private variable */
+/* FIXME: Having scalar variable for transaction level is
+   no longer correct after multiple database (dbservers) support
+   introduction. However, it is true that in one given PHP
+   script, at most one db is modified, so this works for now. */
+$_sys_db_transaction_level = 0;
+
+/**
+ *	db_begin() - Begin a transaction.
+ *
+ *  @param		constant		Database server (SYS_DB_PRIMARY, SYS_DB_STATS, SYS_DB_TROVE, SYS_DB_SEARCH)
+ *	@return true.
+ */
+function db_begin($dbserver=SYS_DB_PRIMARY) {
+	global $_sys_db_transaction_level;
+
+	// start database transaction only for the top-level
+	// programmatical transaction
+	$_sys_db_transaction_level++;
+	if ($_sys_db_transaction_level == 1) {
+		return db_query("BEGIN WORK", -1, 0, $dbserver);
+	}
+
+	return true;
+}
+
+/**
+ *	db_commit() - Commit a transaction.
+ *
+ *  @param		constant		Database server (SYS_DB_PRIMARY, SYS_DB_STATS, SYS_DB_TROVE, SYS_DB_SEARCH)
+ *	@return true on success/false on failure.
+ */
+function db_commit($dbserver=SYS_DB_PRIMARY) {
+	global $_sys_db_transaction_level;
+
+	// check for transaction stack underflow
+	if ($_sys_db_transaction_level == 0) {
+		echo "COMMIT underflow<br>";
+		return false;
+	}
+
+	// commit database transaction only when top-level
+	// programmatical transaction ends
+	$_sys_db_transaction_level--;
+	if ($_sys_db_transaction_level == 0) {
+		return db_query("COMMIT", -1, 0, $dbserver);
+	}
+
+	return true;
+}
+
+/**
+ *	db_rollback() - Rollback a transaction.
+ *
+ *  @param		constant		Database server (SYS_DB_PRIMARY, SYS_DB_STATS, SYS_DB_TROVE, SYS_DB_SEARCH)
+ *	@return true on success/false on failure.
+ */
+function db_rollback($dbserver=SYS_DB_PRIMARY) {
+	global $_sys_db_transaction_level;
+
+	// check for transaction stack underflow
+	if ($_sys_db_transaction_level == 0) {
+		echo "ROLLBACK underflow<br>";
+		return false;
+	}
+
+	// rollback database transaction only when top-level
+	// programmatical transaction ends
+	$_sys_db_transaction_level--;
+	if ($_sys_db_transaction_level == 0) {
+		return db_query("ROLLBACK", -1, 0, $dbserver);
+	}
+
+	return true;
+}
+
+/**
+ *	db_numrows() - Returns the number of rows in this result set.
+ *
+ *	@param		int		Query result set handle.
+ *	@return int number of rows.
+ */
+
+function db_numrows($qhandle) {
+	return @pg_numrows($qhandle);
+}
+
+/**
+ *  db_free_result() - Frees a database result properly.
+ *
+ *	@param		int		Query result set handle.
+ */
+function db_free_result($qhandle) {
+	return @pg_freeresult($qhandle);
+}
+
+/**
+ *  db_reset_result() - Reset is useful for db_fetch_array
+ *  sometimes you need to start over.
+ *
+ *	@param		int		Query result set handle.
+ *  @param		integer	Row number.
+ *	@return int row.
+ */
+function db_reset_result($qhandle,$row=0) {
+	global $sys_db_row_pointer;
+	return $sys_db_row_pointer[$qhandle]=$row;
+}
+
+/**
+ *  db_result() - Returns a field from a result set.
+ *
+ *	@param		int		Query result set handle.
+ *  @param		integer Row number.
+ *  @param		string	Field name.
+ *	@return contents of field from database.
+ */
+function db_result($qhandle,$row,$field) {
+	return @pg_result($qhandle,$row,$field);
+}
+
+/**
+ *  db_numfields() - Returns the number of fields in this result set.
+ *
+ *	@param		int		Query result set handle.
+ */
+function db_numfields($lhandle) {
+	return @pg_numfields($lhandle);
+}
+
+/**
+ *  db_fieldname() - Returns the number of rows changed in the last query.
+ *
+ *	@param		int		Query result set handle.
+ *  @param		int		Column number.
+ *	@return text name of the field.
+ */
+function db_fieldname($lhandle,$fnumber) {
+	return @pg_fieldname($lhandle,$fnumber);
+}
+
+/**
+ *  db_affected_rows() - Returns the number of rows changed in the last query.
+ *
+ *	@param		int		Query result set handle.
+ *	@return int number of affected rows.
+ */
+function db_affected_rows($qhandle) {
+	return @pg_cmdtuples($qhandle);
+}
+
+/**
+ *  db_fetch_array() - Returns an associative array from 
+ *  the current row of this database result
+ *  Use db_reset_result to seek a particular row.
+ *
+ *	@param		int		Query result set handle.
+ *	@return associative array of fieldname/value key pairs.
+ */
+function db_fetch_array($qhandle) {
+	global $sys_db_row_pointer;
+	$sys_db_row_pointer[$qhandle]++;
+	return @pg_fetch_array($qhandle,($sys_db_row_pointer[$qhandle]-1));
+}
+
+/**
+ *  db_insertid() - Returns the last primary key from an insert.
+ *
+ *	@param		int		Query result set handle.
+ *  @param		string	table_name is the name of the table you inserted into.
+ *  @param		string	pkey_field_name is the field name of the primary key.
+ *  @param		string	Server to which original query was made
+ *	@return int id of the primary key or 0 on failure.
+ */
+function db_insertid($qhandle,$table_name,$pkey_field_name,$dbserver=SYS_DB_PRIMARY) {
+	$oid=@pg_getlastoid($qhandle);
+	if ($oid) {
+		$sql="SELECT $pkey_field_name AS id FROM $table_name WHERE oid='$oid'";
+		//echo $sql;
+		$res=db_query($sql, -1, 0, $dbserver);
+		if (db_numrows($res) >0) {
+			return db_result($res,0,'id');
+		} else {
+		//	echo "No Rows Matched";
+		//	echo db_error();
+			return 0;
+		}
+	} else {
+//		echo "No OID";
+//		echo db_error();
+		return 0;
+	}
+}
+
+/**
+ *  db_error() - Returns the last error from the database.
+ *
+ *  @param		constant		Database server (SYS_DB_PRIMARY, SYS_DB_STATS, SYS_DB_TROVE, SYS_DB_SEARCH)
+ *	@return text error message.
+ */
+function db_error($dbserver=SYS_DB_PRIMARY) {
+	return @pg_errormessage($dbserver);
+}
+
+/**
+ *	system_cleanup() - In the future, we may wish to do a number 
+ *	of cleanup functions at script termination.
+ *
+ *	For now, we just abort any in-process transaction.
+ */
+function system_cleanup() {
+	global $_sys_db_transaction_level;
+	if ($_sys_db_transaction_level > 0) {
+		echo "Open transaction detected!!!";
+		db_query("ROLLBACK");
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/jpcache.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/jpcache.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/jpcache.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,368 @@
+<?
+
+/*
+  jpcache.php v1.0.1 [2001-03-25]
+  Copyright  2001 Jean-Pierre Deckers <jpcache at weirdpier.com>
+
+  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
+  of the License, 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 this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+/*
+ Credits:
+
+	Most things taken from 
+		phpCache v1.2 <nathan at 0x00.org> (http://www.0x00.org/phpCache)
+		gzdoc.php <catoc at 163.net> and <jlim at natsoft.com.my> 
+		jr-cache.php <jr-jrcache at quo.to>
+
+	Inspired by the following threads:
+		http://www.aota.net/ubb/Forum15/HTML/000738-1.html
+		http://www.aota.net/ubb/Forum15/HTML/000746-1.html
+		http://www.aota.net/ubb/Forum15/HTML/000749-1.html
+
+ Note:
+	I do not claim anything. 
+	Just a first try to 'release' something under the GPL.
+
+ More info on http://www.weirdpier.com/jpcache/
+
+
+--
+--  Table for new caching system
+--
+CREATE TABLE cache_store (
+name varchar(255),
+data text,
+indate int not null default 0
+);
+
+CREATE UNIQUE INDEX cachestore_name ON cache_store(name);
+
+ */
+ 
+/******************************************************************************/
+
+	$CACHE_TIME=900;	// Default: 900 - number seconds to cache
+	$CACHE_DEBUG=0;		// Default: 0 - Turn debugging on/off
+	$SINGLE_SITE=1;		// Default: 1 - No servername in file
+	$CACHE_POST=0;		// Default: 0 - don't cache when HTTP_POST_VARS present
+	$CACHE_COOKIE=0;	// Default: 0 - don't cache when HTTP_COOKIE_VARS present
+	$CACHE_ON=1;		// Default: 1 - Turn caching on/off
+	$CACHE_USE_GZIP=1;		// Default: 0 - Whether or not to use GZIP
+
+	define(CACHE_DIR, "/tmp");  // Default: /tmp - Default cache directory
+	define(CACHE_GC, .1);		// Default: 1 - Probability of garbage collection (i.e: 1%)
+
+/******************************************************************************/
+
+
+	/* This resets the cache state */
+	function cache_reset() 
+	{
+		global $cache_file, $cache_data;
+		$cache_file = NULL;
+		$cache_data	= array();
+	}
+
+	/* duh ? */
+	function cache_debug($s) {
+		global $CACHE_DEBUG,$cache_debug_comments;
+		if ($CACHE_DEBUG) {
+			header("X-Debug: $s");
+		}
+		$cache_debug_comments .= "\n".$s;
+	}
+
+	/* Returns the default key used by the helper functions */
+	function cache_default_key() 
+	{
+		global $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_COOKIE_VARS, $REQUEST_URI;
+		return md5("POST=" . serialize($HTTP_POST_VARS) . " GET=" . serialize($HTTP_GET_VARS) . " COOKIE=" . serialize($HTTP_COOKIE_VARS) . $REQUEST_URI );
+	}
+
+	/* Returns the default object used by the helper functions */
+	function cache_default_object() 
+	{
+		global $SCRIPT_URI, $SERVER_NAME, $SCRIPT_NAME, $SINGLE_SITE;
+
+		if ($SINGLE_SITE) {
+			$name=$SCRIPT_NAME;
+		} else {
+			$name=$SCRIPT_URI;
+		}
+
+		if ($name=="") {
+			$name="http://$SERVER_NAME/$SCRIPT_NAME";
+		}
+		return $name;
+	}
+
+	/* This is the function that writes out the cache */
+	function cache_write($file, $data) 
+	{
+		global $CACHE_TIME,$CACHE_ON;
+
+		if (!$CACHE_ON || $CACHE_TIME < 1) {
+			cache_debug("Not caching, CACHE_ON is off");
+			return 0;
+		}
+
+		db_begin();
+
+		//
+		//	Get a lock on this object in the db
+		//
+		$res=db_query("SELECT * 
+			FROM cache_store 
+			WHERE 
+				name='$file' 
+			FOR UPDATE");
+
+		if (!$res || db_numrows($res) < 1) {
+			$res=db_query("INSERT INTO cache_store (name,data,indate) 
+				VALUES ('$file','". addslashes($data) ."','". time() ."')");
+			//
+			//	Assume it worked - it may have been rejected by the UNIQUE INDEX
+			//	but that just means another thread inserted in the meantime
+			//
+			db_commit();
+			return true;
+		} else {
+			//
+			//	See if we still need to update or not...
+			//
+			if (db_result($res,0,'indate') > (time()-$CACHE_TIME)) {
+				//
+				//	Another thread updated the db already....
+				//
+				db_commit();
+				return true;
+			} else {
+				$res=db_query("UPDATE cache_store 
+					SET 
+						data='". addslashes($data) ."', 
+						indate='". time() ."'
+					WHERE
+						name='$file'");
+				//
+				//  Assume it worked - it may have been rejected by the UNIQUE INDEX
+				//  but that just means another thread inserted in the meantime
+				//
+				db_commit();
+				return true;
+			}
+
+		}
+		return TRUE;
+	}
+
+	/* This function reads in the cache, duh */
+	function cache_read($file) 
+	{
+		global $CACHE_TIME;
+		$res=db_query("SELECT data 
+			FROM cache_store 
+			WHERE 
+				name='$file'
+				AND indate > '". (time()-$CACHE_TIME) ."'");
+		return db_result($res,0,'data');
+	}
+
+	/* Cache garbage collection */
+	function cache_gc() 
+	{
+		global $CACHE_TIME;
+
+		if (CACHE_GC>0) {
+			mt_srand(time(NULL));
+			$precision=100000;
+			$r=(mt_rand()%$precision)/$precision;
+			if ($r >= (CACHE_GC/100)) {
+				return false;
+			} else {
+				db_query("DELETE FROM cache_store WHERE indate < '". (time()-$CACHE_TIME) ."'");
+			}
+		}
+	}
+
+	/* 
+		Caches $object based on $key for $cachetime, will return 0 if the 
+		object has expired or the object does not exist. 
+	*/
+	function check_cache() 
+	{
+		global $cache_file, $cache_data, $gzcontent, $CACHE_ON;
+		
+		if (!$CACHE_ON) {
+			cache_debug("Not caching, CACHE_ON is off");
+			return false;
+		}
+
+		$cache_file=eregi_replace("[^A-Z,0-9,=]", "_", cache_default_object());
+		$key=eregi_replace("[^A-Z,0-9,=]", "_", cache_default_key());
+	
+		cache_debug("Caching based on <b>OBJECT</b>=$cache_file <b>KEY</b>=$key");
+				
+		$cache_file=$cache_file . ":" . $key;
+		
+		// Can we access the cache_file ?
+		if ($buff=cache_read($cache_file)) {
+			cache_debug("Opened the cache file");
+			return $buff;
+		} else {
+			// No cache file (yet) or unable to read
+			cache_debug("No previous cache of $cache_file or unable to read");
+		
+			// If we came here: start caching!
+		
+			return false;
+		}
+	}
+
+	/* 
+		Sets the handler 
+	*/
+	function cache_start()
+	{
+		global $CACHE_ON,$CACHE_POST,$CACHE_COOKIE,$CACHE_TIME,$cache_debug_comments;
+
+		//
+		//	If you chose not to cache when POST occurs, force cache off
+		//
+		if (!$CACHE_POST && (count($HTTP_POST_VARS) > 0)) {
+			$CACHE_ON = 0;
+			$CACHE_TIME = -1;
+		}
+
+		//
+		//	If you chose not to cache when COOKIES present, force cache off
+		//
+		if (!$CACHE_COOKIE && (count($HTTP_COOKIE_VARS) > 0)) {
+			$CACHE_ON = 0;
+			$CACHE_TIME = -1;
+		}
+
+		//
+		//	CACHE_TIME of -1 disables caching, just using gzip if possible
+		//
+		if ($CACHE_TIME == -1) {
+			$CACHE_ON=0;
+		}
+
+		// Reset
+		cache_reset();
+
+		// Check cache
+		if ($et=check_cache()) {
+			// Cache is valid: flush it!
+			$size = strlen($et);
+			$crc32 = crc32($et);
+			print cache_flush($et, $size, $crc32);
+//exec("/bin/echo \"$cache_debug_comments\" >> /tmp/out.txt");
+			exit; 
+		} else {
+			cache_gc();
+
+			// Start a new cache file
+			ob_start("cache_end");
+			ob_implicit_flush(0);
+		}
+//exec("/bin/echo \"$cache_debug_comments\" >> /tmp/out.txt");
+	}
+
+	/* Are we capable of receiving gzipped data ?
+	 *
+	 * Returns the encoding that is accepted. Maybe additional check for Mac ?
+	 */
+	function cache_get_encoding() { 
+		global $HTTP_ACCEPT_ENCODING;
+		if (headers_sent() || connection_aborted()) { 
+			return false; 
+		} 
+		if (strpos($HTTP_ACCEPT_ENCODING,'x-gzip') !== false) {
+			return "x-gzip"; 
+		}
+		if (strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false) {
+			return "gzip"; 
+		}
+		return false;
+	}
+
+	/* cache_flush()
+	 *
+	 * Responsible for final flushing everything.
+	 * Sets ETag-headers and returns "Not modified" when possible
+	 *
+	 * When ETag doesn't match (or is invalid), it is tried to send
+	 * the gzipped data. If that is also not possible, we sadly have to
+	 * uncompress...
+	 */
+	function cache_flush($contents, $size, $crc32)
+	{
+		global $HTTP_SERVER_VARS,$CACHE_USE_GZIP;
+
+		// First check if we can send last-modified
+		$myETag = "\"jpd-$crc32.$size\"";
+		header("ETag: $myETag");
+		$foundETag = stripslashes($HTTP_SERVER_VARS["HTTP_IF_NONE_MATCH"]);
+		$ret = NULL;
+		
+		if (strstr($foundETag, $myETag)) {
+			// Not modified!
+			header("HTTP/1.0 304");
+		} else {
+			if ($CACHE_USE_GZIP) {
+				$ENCODING = cache_get_encoding(); 
+				if ($ENCODING) { 
+					// compressed output
+					$contents = gzcompress($contents, 9);
+					header("Content-Encoding: $ENCODING");
+					$ret =  "\x1f\x8b\x08\x00\x00\x00\x00\x00";
+					$ret .= substr($contents, 0, strlen($contents) - 4);
+					$ret .= pack('V',$crc32);
+					$ret .= pack('V',$size);
+				} else {
+					// Darn, we need to uncompress :(
+					$ret = $contents;
+				}
+			} else {
+				$ret=$contents;
+			}
+		}
+		return $ret;
+	}
+
+	/**
+	 *	cache_end()
+	 *
+	 *	This one is called by the callback-funtion of the ob_start
+	 */
+	function cache_end($contents)
+	{
+		cache_debug("Callback happened");
+		global $size, $cache_file, $crc32;
+
+		$size = strlen($contents);
+		$crc32 = crc32($contents);
+
+		// write the cache
+		cache_write($cache_file,$contents);
+		
+		// Return flushed data
+		return cache_flush($contents, $size, $crc32);
+	}
+
+	cache_start();
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/ldap.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/ldap.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/ldap.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,776 @@
+<?php
+/**
+ *
+ * ldap.php - The LDAP library
+ * This is the PostgreSQL version of our database connection/querying layer
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ * @author Paul Sokolovsky pfalcon at users.sourceforge.net
+ * @date 2000-10-17
+ *
+ */
+
+require_once('common/include/account.php');
+
+/*
+ * Constants
+ */
+
+/**
+ * Value to add to group_id to get unix gid
+ *
+ * @var	constant		$GID_ADD
+ */
+$GID_ADD = 1000;
+
+/**
+ * Value to add to unix_uid to get unix uid
+ * 
+ * @var	constant		$UID_ADD
+ */
+$UID_ADD = 20000;
+
+/**
+ * Value to add to unix gid to get unix uid of anoncvs special user
+ *
+ * @var	constant		$ANONCVS_UID_ADD
+ */
+$ANONCVS_UID_ADD = 2000;
+
+/*
+ * Auxilary functions
+ */
+
+/**
+ *	asciize() - Replace non-ascii characters with question marks
+ *
+ *	LDAP expects utf-8 encoded character string. Since we cannot
+ *	know which encoding 8-bit characters in database use, we
+ *	just replace them with question marks.
+ *
+ *  @param		string	UTF-8 encoded character string.
+ *	@return string which contains only ascii characters
+ */
+function asciize($str) {
+	if (!$str) {
+		// LDAP don't allow empty strings for some attributes
+		return '?';
+	}
+
+	return ereg_replace("[\x80-\xff]","?",$str);
+}
+
+/*
+ * Error message passing facility
+ */
+
+/**
+ * sf_ldap_set_error_msg() - Set an LDAP error message
+ *
+ * @param		string	The message string to set
+ *
+ */
+//var $_sf_ldap_error_msg;
+function sf_ldap_set_error_msg($msg) {
+	global $_sf_ldap_error_msg;
+	$_sf_ldap_error_msg .= $msg;
+}
+
+/**
+ * sf_ldap_get_error_msg() - Get an LDAP error message
+ *
+ * @returns The error message string
+ *
+ */
+function sf_ldap_get_error_msg() {
+	global $_sf_ldap_error_msg;
+	return $_sf_ldap_error_msg;
+}
+
+/**
+ * sf_ldap_reset_error_msg() - Reset the stored LDAP error message
+ *
+ */
+function sf_ldap_reset_error_msg() {
+	global $_sf_ldap_error_msg;
+	$_sf_ldap_error_msg='';
+}
+
+
+/*
+ * Wrappers for PHP LDAP functions
+ */
+
+/**
+ * sf_ldap_connect() - Connect to the LDAP server
+ *
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_connect() {
+	global $sys_ldap_host,$sys_ldap_port;
+	global $sys_ldap_bind_dn,$sys_ldap_passwd,$ldap_conn;
+
+	if (!$ldap_conn) {
+		sf_ldap_reset_error_msg();
+		$ldap_conn = @ldap_connect($sys_ldap_host,$sys_ldap_port);
+		if (!$ldap_conn) {
+			sf_ldap_set_error_msg('ERROR: Cannot connect to LDAP server<br>');
+			return false;
+		}
+		ldap_bind($ldap_conn,$sys_ldap_bind_dn,$sys_ldap_passwd);
+	}
+	return true;
+}
+
+/**
+ * sf_ldap_add() - Wrapper for ldap_add()
+ * 
+ * @param		string	dn
+ * @param		string	entry
+ *
+ */
+function sf_ldap_add($dn, $entry) {
+	global $ldap_conn;
+	return @ldap_add($ldap_conn,$dn,$entry);
+}
+
+/**
+ * sf_ldap_delete() - Wrapper for ldap_delete()
+ *
+ * @param		string	dn
+ *
+ */
+function sf_ldap_delete($dn) {
+	global $ldap_conn;
+	return @ldap_delete($ldap_conn,$dn);
+}
+
+/**
+ * sf_ldap_modify() - Wrapper for ldap_modify()
+ *
+ * @param		string	dn
+ * @param		string	entry
+ *
+ */
+function sf_ldap_modify($dn,$entry) {
+	global $ldap_conn;
+	return @ldap_modify($ldap_conn,$dn,$entry);
+}
+
+/**
+ * sf_ldap_mod_add() - Wrapper for ldap_mod_add()
+ *
+ * @param		string	dn
+ * @param		string	entry
+ *
+ */
+function sf_ldap_mod_add($dn,$entry) {
+	global $ldap_conn;
+	return @ldap_mod_add($ldap_conn,$dn,$entry);
+}
+
+/**
+ * sf_ldap_mod_del() - Wrapper for ldap_mod_del()
+ *
+ * @param		string	dn
+ * @param		string	entry
+ *
+ */
+function sf_ldap_mod_del($dn,$entry) {
+	global $ldap_conn;
+	return @ldap_mod_del($ldap_conn,$dn,$entry);
+}
+
+/**
+ * sf_ldap_read() - Wrapper for ldap_read()
+ *
+ * @param		string	dn
+ * @param		string	filter
+ * @param		int		attrs
+ *
+ */
+function sf_ldap_read($dn,$filter,$attrs=0) {
+	global $ldap_conn;
+	return @ldap_read($ldap_conn,$dn,$filter,$attrs);
+}
+
+/**
+ * sf_ldap_error() - Wrapper for ldap_error()
+ *
+ * @see ldap_error()
+ *
+ */
+function sf_ldap_error() {
+	global $ldap_conn;
+	return ldap_error($ldap_conn);
+}
+
+/**
+ * sf_ldap_errno() - Wrapper for ldap_errno()
+ *
+ * @see ldap_errno()
+ *
+ */
+function sf_ldap_errno() {
+	global $ldap_conn;
+	return ldap_errno($ldap_conn);
+}
+
+/**
+ * sf_ldap_already_exists()
+ */
+function sf_ldap_already_exists() {
+	global $ldap_conn;
+	return ldap_errno($ldap_conn)==20;
+}
+
+/**
+ * sf_ldap_does_not_exist()
+ */
+function sf_ldap_does_not_exist() {
+	global $ldap_conn;
+	return ldap_errno($ldap_conn)==16;
+}
+
+/*
+ * User management functions
+ */
+
+/**
+ * sf_ldap_check_user() - Check for the existence of a user
+ * 
+ * @param		int		The user ID of the user to check
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_check_user($user_id) {
+	$user =& user_get_object($user_id);
+	if (!$user) {
+		return false;
+	}
+	return sf_ldap_check_user_by_name($user->getUnixName());
+}
+
+/**
+ * sf_ldap_check_user_by_name() - Check for a user by the username
+ *
+ * @param		string	The username 
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_check_user_by_name($user_name) {
+	global $ldap_conn;
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+
+	$dn = 'uid='.$user_name.',ou=People,'.$sys_ldap_base_dn;
+	$res = sf_ldap_read($dn,"objectClass=*",array("uid"));
+	if ($res) {
+		ldap_free_result($res);
+		return true;
+	}
+
+	return false;
+}
+
+/**
+ * sf_ldap_create_user() - Create a user
+ *
+ * @param		int	The user ID of the user to create
+ * @returns The return status of sf_ldap_create_user_from_object()
+ *
+ */
+function sf_ldap_create_user($user_id) {
+	$user = &user_get_object($user_id);
+	return sf_ldap_create_user_from_object($user);
+}
+
+/**
+ * sf_ldap_check_create_user() - Check that a user has been created
+ *
+ * @param		int		The ID of the user to check
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_check_create_user($user_id) {
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	if (!sf_ldap_check_user($user_id)){
+		$user = &user_get_object($user_id);
+		return sf_ldap_create_user_from_object($user);
+	}
+	return true;
+}
+
+/**
+ * sf_ldap_create_user_from_object() - Create a user from information contained within an object
+ *
+ * @param		object	The user object
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_create_user_from_object(&$user) {
+	global $sys_ldap_base_dn;
+	global $UID_ADD;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+//echo "sf_ldap_create_user_from_object(".$user->getUnixName().")<br>";
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'uid='.$user->getUnixName().',ou=People,'.$sys_ldap_base_dn;
+	$entry['objectClass'][0]='top';
+	$entry['objectClass'][1]='account';
+	$entry['objectClass'][2]='posixAccount';
+	$entry['objectClass'][3]='shadowAccount';
+	$entry['objectClass'][4]='x-sourceforgeAccount';
+	$entry['uid']=$user->getUnixName();
+	$entry['cn']=asciize($user->getRealName());
+	$entry['gecos']=asciize($user->getRealName());
+	$entry['userPassword']='{crypt}'.$user->getUnixPasswd();
+	$entry['homeDirectory'] = account_user_homedir($user->getUnixName());
+	$entry['loginShell']=$user->getShell();
+	$entry['x-cvsShell']="/bin/cvssh"; // unless explicitly set otherwise, developer has write access
+	$entry['uidNumber']=$user->getUnixUID() + $UID_ADD;
+	$entry['gidNumber']=100; // users
+	$entry['shadowLastChange']=1; // We don't have expiration, so any non-0
+	$entry['shadowMax']=99999;
+	$entry['shadowWarning']=7;
+
+	if (!sf_ldap_add($dn,$entry)) {
+		sf_ldap_set_error_msg("ERROR: cannot add LDAP user entry '".
+			 $user->getUnixName()."': ".sf_ldap_error()."<br>");
+		return false;
+	}
+	return true;
+}
+
+/**
+ * sf_ldap_create_user_from_props() - Creates an LDAP user from
+ *
+ * @param		string	The username 
+ * @param		string	????
+ * @param		string	The encrypted password
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_create_user_from_props($username, $cn, $crypt_pw,
+					$shell, $cvsshell, $uid, $gid) {
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'uid='.$username.',ou=People,'.$sys_ldap_base_dn;
+	$entry['objectClass'][0]='top';
+	$entry['objectClass'][1]='account';
+	$entry['objectClass'][2]='posixAccount';
+	$entry['objectClass'][3]='shadowAccount';
+	$entry['objectClass'][4]='x-sourceforgeAccount';
+	$entry['uid']=$username;
+	$entry['cn']=asciize($cn);
+	$entry['gecos']=asciize($cn);
+	$entry['userPassword']='{crypt}'.$crypt_pw;
+	$entry['homeDirectory'] = account_user_homedir($username);
+	$entry['loginShell']=$shell;
+	$entry['x-cvsShell']=$cvsshell; 
+	$entry['uidNumber']=$uid;
+	$entry['gidNumber']=$gid;
+	$entry['shadowLastChange']=1;
+	$entry['shadowMax']=99999;
+	$entry['shadowWarning']=7;
+
+	if (!sf_ldap_add($dn,$entry)) {
+		sf_ldap_set_error_msg("ERROR: cannot add LDAP user entry '".
+			 $username."': ".sf_ldap_error()."<br>");
+		return false;
+	}
+	return true;
+}
+
+/**
+ * sf_ldap_remove_user() - Remove an LDAP user
+ *
+ * @param		int		The user ID of the user to remove
+ * @returns true on success/false on failure
+ *
+ */
+function sf_ldap_remove_user($user_id) {
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$user = &user_get_object($user_id);
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'uid='.$user->getUnixName().',ou=People,'.$sys_ldap_base_dn;
+
+	if (!sf_ldap_delete($dn)) {
+	    sf_ldap_set_error_msg("ERROR: cannot delete LDAP user entry '".
+			 $user->getUnixName()."': ".sf_ldap_error()."<br>");
+	    return false;
+	}
+	return true;
+}
+
+/**
+ * sf_ldap_user_set_attribute() - Set an attribute for a user
+ *
+ * @param		int		The user ID 
+ * @param		string	The attribute to set
+ * @param		string	The new value of the attribute
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_user_set_attribute($user_id,$attr,$value) {
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$user = &user_get_object($user_id);
+//echo "sf_ldap_user_set_attribute(".$user->getUnixName().",".$attr.",".$value.")<br>";
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'uid='.$user->getUnixName().',ou=People,'.$sys_ldap_base_dn;
+	$entry[$attr]=$value;
+
+	if (!sf_ldap_modify($dn, $entry)) {
+	    sf_ldap_set_error_msg("ERROR: cannot change LDAP attribute '$attr' for user '".
+			 $user->getUnixName()."': ".sf_ldap_error()."<br>");
+	    return false;
+	}
+	return true;
+}
+
+/*
+ * Group management functions
+ */
+
+/**
+ * sf_ldap_check_group() - Check for the existence of a group
+ * 
+ * @param		int		The ID of the group to check
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_check_group($group_id) {
+	global $ldap_conn;
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$group = &group_get_object($group_id);
+	if (!$group) {
+		sf_ldap_set_error_msg("ERROR: Cannot find group [$group_id]<br>");
+		return false;
+	}
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'cn='.$group->getUnixName().',ou=Group,'.$sys_ldap_base_dn;
+	$res=sf_ldap_read($dn, "objectClass=*", array("cn"));
+	if ($res) {
+		ldap_free_result($res);
+		return true;
+	}
+	return false;
+}
+
+/**
+ * sf_ldap_create_group() - Create a group
+ * 
+ * @param		int		The ID of the group to create
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_create_group($group_id) {
+	global $sys_ldap_base_dn;
+	global $GID_ADD;
+	global $ANONCVS_UID_ADD;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$group = &group_get_object($group_id);
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'cn='.$group->getUnixName().',ou=Group,'.$sys_ldap_base_dn;
+	$entry['objectClass'][0]='top';
+	$entry['objectClass'][1]='posixGroup';
+	$entry['cn']=$group->getUnixName();
+	$entry['userPassword']='{crypt}x';
+	$entry['gidNumber']=$group->getID() + $GID_ADD;
+
+	$i=0; $i_cvs=0;
+
+	$ret_val=true;
+	
+	if (!sf_ldap_add($dn,$entry)) {
+	    sf_ldap_set_error_msg("ERROR: cannot add LDAP group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."<br>");
+	    // If there's error, that's bad. But don't stop.
+	    $ret_val=false;
+	}
+
+	//
+	//	Now create CVS group
+	//
+
+	// Add virtual anoncvs user to CVS group
+	$cvs_member_list[$i_cvs++] = 'anoncvs_'.$group->getUnixName();
+
+	$dn = 'cn='.$group->getUnixName().',ou=cvsGroup,'.$sys_ldap_base_dn;
+
+	if ($cvs_member_list) {
+		$entry['memberUid']=$cvs_member_list;
+	} else {
+		unset($entry['memberUid']);
+	}
+
+	if (!sf_ldap_add($dn,$entry)) {
+		sf_ldap_set_error_msg("ERROR: cannot add LDAP CVS group entry '"
+			 .$group->getUnixName()."': ".sf_ldap_error()."<br>");
+		$ret_val=false;
+	}
+
+	//
+	// Finally, setup AnonCVS virtual user
+	//
+
+        if (!sf_ldap_check_user_by_name('anoncvs_'.$group->getUnixName())
+	    && !sf_ldap_create_user_from_props('anoncvs_'.$group->getUnixName(),
+						'anoncvs', 'x',
+						'/bin/false', '/bin/false',
+						$group_id+$GID_ADD+$ANONCVS_UID_ADD,
+						$group_id+$GID_ADD)) {
+		sf_ldap_set_error_msg("ERROR: cannot add LDAP AnonCVS user entry '"
+			 .$group->getUnixName()."': ".sf_ldap_error()."<br>");
+		$ret_val=false;
+	}
+
+	return $ret_val;
+}
+
+/**
+ * sf_ldap_remove_group() - Remove a group
+ * 
+ * @param		int		The ID of the group to remove
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_remove_group($group_id) {
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$group = &group_get_object($group_id);
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+
+	//
+	//	Remove shell LDAP group
+	//
+	$ret_val=true;
+	
+	$dn = 'cn='.$group->getUnixName().',ou=Group,'.$sys_ldap_base_dn;
+
+	if (!sf_ldap_delete($dn)) {
+	    sf_ldap_set_error_msg("ERROR: cannot delete LDAP group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."<br>");
+	    $ret_val = false;
+	}
+
+	//
+	//	Remove CVS LDAP group
+	//
+
+	$dn = 'cn='.$group->getUnixName().',ou=cvsGroup,'.$sys_ldap_base_dn;
+
+	if (!sf_ldap_delete($dn)) {
+	    sf_ldap_set_error_msg("ERROR: cannot delete LDAP CVS group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."<br>");
+	    $ret_val = false;
+	}
+
+	//
+	//	Remove AnonCVS virtual user
+	//
+
+	$dn = 'uid=anoncvs_'.$group->getUnixName().',ou=People,'.$sys_ldap_base_dn;
+	if (!sf_ldap_delete($dn)) {
+	    sf_ldap_set_error_msg("ERROR: cannot delete LDAP AnonCVS user entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."<br>");
+	    $ret_val = false;
+	}
+
+	return $ret_val;
+}
+
+/**
+ * sf_ldap_group_add_user() - Add a user to an LDAP group
+ *
+ * @param		int		The ID of the group two which the user will be added
+ * @param		int		The ID of the user to add
+ * @param		bool	Only add this user to CVS
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_group_add_user($group_id,$user_id,$cvs_only=0) {
+	global $ldap_conn;
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$group = &group_get_object($group_id);
+	$user  = &user_get_object($user_id);
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+	$dn = 'cn='.$group->getUnixName().',ou=Group,'.$sys_ldap_base_dn;
+	$cvs_dn = 'cn='.$group->getUnixName().',ou=cvsGroup,'.$sys_ldap_base_dn;
+	$entry['memberUid'] = $user->getUnixName();
+	
+	//
+	//	Check if user already a member of CVS group
+	//
+
+	$res=sf_ldap_read($cvs_dn,"memberUid=".$user->getUnixName(),array("cn"));
+	if ($res && ldap_count_entries($ldap_conn,$res)>0) {
+		//echo "already a member of CVS<br>";
+	} else {
+		//
+		//	No, add one
+		//
+
+		if (!sf_ldap_mod_add($cvs_dn,$entry)) {
+			sf_ldap_set_error_msg("ERROR: cannot add member to LDAP CVS group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."<br>");
+			return false;
+		}
+	}
+
+	ldap_free_result($res);
+	
+	if ($cvs_only) {
+		return true;
+	}
+	
+	//
+	//	Check if user already a member of shell group
+	//
+	$res = sf_ldap_read($dn, "memberUid=".$user->getUnixName(), array("cn"));
+
+	if ($res && ldap_count_entries($ldap_conn,$res)>0) {
+		//echo "already a member<br>";
+	} else {
+		//
+		//	No, add one
+		//
+
+		if (!sf_ldap_mod_add($dn,$entry)) {
+			sf_ldap_set_error_msg("ERROR: cannot add member to LDAP group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."<br>");
+			return false;
+		}
+	}
+
+	ldap_free_result($res);
+
+	return true;
+}
+
+/**
+ * sf_ldap_group_remove_user() - Remove a user from an LDAP group
+ *
+ * @param		int		The ID of the group from which to remove the user
+ * @param		int		The ID of the user to remove
+ * @param		bool	Only remove user from CVS group
+ * @returns true on success/false on error
+ *
+ */
+function sf_ldap_group_remove_user($group_id,$user_id,$cvs_only=0) {
+	global $sys_ldap_base_dn;
+
+	global $sys_use_ldap;
+	if (!$sys_use_ldap) {
+		return true;
+	}
+
+	$group = &group_get_object($group_id);
+	$user  = &user_get_object($user_id);
+	if (!sf_ldap_connect()) {
+		return false;
+	}
+
+	$dn = 'cn='.$group->getUnixName().',ou=Group,'.$sys_ldap_base_dn;
+	$cvs_dn = 'cn='.$group->getUnixName().',ou=cvsGroup,'.$sys_ldap_base_dn;
+	$entry['memberUid'] = $user->getUnixName();
+
+	$ret_val=true;
+
+	if (!sf_ldap_mod_del($cvs_dn,$entry) && !sf_ldap_does_not_exist()) {
+		sf_ldap_set_error_msg("ERROR: cannot remove member from LDAP CVS group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."(".sf_ldap_errno().")"."<br>");
+		$ret_val=false;
+	}
+	
+	if ($cvs_only) {
+		return $ret_val;
+	}
+
+	if (!sf_ldap_mod_del($dn,$entry) && !sf_ldap_does_not_exist()) {
+		sf_ldap_set_error_msg("ERROR: cannot remove member from LDAP group entry '".
+			 $group->getUnixName()."': ".sf_ldap_error()."(".sf_ldap_errno().")"."<br>");
+		$ret_val=false;
+	}
+	
+	return $ret_val;
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/session.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/session.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/session.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,468 @@
+<?php
+/**
+  *
+  * SourceForge Session Module
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+/**
+ * A User object if user is logged in
+ *
+ * @var	constant		$G_SESSION
+ */
+$G_SESSION = false;
+
+/**
+ *	session_build_session_cookie() - Construct session cookie for the user
+ *
+ *	@param		int		User_id of the logged in user
+ *	@return cookie value
+ */
+function session_build_session_cookie($user_id) {
+
+	$session_serial = $user_id.'-'.time().'-'.$GLOBALS['REMOTE_ADDR'].'-'.$GLOBALS['HTTP_USER_AGENT'];
+	$td = mcrypt_module_open($GLOBALS['sys_session_cypher'], "", $GLOBALS['sys_session_cyphermode'], "");
+	$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
+	mcrypt_generic_init($td, $GLOBALS['sys_session_key'], $iv);
+	$encrypted_session_serial = mcrypt_generic($td, $session_serial);
+	mcrypt_generic_end($td);
+	$session_serial_hash = md5($encrypted_session_serial.$GLOBALS['sys_session_key']);
+	$session_serial_cookie = base64_encode($encrypted_session_serial).'-'.$session_serial_hash;
+
+	return $session_serial_cookie;
+}
+
+/**
+ *	session_build_username_cookie() - Construct username cookie
+ *
+ *	@param  string username of the logged in user
+ *	@return cookie value
+ */
+function session_build_username_cookie($username) {
+
+	// check if operating in plaintext or encrytped mode
+	//
+	if ($GLOBALS['sys_username_cookie_plaintext']) {
+
+    return $username;
+
+	} else {
+
+		$td = mcrypt_module_open($GLOBALS['sys_username_cookie_cypher'], "", $GLOBALS['sys_username_cookie_cyphermode'], "");
+		$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
+		mcrypt_generic_init($td, $GLOBALS['sys_username_cookie_key'], $iv);
+		$encrypted_username = mcrypt_generic($td, $username);
+		mcrypt_generic_end($td);
+		$session_username_cookie = base64_encode($encrypted_username);
+
+		return $session_username_cookie;
+
+	} // else
+}
+
+/**
+ *	session_get_session_cookie_hash() - Get hash of session cookie
+ *
+ *	This hash can be used as a key to identify session, e.g. in DB.
+ *
+ *	@param		string	Value of the session cookie
+ *	@return hash
+ */
+function session_get_session_cookie_hash($session_cookie) {
+	list ($junk, $hash) = explode('-', $session_cookie);
+	return $hash;
+}
+
+/**
+ *	session_check_session_cookie() - Check that session cookie passed from user is ok
+ *
+ *	@param		string	Value of the session cookie
+ *	@return user_id if cookie is ok, false otherwise
+ */
+function session_check_session_cookie($session_cookie) {
+
+	list ($encrypted_session_serial, $hash) = explode('-', $session_cookie);
+	$encrypted_session_serial = base64_decode($encrypted_session_serial);
+	$new_hash = md5($encrypted_session_serial.$GLOBALS['sys_session_key']);
+
+	if ($hash != $new_hash) {
+		return false;
+	}
+
+	$td = mcrypt_module_open($GLOBALS['sys_session_cypher'], "", $GLOBALS['sys_session_cyphermode'], "");
+	$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
+	mcrypt_generic_init($td, $GLOBALS['sys_session_key'], $iv);
+	$session_serial = mdecrypt_generic($td, $encrypted_session_serial);
+	mcrypt_generic_end($td);
+
+	list($user_id, $time, $ip, $user_agent) = explode('-', $session_serial, 4);
+	
+	if (!session_check_ip($ip, $GLOBALS['REMOTE_ADDR'])) {
+		return false;
+	}
+	if (trim($user_agent) != $GLOBALS['HTTP_USER_AGENT']) {
+		return false;
+	}
+	if ($time - time() >= $GLOBALS['sys_session_expire']) {
+		return false;
+	}
+	
+	return $user_id;
+}
+
+/**
+ *	session_logout() - Log the user off the system.
+ *
+ *	This function destroys object associated with the current session,
+ *	making user "logged out".  Deletes both user and session cookies.
+ *
+ *	@return true/false
+ *
+ */
+function session_logout() {
+
+	// delete both session and username cookies
+	// NB: cookies must be deleted with the same scope parameters they were set with
+	//
+	session_cookie('session_ser', '');
+	session_cookie('username',
+								 '',
+								 $GLOBALS['sys_username_cookie_urlspace'], 
+								 0);
+
+	return true;
+}
+
+/**
+ *	session_login_valid() - Log the user to the system.
+ *
+ *	High-level function for user login. Check credentials, and if they
+ *	are valid, open new session.
+ *
+ *	@param		string	User name
+ *	@param		string	User password (in clear text)
+ *	@param		bool	Allow login to non-confirmed user account (only for confirmation of the very account)
+ *	@return true/false, if false reason is in global $feedback
+ *	@access public
+ *
+ */
+function session_login_valid($loginname, $passwd, $allowpending=0)  {
+	global $feedback;
+
+	if (!$loginname || !$passwd) {
+		$feedback = 'Missing Password Or users Name';
+		return false;
+	}
+
+	//get the users from the database using user_id and password
+	$res = db_query("
+		SELECT user_id,status
+		FROM users
+		WHERE user_name='$loginname' 
+		AND user_pw='".md5($passwd)."'
+	");
+	if (!$res || db_numrows($res) < 1) {
+		//invalid password or user_name
+		$feedback='Invalid Password or User Name';
+		return false;
+	} else {
+		// check status of this user
+		$usr = db_fetch_array($res);
+
+		// if allowpending (for verify.php) then allow
+		if ($allowpending && ($usr['status'] == 'P')) {
+			//1;
+		} else {
+			if ($usr['status'] == 'S') { 
+				//acount suspended
+				$feedback = 'Account Suspended';
+				return false;
+			}
+			if ($usr['status'] == 'P') { 
+				//account pending
+				$feedback = 'Account Pending';
+				return false;
+			} 
+			if ($usr['status'] == 'D') { 
+				//account deleted
+				$feedback = 'Account Deleted';
+				return false;
+			}
+			if ($usr['status'] != 'A') {
+				//unacceptable account flag
+				$feedback = 'Account Not Active';
+				return false;
+			}
+		}
+		//create a new session
+		session_set_new(db_result($res,0,'user_id'));
+
+		return true;
+	}
+}
+
+/**
+ *	session_check_ip() - Check 2 IP addresses for match
+ *
+ *	This function checks that IP addresses match with the
+ *	given fuzz factor (within 255.255.0.0 subnet).
+ *
+ *	@param		string	The old IP address
+ *	@param		string	The new IP address
+ *	@return true/false
+ *	@access private
+ */
+function session_check_ip($oldip,$newip) {
+	$eoldip = explode(".",$oldip);
+	$enewip = explode(".",$newip);
+	
+	// ## require same class b subnet
+	if (($eoldip[0]!=$enewip[0])||($eoldip[1]!=$enewip[1])) {
+		return 0;
+	} else {
+		return 1;
+	}
+}
+
+/**
+ *	session_issecure() - Check if current session is secure
+ *
+ *	@return true/false
+ *	@access public
+ */
+function session_issecure() {
+	return (getenv('SERVER_PORT') == '443');
+}
+
+/**
+ *	session_cookie() - Set a session cookie
+ *
+ *	Set a cookie with default temporal scope of the current browser session
+ *	and URL space of the current webserver
+ *
+ *	@param		string	Name of cookie
+ *	@param		string	Value of cookie
+ *	@param		string	Domain scope (default '')
+ *	@param		string	Expiration time in UNIX seconds (default 0)
+ *	@return true/false
+ */
+function session_cookie($name ,$value, $domain = '', $expiration = 0) {
+	setcookie($name, $value, $expiration, '/', $domain, 0);
+}
+
+/**
+ *	session_redirect() - Redirect browser within the site
+ *
+ *	@param		string	Absolute path within the site
+ *	@return never returns
+ */
+function session_redirect($loc) {
+	header('Location: http' . (session_issecure()?'s':'') . '://' . getenv('HTTP_HOST') . $loc);
+	print("\n\n");
+	exit;
+}
+
+/**
+ *	session_require() - Convenience function to easily enforce permissions
+ *
+ *	Calling page will terminate with error message if current user
+ *	fails checks.
+ *
+ *	@param		array	Associative array specifying criteria
+ *	@return does not return if check is failed
+ *
+ */
+function session_require($req) {
+	if (!user_isloggedin()) {
+		exit_not_logged_in();	
+		//exit_permission_denied();
+	}
+
+	if ($req['group']) {
+		$group =& group_get_object($req['group']);
+		exit_assert_object($group,'Group');
+
+		$perm =& $group->getPermission( session_get_user() );
+		exit_assert_object($perm,'Permission');
+
+		if ($req['admin_flags']) {
+			//$query .= " AND admin_flags = '$req[admin_flags]'";	
+			if (!$perm->isAdmin()) {
+				exit_permission_denied();
+			}
+		} else {
+			if (!$perm->isMember()) {
+				exit_permission_denied();
+			}
+		}
+	} else if ($req['isloggedin']) {
+		//no need to check as long as the check is present at top of function
+	} else {
+		exit_permission_denied();
+	}
+}
+
+/**
+ *	session_set_new() - Setup session for the given user
+ *
+ *	This function sets up SourceForge session for the given user,
+ *	making one be "logged in".
+ *
+ *	@param		int		The user ID
+ *	@return none
+ */
+function session_set_new($user_id) {
+	global $G_SESSION;
+
+	// set session cookie
+  //
+	$cookie = session_build_session_cookie($user_id);
+	session_cookie("session_ser", $cookie);
+
+	db_query("
+		INSERT INTO session (session_hash, ip_addr, time, user_id) 
+		VALUES (
+			'".session_get_session_cookie_hash($cookie)."', 
+			'".$GLOBALS['REMOTE_ADDR']."',
+			'".time()."',
+			$user_id
+		)
+	");
+
+	// check uniqueness of the session_hash in the database
+	// 
+	$res = session_getdata($user_id);
+
+	if (!$res || db_numrows($res) < 1) {
+		exit_error("ERROR","ERROR - Cannot initialize session: ".db_error());
+	} else {
+
+		//set up the new user object
+		//
+		$G_SESSION = user_get_object($user_id,$res);
+		if ($G_SESSION) {
+			$G_SESSION->setLoggedIn(true);
+		}
+	}
+
+	// set username cookie for *.hostname.tld, expiration set in local.inc
+	//
+	session_cookie('username', 
+								 session_build_username_cookie($G_SESSION->getUnixName()),
+								 $GLOBALS['sys_username_cookie_urlspace'], 
+								 time() + $GLOBALS['sys_username_cookie_expiration']);
+}
+
+/**
+ *	Private optimization function for logins - fetches user data, language, and session
+ *	with one query
+ *
+ *  @param		int		The user ID
+ *	@access private
+ */
+function session_getdata($user_id) {
+	$res=db_query("SELECT
+	
+		u.*,sl.language_id, sl.name, sl.filename, sl.classname, sl.language_code
+
+		FROM users u,
+		supported_languages sl
+		WHERE u.language=sl.language_id 
+		AND u.user_id='$user_id'
+	");
+	return $res;
+}
+
+/**
+ *	session_set() - Re-initialize session for the logged in user
+ *
+ *	This function checks that the user is logged in and if so, initialize
+ *	internal session environment.
+ *
+ *	@return none
+ */
+function session_set() {
+	global $G_SESSION;
+	global $session_ser, $session_key;
+
+	// assume bad session_hash and session. If all checks work, then allow
+	// otherwise make new session
+	$id_is_good = false;
+
+	// If user says he's logged in (by presenting cookie), check that
+	if ($session_ser) {
+
+		$user_id = session_check_session_cookie($session_ser);
+
+		if ($user_id) {
+
+			$result = session_getdata($user_id);
+
+			if (db_numrows($result) > 0) {
+				$id_is_good = true;
+			}
+		}
+	} // else (hash does not exist) or (session hash is bad)
+
+	if ($id_is_good) {
+		$G_SESSION = user_get_object($user_id, $result);
+		if ($G_SESSION) {
+			$G_SESSION->setLoggedIn(true);
+		}
+	} else {
+		$G_SESSION=false;
+
+		// if there was bad session cookie, kill it and the user cookie
+		//
+		if ($session_ser) {
+			session_logout();
+		}
+	}
+}
+
+/**
+ *	session_get_user() - Wrapper function to return the User object for the logged in user.
+ *	
+ *	@return User
+ *	@access public
+ */
+function &session_get_user() {
+	global $G_SESSION;
+	return $G_SESSION;
+}
+
+/**
+ *  user_getid()
+ *  Get user_id of logged in user
+ */
+
+function user_getid() {
+	global $G_SESSION;
+	if ($G_SESSION) {
+		return $G_SESSION->getID();
+	} else {
+		return false;
+	}
+}
+
+/**
+ *  user_isloggedin()
+ *  See if user is logged in
+ */
+function user_isloggedin() {
+	global $G_SESSION;
+	
+	if ($G_SESSION) {
+		return $G_SESSION->isLoggedIn();
+	} else {
+		return false;
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/timezones.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/timezones.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/timezones.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,471 @@
+<?php
+
+$TZs[]='US/Alaska';
+$TZs[]='US/Aleutian';
+$TZs[]='US/Arizona';
+$TZs[]='US/Central';
+$TZs[]='US/Eastern';
+$TZs[]='US/East-Indiana';
+$TZs[]='US/Hawaii';
+$TZs[]='US/Indiana-Starke';
+$TZs[]='US/Michigan';
+$TZs[]='US/Mountain';
+$TZs[]='US/Pacific';
+$TZs[]='US/Samoa';
+$TZs[]='Africa/Abidjan';
+$TZs[]='Africa/Accra';
+$TZs[]='Africa/Addis_Ababa';
+$TZs[]='Africa/Algiers';
+$TZs[]='Africa/Asmera';
+$TZs[]='Africa/Bamako';
+$TZs[]='Africa/Bangui';
+$TZs[]='Africa/Banjul';
+$TZs[]='Africa/Bissau';
+$TZs[]='Africa/Blantyre';
+$TZs[]='Africa/Brazzaville';
+$TZs[]='Africa/Bujumbura';
+$TZs[]='Africa/Cairo';
+$TZs[]='Africa/Casablanca';
+$TZs[]='Africa/Ceuta';
+$TZs[]='Africa/Conakry';
+$TZs[]='Africa/Dakar';
+$TZs[]='Africa/Dar_es_Salaam';
+$TZs[]='Africa/Djibouti';
+$TZs[]='Africa/Douala';
+$TZs[]='Africa/El_Aaiun';
+$TZs[]='Africa/Freetown';
+$TZs[]='Africa/Gaborone';
+$TZs[]='Africa/Harare';
+$TZs[]='Africa/Johannesburg';
+$TZs[]='Africa/Kampala';
+$TZs[]='Africa/Khartoum';
+$TZs[]='Africa/Kigali';
+$TZs[]='Africa/Kinshasa';
+$TZs[]='Africa/Lagos';
+$TZs[]='Africa/Libreville';
+$TZs[]='Africa/Lome';
+$TZs[]='Africa/Luanda';
+$TZs[]='Africa/Lubumbashi';
+$TZs[]='Africa/Lusaka';
+$TZs[]='Africa/Malabo';
+$TZs[]='Africa/Maputo';
+$TZs[]='Africa/Maseru';
+$TZs[]='Africa/Mbabane';
+$TZs[]='Africa/Mogadishu';
+$TZs[]='Africa/Monrovia';
+$TZs[]='Africa/Nairobi';
+$TZs[]='Africa/Ndjamena';
+$TZs[]='Africa/Niamey';
+$TZs[]='Africa/Nouakchott';
+$TZs[]='Africa/Ouagadougou';
+$TZs[]='Africa/Porto-Novo';
+$TZs[]='Africa/Sao_Tome';
+$TZs[]='Africa/Timbuktu';
+$TZs[]='Africa/Tripoli';
+$TZs[]='Africa/Tunis';
+$TZs[]='Africa/Windhoek';
+$TZs[]='America/Adak';
+$TZs[]='America/Anchorage';
+$TZs[]='America/Anguilla';
+$TZs[]='America/Antigua';
+$TZs[]='America/Araguaina';
+$TZs[]='America/Aruba';
+$TZs[]='America/Asuncion';
+$TZs[]='America/Atka';
+$TZs[]='America/Barbados';
+$TZs[]='America/Belem';
+$TZs[]='America/Belize';
+$TZs[]='America/Boa_Vista';
+$TZs[]='America/Bogota';
+$TZs[]='America/Boise';
+$TZs[]='America/Buenos_Aires';
+$TZs[]='America/Cambridge_Bay';
+$TZs[]='America/Cancun';
+$TZs[]='America/Caracas';
+$TZs[]='America/Catamarca';
+$TZs[]='America/Cayenne';
+$TZs[]='America/Cayman';
+$TZs[]='America/Chicago';
+$TZs[]='America/Chihuahua';
+$TZs[]='America/Cordoba';
+$TZs[]='America/Costa_Rica';
+$TZs[]='America/Cuiaba';
+$TZs[]='America/Curacao';
+$TZs[]='America/Dawson';
+$TZs[]='America/Dawson_Creek';
+$TZs[]='America/Denver';
+$TZs[]='America/Detroit';
+$TZs[]='America/Dominica';
+$TZs[]='America/Edmonton';
+$TZs[]='America/El_Salvador';
+$TZs[]='America/Ensenada';
+$TZs[]='America/Fortaleza';
+$TZs[]='America/Fort_Wayne';
+$TZs[]='America/Glace_Bay';
+$TZs[]='America/Godthab';
+$TZs[]='America/Goose_Bay';
+$TZs[]='America/Grand_Turk';
+$TZs[]='America/Grenada';
+$TZs[]='America/Guadeloupe';
+$TZs[]='America/Guatemala';
+$TZs[]='America/Guayaquil';
+$TZs[]='America/Guyana';
+$TZs[]='America/Halifax';
+$TZs[]='America/Havana';
+$TZs[]='America/Hermosillo';
+$TZs[]='America/Indiana/Indianapolis';
+$TZs[]='America/Indiana/Knox';
+$TZs[]='America/Indiana/Marengo';
+$TZs[]='America/Indiana/Vevay';
+$TZs[]='America/Indianapolis';
+$TZs[]='America/Inuvik';
+$TZs[]='America/Iqaluit';
+$TZs[]='America/Jamaica';
+$TZs[]='America/Jujuy';
+$TZs[]='America/Juneau';
+$TZs[]='America/Knox_IN';
+$TZs[]='America/La_Paz';
+$TZs[]='America/Lima';
+$TZs[]='America/Los_Angeles';
+$TZs[]='America/Louisville';
+$TZs[]='America/Maceio';
+$TZs[]='America/Managua';
+$TZs[]='America/Manaus';
+$TZs[]='America/Martinique';
+$TZs[]='America/Mazatlan';
+$TZs[]='America/Mendoza';
+$TZs[]='America/Menominee';
+$TZs[]='America/Mexico_City';
+$TZs[]='America/Miquelon';
+$TZs[]='America/Montevideo';
+$TZs[]='America/Montreal';
+$TZs[]='America/Montserrat';
+$TZs[]='America/Nassau';
+$TZs[]='America/New_York';
+$TZs[]='America/Nipigon';
+$TZs[]='America/Nome';
+$TZs[]='America/Noronha';
+$TZs[]='America/Panama';
+$TZs[]='America/Pangnirtung';
+$TZs[]='America/Paramaribo';
+$TZs[]='America/Phoenix';
+$TZs[]='America/Port-au-Prince';
+$TZs[]='America/Porto_Acre';
+$TZs[]='America/Port_of_Spain';
+$TZs[]='America/Porto_Velho';
+$TZs[]='America/Puerto_Rico';
+$TZs[]='America/Rainy_River';
+$TZs[]='America/Rankin_Inlet';
+$TZs[]='America/Regina';
+$TZs[]='America/Rosario';
+$TZs[]='America/Santiago';
+$TZs[]='America/Santo_Domingo';
+$TZs[]='America/Sao_Paulo';
+$TZs[]='America/Scoresbysund';
+$TZs[]='America/Shiprock';
+$TZs[]='America/St_Johns';
+$TZs[]='America/St_Kitts';
+$TZs[]='America/St_Lucia';
+$TZs[]='America/St_Thomas';
+$TZs[]='America/St_Vincent';
+$TZs[]='America/Swift_Current';
+$TZs[]='America/Tegucigalpa';
+$TZs[]='America/Thule';
+$TZs[]='America/Thunder_Bay';
+$TZs[]='America/Tijuana';
+$TZs[]='America/Tortola';
+$TZs[]='America/Vancouver';
+$TZs[]='America/Virgin';
+$TZs[]='America/Whitehorse';
+$TZs[]='America/Winnipeg';
+$TZs[]='America/Yakutat';
+$TZs[]='America/Yellowknife';
+$TZs[]='Antarctica/Casey';
+$TZs[]='Antarctica/Davis';
+$TZs[]='Antarctica/DumontDUrville';
+$TZs[]='Antarctica/Mawson';
+$TZs[]='Antarctica/McMurdo';
+$TZs[]='Antarctica/Palmer';
+$TZs[]='Antarctica/South_Pole';
+$TZs[]='Antarctica/Syowa';
+$TZs[]='Arctic/Longyearbyen';
+$TZs[]='Asia/Aden';
+$TZs[]='Asia/Almaty';
+$TZs[]='Asia/Amman';
+$TZs[]='Asia/Anadyr';
+$TZs[]='Asia/Aqtau';
+$TZs[]='Asia/Aqtobe';
+$TZs[]='Asia/Ashkhabad';
+$TZs[]='Asia/Baghdad';
+$TZs[]='Asia/Bahrain';
+$TZs[]='Asia/Baku';
+$TZs[]='Asia/Bangkok';
+$TZs[]='Asia/Beirut';
+$TZs[]='Asia/Bishkek';
+$TZs[]='Asia/Brunei';
+$TZs[]='Asia/Calcutta';
+$TZs[]='Asia/Chungking';
+$TZs[]='Asia/Colombo';
+$TZs[]='Asia/Dacca';
+$TZs[]='Asia/Damascus';
+$TZs[]='Asia/Dili';
+$TZs[]='Asia/Dubai';
+$TZs[]='Asia/Dushanbe';
+$TZs[]='Asia/Gaza';
+$TZs[]='Asia/Harbin';
+$TZs[]='Asia/Hong_Kong';
+$TZs[]='Asia/Hovd';
+$TZs[]='Asia/Irkutsk';
+$TZs[]='Asia/Istanbul';
+$TZs[]='Asia/Jakarta';
+$TZs[]='Asia/Jayapura';
+$TZs[]='Asia/Jerusalem';
+$TZs[]='Asia/Kabul';
+$TZs[]='Asia/Kamchatka';
+$TZs[]='Asia/Karachi';
+$TZs[]='Asia/Kashgar';
+$TZs[]='Asia/Katmandu';
+$TZs[]='Asia/Krasnoyarsk';
+$TZs[]='Asia/Kuala_Lumpur';
+$TZs[]='Asia/Kuching';
+$TZs[]='Asia/Kuwait';
+$TZs[]='Asia/Macao';
+$TZs[]='Asia/Magadan';
+$TZs[]='Asia/Manila';
+$TZs[]='Asia/Muscat';
+$TZs[]='Asia/Nicosia';
+$TZs[]='Asia/Novosibirsk';
+$TZs[]='Asia/Omsk';
+$TZs[]='Asia/Phnom_Penh';
+$TZs[]='Asia/Pyongyang';
+$TZs[]='Asia/Qatar';
+$TZs[]='Asia/Rangoon';
+$TZs[]='Asia/Riyadh';
+$TZs[]='Asia/Riyadh87';
+$TZs[]='Asia/Riyadh88';
+$TZs[]='Asia/Riyadh89';
+$TZs[]='Asia/Saigon';
+$TZs[]='Asia/Samarkand';
+$TZs[]='Asia/Seoul';
+$TZs[]='Asia/Shanghai';
+$TZs[]='Asia/Singapore';
+$TZs[]='Asia/Taipei';
+$TZs[]='Asia/Tashkent';
+$TZs[]='Asia/Tbilisi';
+$TZs[]='Asia/Tehran';
+$TZs[]='Asia/Tel_Aviv';
+$TZs[]='Asia/Thimbu';
+$TZs[]='Asia/Tokyo';
+$TZs[]='Asia/Ujung_Pandang';
+$TZs[]='Asia/Ulaanbaatar';
+$TZs[]='Asia/Ulan_Bator';
+$TZs[]='Asia/Urumqi';
+$TZs[]='Asia/Vientiane';
+$TZs[]='Asia/Vladivostok';
+$TZs[]='Asia/Yakutsk';
+$TZs[]='Asia/Yekaterinburg';
+$TZs[]='Asia/Yerevan';
+$TZs[]='Atlantic/Azores';
+$TZs[]='Atlantic/Bermuda';
+$TZs[]='Atlantic/Canary';
+$TZs[]='Atlantic/Cape_Verde';
+$TZs[]='Atlantic/Faeroe';
+$TZs[]='Atlantic/Jan_Mayen';
+$TZs[]='Atlantic/Madeira';
+$TZs[]='Atlantic/Reykjavik';
+$TZs[]='Atlantic/South_Georgia';
+$TZs[]='Atlantic/Stanley';
+$TZs[]='Atlantic/St_Helena';
+$TZs[]='Australia/ACT';
+$TZs[]='Australia/Adelaide';
+$TZs[]='Australia/Brisbane';
+$TZs[]='Australia/Broken_Hill';
+$TZs[]='Australia/Canberra';
+$TZs[]='Australia/Darwin';
+$TZs[]='Australia/Hobart';
+$TZs[]='Australia/LHI';
+$TZs[]='Australia/Lindeman';
+$TZs[]='Australia/Lord_Howe';
+$TZs[]='Australia/Melbourne';
+$TZs[]='Australia/North';
+$TZs[]='Australia/NSW';
+$TZs[]='Australia/Perth';
+$TZs[]='Australia/Queensland';
+$TZs[]='Australia/South';
+$TZs[]='Australia/Sydney';
+$TZs[]='Australia/Tasmania';
+$TZs[]='Australia/Victoria';
+$TZs[]='Australia/West';
+$TZs[]='Australia/Yancowinna';
+$TZs[]='Brazil/Acre';
+$TZs[]='Brazil/DeNoronha';
+$TZs[]='Brazil/East';
+$TZs[]='Brazil/West';
+$TZs[]='Canada/Atlantic';
+$TZs[]='Canada/Central';
+$TZs[]='Canada/Eastern';
+$TZs[]='Canada/East-Saskatchewan';
+$TZs[]='Canada/Mountain';
+$TZs[]='Canada/Newfoundland';
+$TZs[]='Canada/Pacific';
+$TZs[]='Canada/Saskatchewan';
+$TZs[]='Canada/Yukon';
+$TZs[]='CET';
+$TZs[]='Chile/Continental';
+$TZs[]='Chile/EasterIsland';
+$TZs[]='China/Beijing';
+$TZs[]='China/Shanghai';
+$TZs[]='CST6CDT';
+$TZs[]='Cuba';
+$TZs[]='EET';
+$TZs[]='Egypt';
+$TZs[]='Eire';
+$TZs[]='EST';
+$TZs[]='EST5EDT';
+$TZs[]='Europe/Amsterdam';
+$TZs[]='Europe/Andorra';
+$TZs[]='Europe/Athens';
+$TZs[]='Europe/Belfast';
+$TZs[]='Europe/Belgrade';
+$TZs[]='Europe/Berlin';
+$TZs[]='Europe/Bratislava';
+$TZs[]='Europe/Brussels';
+$TZs[]='Europe/Bucharest';
+$TZs[]='Europe/Budapest';
+$TZs[]='Europe/Chisinau';
+$TZs[]='Europe/Copenhagen';
+$TZs[]='Europe/Dublin';
+$TZs[]='Europe/Gibraltar';
+$TZs[]='Europe/Helsinki';
+$TZs[]='Europe/Istanbul';
+$TZs[]='Europe/Kaliningrad';
+$TZs[]='Europe/Kiev';
+$TZs[]='Europe/Lisbon';
+$TZs[]='Europe/Ljubljana';
+$TZs[]='Europe/London';
+$TZs[]='Europe/Luxembourg';
+$TZs[]='Europe/Madrid';
+$TZs[]='Europe/Malta';
+$TZs[]='Europe/Minsk';
+$TZs[]='Europe/Monaco';
+$TZs[]='Europe/Moscow';
+$TZs[]='Europe/Oslo';
+$TZs[]='Europe/Paris';
+$TZs[]='Europe/Prague';
+$TZs[]='Europe/Riga';
+$TZs[]='Europe/Rome';
+$TZs[]='Europe/Samara';
+$TZs[]='Europe/San_Marino';
+$TZs[]='Europe/Sarajevo';
+$TZs[]='Europe/Simferopol';
+$TZs[]='Europe/Skopje';
+$TZs[]='Europe/Sofia';
+$TZs[]='Europe/Stockholm';
+$TZs[]='Europe/Tallinn';
+$TZs[]='Europe/Tirane';
+$TZs[]='Europe/Tiraspol';
+$TZs[]='Europe/Uzhgorod';
+$TZs[]='Europe/Vaduz';
+$TZs[]='Europe/Vatican';
+$TZs[]='Europe/Vienna';
+$TZs[]='Europe/Vilnius';
+$TZs[]='Europe/Warsaw';
+$TZs[]='Europe/Zagreb';
+$TZs[]='Europe/Zaporozhye';
+$TZs[]='Europe/Zurich';
+$TZs[]='Factory';
+$TZs[]='GB';
+$TZs[]='GB-Eire';
+$TZs[]='GMT';
+$TZs[]='GMT0';
+$TZs[]='GMT-0';
+$TZs[]='GMT+0';
+$TZs[]='Greenwich';
+$TZs[]='Hongkong';
+$TZs[]='HST';
+$TZs[]='Iceland';
+$TZs[]='Indian/Antananarivo';
+$TZs[]='Indian/Chagos';
+$TZs[]='Indian/Christmas';
+$TZs[]='Indian/Cocos';
+$TZs[]='Indian/Comoro';
+$TZs[]='Indian/Kerguelen';
+$TZs[]='Indian/Mahe';
+$TZs[]='Indian/Maldives';
+$TZs[]='Indian/Mauritius';
+$TZs[]='Indian/Mayotte';
+$TZs[]='Indian/Reunion';
+$TZs[]='Iran';
+$TZs[]='Israel';
+$TZs[]='Jamaica';
+$TZs[]='Japan';
+$TZs[]='Kwajalein';
+$TZs[]='Libya';
+$TZs[]='MET';
+$TZs[]='Mexico/BajaNorte';
+$TZs[]='Mexico/BajaSur';
+$TZs[]='Mexico/General';
+$TZs[]='Mideast/Riyadh87';
+$TZs[]='Mideast/Riyadh88';
+$TZs[]='Mideast/Riyadh89';
+$TZs[]='MST';
+$TZs[]='MST7MDT';
+$TZs[]='Navajo';
+$TZs[]='NZ';
+$TZs[]='NZ-CHAT';
+$TZs[]='Pacific/Apia';
+$TZs[]='Pacific/Auckland';
+$TZs[]='Pacific/Chatham';
+$TZs[]='Pacific/Easter';
+$TZs[]='Pacific/Efate';
+$TZs[]='Pacific/Enderbury';
+$TZs[]='Pacific/Fakaofo';
+$TZs[]='Pacific/Fiji';
+$TZs[]='Pacific/Funafuti';
+$TZs[]='Pacific/Galapagos';
+$TZs[]='Pacific/Gambier';
+$TZs[]='Pacific/Guadalcanal';
+$TZs[]='Pacific/Guam';
+$TZs[]='Pacific/Honolulu';
+$TZs[]='Pacific/Johnston';
+$TZs[]='Pacific/Kiritimati';
+$TZs[]='Pacific/Kosrae';
+$TZs[]='Pacific/Kwajalein';
+$TZs[]='Pacific/Majuro';
+$TZs[]='Pacific/Marquesas';
+$TZs[]='Pacific/Midway';
+$TZs[]='Pacific/Nauru';
+$TZs[]='Pacific/Niue';
+$TZs[]='Pacific/Norfolk';
+$TZs[]='Pacific/Noumea';
+$TZs[]='Pacific/Pago_Pago';
+$TZs[]='Pacific/Palau';
+$TZs[]='Pacific/Pitcairn';
+$TZs[]='Pacific/Ponape';
+$TZs[]='Pacific/Port_Moresby';
+$TZs[]='Pacific/Rarotonga';
+$TZs[]='Pacific/Saipan';
+$TZs[]='Pacific/Samoa';
+$TZs[]='Pacific/Tahiti';
+$TZs[]='Pacific/Tarawa';
+$TZs[]='Pacific/Tongatapu';
+$TZs[]='Pacific/Truk';
+$TZs[]='Pacific/Wake';
+$TZs[]='Pacific/Wallis';
+$TZs[]='Pacific/Yap';
+$TZs[]='Poland';
+$TZs[]='Portugal';
+$TZs[]='PRC';
+$TZs[]='PST8PDT';
+$TZs[]='ROC';
+$TZs[]='ROK';
+$TZs[]='Singapore';
+$TZs[]='Turkey';
+$TZs[]='UCT';
+$TZs[]='Universal';
+$TZs[]='UTC';
+$TZs[]='WET';
+$TZs[]='W-SU';
+$TZs[]='Zulu';
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/utils.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/utils.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/utils.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,570 @@
+<?php
+/**
+ *
+ * utils.php - Misc utils common to all aspects of the site
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+
+
+/**
+ * util_check_fileupload() - determines if a filename is appropriate for upload
+ *
+ * @param       string  The name of the file being uploaded
+ */
+function util_check_fileupload($filename) {
+
+        /* Empty file is a valid file.
+           This is because this function should be called
+           unconditionally at the top of submit action processing
+           and many forms have optional file upload. */
+        if ($filename == 'none' || $filename == '') {
+        	return true;
+        }
+
+        /* This should be enough... */
+        if (!is_uploaded_file($filename)) {
+        	return false;
+        }
+        /* This should be enough... */
+        if (!is_uploaded_file($filename)) {
+        	return false;
+        }
+        /* ... but we'd rather be paranoic */
+	if (strstr($filename, '..')) {
+		return false;
+	}
+	if (!is_file($filename)) {
+		return false;
+	}
+	if (!file_exists($filename)) {
+		return false;
+	}
+	if (dirname($filename) != '/tmp') {
+		return false;
+	}
+	return true;
+}
+
+/**
+ * util_send_mail() - Send email
+ * This function should be used in place of the PHP mail() function
+ *
+ * @param		string	The email recipients address
+ * @param		string	The email subject
+ * @param		string	The body of the email message
+ * @param		string	The optional email sender address.  Defaults to 'noreply@'
+ * @param		string	The addresses to blind-carbon-copy this message
+ *
+ */
+function util_send_mail($to,$subject,$body,$from='',$BCC='') {
+	if (!$from) {
+		$from='noreply@'.$GLOBALS['sys_default_domain'];
+	}
+	$body = "To: $to".
+		"\nFrom: $from".
+		"\nBCC: $BCC".
+		"\nSubject: $subject".
+		"\n\n$body";
+
+	exec ("/bin/echo \"". util_prep_string_for_sendmail($body) ."\" | /usr/sbin/sendmail -f$from -t -i >& /dev/null &");
+}
+
+/**
+ * util_prep_string_for_sendmail() - Prepares a string to be sent by email
+ *
+ * @param		string	The text to be prepared
+ * @returns The prepared text
+ *
+ */
+function util_prep_string_for_sendmail($body) {
+	//$body=str_replace("\\","\\\\",$body);
+	$body=str_replace("`","\\`",$body);
+	$body=str_replace("\"","\\\"",$body);
+	$body=str_replace("\$","\\\$",$body);
+	return $body;
+}
+
+/**
+ * util_unconvert_htmlspecialchars() - Unconverts a string converted with htmlspecialchars()
+ * This function requires PHP 4.0.3 or greater
+ *
+ * @param		string	The string to unconvert
+ * @returns The unconverted string
+ *
+ */
+function util_unconvert_htmlspecialchars($string) {
+	if (strlen($string) < 1) {
+		return '';
+	} else {
+		$trans = get_html_translation_table(HTMLENTITIES, ENT_QUOTES); 
+		$trans = array_flip ($trans);
+		$str = strtr ($string, $trans);
+		return $str;
+	}
+}
+
+/**
+ * util_result_columns_to_assoc() - Takes a result set and turns the column pair into an associative array
+ *
+ * @param		string	The result set ID
+ * @param		int		The column key
+ * @param		int		The optional column value
+ * @returns An associative array
+ *
+ */
+function util_result_columns_to_assoc($result, $col_key=0, $col_val=1) {
+	$rows=db_numrows($result);
+
+	if ($rows > 0) {
+		$arr=array();
+		for ($i=0; $i<$rows; $i++) {
+			$arr[db_result($result,$i,$col_key)]=db_result($result,$i,$col_val);
+		}
+	} else {
+		$arr=array();
+	}
+	return $arr;
+}
+
+/**
+ * util_result_column_to_array() - Takes a result set and turns the optional column into an array
+ *
+ * @param		int		The result set ID
+ * @param		int		The column
+ * @resturns An array
+ *
+ */
+function util_result_column_to_array($result, $col=0) {
+	/*
+		Takes a result set and turns the optional column into
+		an array
+	*/
+	$rows=db_numrows($result);
+
+	if ($rows > 0) {
+		$arr=array();
+		for ($i=0; $i<$rows; $i++) {
+			$arr[$i]=db_result($result,$i,$col);
+		}
+	} else {
+		$arr=array();
+	}
+	return $arr;
+}
+
+/**
+ * resutl_column_to_array() - DEPRECATED; DO NOT USE!
+ *
+ * @param		int		The result set ID
+ * @param		int		The column
+ * @see util_result_column_to_array()
+ * @deprecated
+ *
+ */
+function result_column_to_array($result, $col=0) {
+	/*
+		backwards compatibility
+	*/
+	return util_result_column_to_array($result, $col);
+}
+
+/**
+ * util_wrap_find_space() - Find the first space in a string
+ *
+ * @param		string	The string in which to find the space
+ * @param		int		The number of characters to wrap - Default is 80
+ * @returns The position of the first space
+ *
+ */
+function util_wrap_find_space($string,$wrap) {
+	//echo"\n";
+	$start=$wrap-5;
+	$try=1;
+	$found=false;
+	
+	while (!$found) {
+		//find the first space starting at $start
+		$pos=@strpos($string,' ',$start);
+		
+		//if that space is too far over, go back and start more to the left
+		if (($pos > ($wrap+5)) || !$pos) {
+			$try++;
+			$start=($wrap-($try*5));
+			//if we've gotten so far left , just truncate the line
+			if ($start<=10) {
+				return $wrap;
+			}	   
+			$found=false;
+		} else {
+			$found=true;
+		}	   
+	}	   
+	
+	return $pos;
+}
+
+/**
+ * util_line_wrap() - Automatically linewrap text
+ *
+ * @param		string	The text to wrap
+ * @param		int		The number of characters to wrap - Default is 80
+ * @param		string	The line break to use - Default is '\n'
+ * @returns The wrapped text
+ *
+ */
+function util_line_wrap ($text, $wrap = 80, $break = "\n") {
+	$paras = explode("\n", $text);
+			
+	$result = array();
+	$i = 0;
+	while ($i < count($paras)) {
+		if (strlen($paras[$i]) <= $wrap) {
+			$result[] = $paras[$i];
+			$i++;
+		} else {
+			$pos=util_wrap_find_space($paras[$i],$wrap);
+			
+			$result[] = substr($paras[$i], 0, $pos);
+			
+			$new = trim(substr($paras[$i], $pos, strlen($paras[$i]) - $pos));
+			if ($new != '') {
+				$paras[$i] = $new;
+				$pos=util_wrap_find_space($paras[$i],$wrap);
+			} else {
+				$i++;
+			}	   
+		}	   
+	}			   
+	return implode($break, $result);
+}
+
+/**
+ * util_make_links() - Turn URL's into HREF's.
+ *
+ * @param		string	The URL
+ * @returns The HREF'ed URL
+ *
+ */
+function util_make_links ($data='') {
+	if(empty($data)) { return $data; }
+
+	$lines = split("\n",$data);
+	while ( list ($key,$line) = each ($lines)) {
+	        // When we come here, we usually have form input
+	        // encoded in entities. Our aim is to NOT include
+	        // angle brackets in the URL
+	        // (RFC2396; http://www.w3.org/Addressing/URL/5.1_Wrappers.html)
+		$line = str_replace('&gt;', "\1", $line);
+		$line = eregi_replace("([ \t]|^)www\."," http://www.",$line);
+		$text = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "<a href=\"\\1://\\2\\3\" target=\"_blank\" target=\"_new\">\\1://\\2\\3</a>", $line);
+		$text = eregi_replace("(([a-z0-9_]|\\-|\\.)+@([^[:space:]]*)([[:alnum:]-]))", "<a href=\"mailto:\\1\" target=\"_new\">\\1</a>", $text);
+		$text = str_replace("\1", '&gt;', $text);
+		$newText .= $text;
+	}
+	return $newText;
+}
+
+/**
+ * show_priority_colors_key() - Show the priority colors legend
+ *
+ */
+function show_priority_colors_key() {
+
+	echo '<P><B>Priority Colors:</B><BR>
+
+		<TABLE BORDER=0><TR>';
+
+	for ($i=1; $i<10; $i++) {
+		echo '
+			<TD BGCOLOR="'.get_priority_color($i).'">'.$i.'</TD>';
+	}
+	echo '</tr></table>';
+}
+
+/**
+ * utils_buildcheckboxarray() - Build a checkbox array
+ *
+ * @param		int		Number of options to be in the array
+ * @param		string	The name of the checkboxes
+ * @param		array	An array of boxes to be pre-checked
+ * 
+ */
+function utils_buildcheckboxarray($options,$name,$checked_array) {
+	$option_count=count($options);
+	$checked_count=count($checked_array);
+
+	for ($i=1; $i<=$option_count; $i++) {
+		echo '
+			<BR><INPUT type="checkbox" name="'.$name.'" value="'.$i.'"';
+		for ($j=0; $j<$checked_count; $j++) {
+			if ($i == $checked_array[$j]) {
+				echo ' CHECKED';
+			}
+		}
+		echo '> '.$options[$i];
+	}
+}
+
+/**
+ * GraphResult() - Takes a database result set and builds a graph.
+ * The first column should be the name, and the second column should be the values
+ * Be sure to include HTL_Graphs.php before using this function
+ * 
+ * @author Tim Perdue tperdue at valinux.com
+ * @param		int		The databse result set ID
+ * @param		string	The title of the graph
+ * 
+ */
+Function GraphResult($result,$title) {
+	$rows=db_numrows($result);
+
+	if ((!$result) || ($rows < 1)) {
+		echo 'None Found.';
+	} else {
+		$names=array();
+		$values=array();
+
+		for ($j=0; $j<db_numrows($result); $j++) {
+			if (db_result($result, $j, 0) != '' && db_result($result, $j, 1) != '' ) {
+				$names[$j]= db_result($result, $j, 0);
+				$values[$j]= db_result($result, $j, 1);
+			}
+		}
+
+	/*
+		This is another function detailed below
+	*/
+		GraphIt($names,$values,$title);
+	}
+}
+
+/**
+ * GraphIt() - Build a graph
+ * 
+ * @author Tim Perdue tperdue at valinux.com
+ * @param		array	An array of names
+ * @param		array	An array of values
+ * @param		string	The title of the graph
+ *
+ */
+Function GraphIt($name_string,$value_string,$title) {
+	GLOBAL $HTML;
+
+	$counter=count($name_string);
+
+	/*
+		Can choose any color you wish
+	*/
+	$bars=array();
+
+	for ($i = 0; $i < $counter; $i++) {
+		$bars[$i]=$HTML->COLOR_LTBACK1;
+	}
+
+	$counter=count($value_string);
+
+	/*
+		Figure the max_value passed in, so scale can be determined
+	*/
+
+	$max_value=0;
+
+	for ($i = 0; $i < $counter; $i++) {
+		if ($value_string[$i] > $max_value) {
+			$max_value=$value_string[$i];
+		}
+	}
+
+	if ($max_value < 1) {
+		$max_value=1;
+	}
+
+	/*
+		I want my graphs all to be 800 pixels wide, so that is my divisor
+	*/
+
+	$scale=(400/$max_value);
+
+	/*
+		I create a wrapper table around the graph that holds the title
+	*/
+
+	$title_arr=array();
+	$title_arr[]=$title;
+
+	echo html_build_list_table_top ($title_arr);
+	echo '<TR><TD>';
+	/*
+		Create an associate array to pass in. I leave most of it blank
+	*/
+
+	$vals =  array(
+	'vlabel'=>'',
+	'hlabel'=>'',
+	'type'=>'',
+	'cellpadding'=>'',
+	'cellspacing'=>'0',
+	'border'=>'',
+	'width'=>'',
+	'background'=>'',
+	'vfcolor'=>'',
+	'hfcolor'=>'',
+	'vbgcolor'=>'',
+	'hbgcolor'=>'',
+	'vfstyle'=>'',
+	'hfstyle'=>'',
+	'noshowvals'=>'',
+	'scale'=>$scale,
+	'namebgcolor'=>'',
+	'valuebgcolor'=>'',
+	'namefcolor'=>'',
+	'valuefcolor'=>'',
+	'namefstyle'=>'',
+	'valuefstyle'=>'',
+	'doublefcolor'=>'');
+
+	/*
+		This is the actual call to the HTML_Graphs class
+	*/
+
+	html_graph($name_string,$value_string,$bars,$vals);
+
+	echo '
+		</TD></TR></TABLE>
+		<!-- end outer graph table -->';
+}
+
+/**
+ * ShowResultSet() - Show a generic result set
+ * Very simple, plain way to show a generic result set
+ *
+ * @param		int		The result set ID
+ * @param		string	The title of the result set
+ * @param		bool	The option to turn URL's into links
+ * 
+ */
+Function  ShowResultSet($result,$title="Untitled",$linkify=false)  {
+	global $group_id,$HTML;
+
+	if  ($result)  {
+		$rows  =  db_numrows($result);
+		$cols  =  db_numfields($result);
+
+		echo '
+			<TABLE BORDER="0" WIDTH="100%">';
+
+		/*  Create the title  */
+
+		echo '
+		<TR BGCOLOR="'.$HTML->COLOR_HTMLBOX_TITLE.'">
+		<TD COLSPAN="'.$cols.'"><B><FONT COLOR="'. $HTML->FONTCOLOR_HTMLBOX_TITLE .'">'.$title.'</B></TD></TR>';
+
+		/*  Create  the  headers  */
+		echo '
+			<tr>';
+		for ($i=0; $i < $cols; $i++) {
+			echo '<td><B>'.db_fieldname($result,  $i).'</B></TD>';
+		}
+		echo '</tr>';
+
+		/*  Create the rows  */
+		for ($j = 0; $j < $rows; $j++) {
+			echo '<TR BGCOLOR="'. html_get_alt_row_color($j) .'">';
+			for ($i = 0; $i < $cols; $i++) {
+				if ($linkify && $i == 0) {
+					$link = '<A HREF="'.$PHP_SELF.'?';
+					$linkend = '</A>';
+					if ($linkify == "bug_cat") {
+						$link .= 'group_id='.$group_id.'&bug_cat_mod=y&bug_cat_id='.db_result($result, $j, 'bug_category_id').'">';
+					} else if($linkify == "bug_group") {
+						$link .= 'group_id='.$group_id.'&bug_group_mod=y&bug_group_id='.db_result($result, $j, 'bug_group_id').'">';
+					} else if($linkify == "patch_cat") {
+						$link .= 'group_id='.$group_id.'&patch_cat_mod=y&patch_cat_id='.db_result($result, $j, 'patch_category_id').'">';
+					} else if($linkify == "support_cat") {
+						$link .= 'group_id='.$group_id.'&support_cat_mod=y&support_cat_id='.db_result($result, $j, 'support_category_id').'">';
+					} else if($linkify == "pm_project") {
+						$link .= 'group_id='.$group_id.'&project_cat_mod=y&project_cat_id='.db_result($result, $j, 'group_project_id').'">';
+					} else {
+						$link = $linkend = '';
+					}
+				} else {
+					$link = $linkend = '';
+				}
+				echo '<td>'.$link . db_result($result,  $j,  $i) . $linkend.'</td>';
+			}
+			echo '</tr>';
+		}
+		echo '</table>';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ * validate_email() - Validate an email address
+ *
+ * @param		string	The address string to validate
+ * @returns true on success/false on error
+ *
+ */
+function validate_email ($address) {
+	return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $address));
+}
+
+/**
+ * util_is_valid_filename() - Verifies whether a file has a valid filename
+ *
+ * @param		string	The file to verify
+ * @returns true on success/false on error
+ *
+ */
+function util_is_valid_filename ($file) {
+	if (ereg("[]~`! ~@#\"$%^,&*();=|[{}<>?/]",$file)) {
+		return false;
+	} else {
+		if (strstr($file,'..')) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+}
+
+/**
+ * valid_hostname() - Validates a hostname string to make sure it doesn't contain invalid characters
+ * 
+ * @param		string	The optional hostname string
+ * @returns true on success/false on failur
+ *
+ */
+function valid_hostname ($hostname = "xyz") {
+
+	//bad char test
+	$invalidchars = eregi_replace("[-A-Z0-9\.]","",$hostname);
+
+	if (!empty($invalidchars)) {
+		return false;
+	}
+
+	//double dot, starts with a . or -
+	if (ereg("\.\.",$hostname) || ereg("^\.",$hostname) || ereg("^\-",$hostname)) {
+		return false;
+	}
+
+	$multipoint = explode(".",$hostname);
+
+	if (!(is_array($multipoint)) || ((count($multipoint) - 1) < 1)) {
+		return false;
+	}
+
+	return true;
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/include/vars.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/vars.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/vars.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,64 @@
+<?php
+
+/**
+  *
+  * Static variable array definitions.
+  * Note that array keys *cannot* be redefined as values are inserted into
+  * database tables.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+// Note that $LICENSE values are identical in content and order to those 
+// listed at: http://opensource.org/licenses/.  Note that the trove database
+// should match this list.
+//
+$LICENSE = array();
+
+// OSI licenses
+//
+$LICENSE['gpl']       = 'GNU General Public License (GPL)';
+$LICENSE['lgpl']      = 'GNU Library Public License (LGPL)';
+$LICENSE['bsd']       = 'BSD License';
+$LICENSE['mit']       = 'MIT License';
+$LICENSE['artistic']  = 'Artistic License';
+$LICENSE['mpl']       = 'Mozilla Public License 1.0 (MPL)';
+$LICENSE['qpl']       = 'Qt Public License (QPL)';
+$LICENSE['ibm']       = 'IBM Public License';
+$LICENSE['cvw']       = 'MITRE Collaborative Virtual Workspace License (CVW License)';
+$LICENSE['rscpl']     = 'Ricoh Source Code Public License';
+$LICENSE['python']    = 'Python License';
+$LICENSE['zlib']      = 'zlib/libpng License';
+$LICENSE['apache']    = 'Apache Software License';
+$LICENSE['vovida']    = 'Vovida Software License 1.0';
+$LICENSE['sissl']     = 'Sun Internet Standards Source License (SISSL)';
+$LICENSE['iosl']      = 'Intel Open Source License';
+$LICENSE['mpl11']     = 'Mozilla Public License 1.1 (MPL 1.1)';
+$LICENSE['jabber']    = 'Jabber Open Source License';
+$LICENSE['nokia']     = 'Nokia Open Source License';
+$LICENSE['sleepycat'] = 'Sleepycat License';
+$LICENSE['nethack']   = 'Nethack General Public License';
+$LICENSE['ibmcpl']    = 'IBM Common Public License';
+$LICENSE['apsl']      = 'Apple Public Source License';
+
+// non-OSI
+//
+$LICENSE['public']   = 'Public Domain';
+$LICENSE['website']  = 'Website Only';
+$LICENSE['other']    = 'Other/Proprietary License';
+
+// shell binary options
+//
+$SHELLS = array();
+$SHELLS[1] = '/bin/bash';
+$SHELLS[2] = '/bin/sh';
+$SHELLS[3] = '/bin/ksh';
+$SHELLS[4] = '/bin/tcsh';
+$SHELLS[5] = '/bin/csh';
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/pm/pm_data.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/pm/pm_data.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/pm/pm_data.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,616 @@
+<?php
+/**
+ * pm_data.php - Project Manager function library
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id: pm_data.php,v 1.5 2001/06/06 21:38:46 dbrogdon Exp $
+ *
+ */
+
+/**
+ * pm_data_get_tasks() - Return a result set of the 100 most recent tasks in this subproject
+ *
+ * @param		int		The ID of the project group
+ * @returns Database result set
+ *
+ */
+function pm_data_get_tasks ($group_project_id) {
+	global $pm_data_tasks;
+	if (!$pm_data_tasks["$group_project_id"]) {
+		$sql="SELECT project_task_id,summary ".
+			"FROM project_task ".
+			"WHERE group_project_id='$group_project_id' ".
+			"AND status_id <> '3' ORDER BY project_task_id DESC";
+		$pm_data_tasks["$group_project_id"]=db_query($sql,100);
+	}
+	return $pm_data_tasks["$group_project_id"];
+}
+
+/**
+ * pm_data_get_subprojects() - Return a result set of subprojects for this group
+ *
+ * @param		int		The ID of the group
+ * @returns Database result set
+ *
+ */
+function pm_data_get_subprojects ($group_id) {
+	global $pm_data_subprojects;
+	if (!$pm_data_subprojects["$group_id"]) {
+		$sql="SELECT group_project_id,project_name ".
+			"FROM project_group_list WHERE group_id='$group_id'";
+		$pm_data_subprojects["$group_id"]=db_query($sql);
+	}
+	return $pm_data_subprojects["$group_id"];
+}
+
+/**
+ * pm_data_get_other_tasks() - Return a result set of tasks in this subproject that do not equal 
+ *	the passed in task_id
+ *
+ * @param		int		The ID of the project group
+ * @param		int		The ID of the task
+ * @returns Database result set
+ *
+ */
+function pm_data_get_other_tasks ($group_project_id,$project_task_id) {
+	$sql="SELECT project_task_id,summary ".
+		"FROM project_task ".
+		"WHERE group_project_id='$group_project_id' ".
+		"AND status_id <> '3' ".
+		"AND project_task_id <> '$project_task_id' ORDER BY project_task_id DESC";
+	return db_query($sql,100);
+}
+
+/**
+ * pm_data_get_technicians() - Return a result set of pm technicians in this group
+ *
+ * @param		int		The ID of the group
+ * @returns Datbase result set
+ *
+ */
+function pm_data_get_technicians ($group_id) {
+	global $pm_data_technicians;
+	if (!$pm_data_technicians["$group_id"]) {
+		$sql="SELECT users.user_id,users.user_name ".
+			"FROM users,user_group ".
+			"WHERE users.user_id=user_group.user_id ".
+			"AND user_group.group_id='$group_id' ".
+			"AND user_group.project_flags IN (1,2) ".
+			"ORDER BY users.user_name";
+		$pm_data_technicians["$group_id"]=db_query($sql);
+	}
+	return $pm_data_technicians["$group_id"];
+}
+
+/**
+ * pm_data_get_dependent_tasks() - Return result set of ids of tasks that are dependent on this task
+ *
+ * @param		int		The project task ID
+ * @returns Database result set
+ *
+ */
+function pm_data_get_dependent_tasks ($project_task_id) {
+	$sql="SELECT is_dependent_on_task_id ".
+		"FROM project_dependencies ".
+		"WHERE project_task_id='$project_task_id'";
+	return db_query($sql);
+}
+
+/**
+ * pm_data_get_assigned_to() - Return result set of user_ids that are assigned this task
+ *
+ * @param		int		The project task ID
+ * @returns Database result set
+ *
+ */
+function pm_data_get_assigned_to ($project_task_id) {
+	$sql="SELECT assigned_to_id ".
+		"FROM project_assigned_to ".
+		"WHERE project_task_id='$project_task_id'";
+	return db_query($sql);
+}
+
+/**
+ * pm_data_get_statuses() - Return result set of statuses
+ *
+ * @returns Database result set
+ *
+ */
+function pm_data_get_statuses () {
+	global $pm_data_statuses;
+	if (!$pm_data_statuses) {
+		$sql='SELECT * FROM project_status';
+		$pm_data_statuses=db_query($sql);
+	}
+	return $pm_data_statuses;
+}
+
+/**
+ * pm_data_get_status_name() - Simply return status_name from bug_status
+ *
+ * @param		string	Status ID 
+ * @returns Databse result set on success/Error string on error
+ *
+ */
+function pm_data_get_status_name($string) {
+	$sql="SELECT * FROM project_status WHERE status_id='$string'";
+	$result=db_query($sql);
+	if ($result && db_numrows($result) > 0) {
+		return db_result($result,0,'status_name');
+	} else {
+		return 'Error - Not Found';
+	}
+}
+
+/**
+ * pm_data_get_group_name() - Simply return the resolution name for this id
+ *
+ * @param		int		The group project ID
+ * @returns Database result set on success/Error string one rror
+ *
+ */
+function pm_data_get_group_name($group_project_id) {
+	$sql="SELECT * FROM project_group_list WHERE group_project_id='$group_project_id'";
+	$result=db_query($sql);
+	if ($result && db_numrows($result) > 0) {
+		return db_result($result,0,'project_name');
+	} else {
+		return 'Error - Not Found';
+	}
+}
+
+/**
+ * pm_data_create_history() - Handle the insertion of history for these parameters
+ *
+ * @param		string	The field name
+ * @param		string	The old value
+ * @param		int		The project task ID
+ * @returns true on success/false on error
+ *
+ */
+function pm_data_create_history ($field_name,$old_value,$project_task_id) {
+	global $feedback;
+	
+	$sql="insert into project_history(project_task_id,field_name,old_value,mod_by,date) ".
+		"VALUES ('$project_task_id','$field_name','$old_value','".user_getid()."','".time()."')";
+	$result=db_query($sql);
+	if (!$result) {
+		$feedback .= ' ERROR IN AUDIT TRAIL - '.db_error();
+		return false;
+	} else {
+		return true;
+	}
+}
+
+/**
+ * pm_data_insert_assigned_to() - Insert the people this task is assigned to
+ *
+ * @param		array	An array of project ID's
+ * @param		int		The project task ID
+ * @returns true on success/false on error
+ *
+ */
+function pm_data_insert_assigned_to($array,$project_task_id) {
+	global $feedback;
+		
+	$user_count=count($array);
+	if ($user_count < 1) {
+		//if no users selected, insert user "none"
+		$sql="INSERT INTO project_assigned_to (project_task_id,assigned_to_id) 
+			VALUES ('$project_task_id','100')";
+		$result=db_query($sql);
+		if (!$result) {
+			return false;
+		} else {
+			return true;
+		}
+	} else {
+		for ($i=0; $i<$user_count; $i++) {
+			if (($user_count > 1) && ($array[$i]==100)) {
+				//don't insert the row if there's more 
+				//than 1 item selected and this item is the "none user"
+			} else {
+				$sql="INSERT INTO project_assigned_to (project_task_id,assigned_to_id) 
+					VALUES ('$project_task_id','$array[$i]')";
+				//echo "\n$sql";
+				$result=db_query($sql);
+				if (!$result) {
+					$feedback .= ' ERROR inserting project_assigned_to '.db_error();
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+}
+
+/**
+ * pm_data_update_assigned_to() - Delete then Insert the people this task is assigned to
+ *
+ * @param		array	An array of project ID's
+ * @param		int		The project task ID
+ * @returns Return value of pm_data_insert_assigned_to()
+ * @see pm_data_insert_assigned_do()
+ *
+ */
+function pm_data_update_assigned_to($array,$project_task_id) {
+	$toss=db_query("DELETE FROM project_assigned_to WHERE project_task_id='$project_task_id'");
+	return pm_data_insert_assigned_to($array,$project_task_id);
+}
+
+/**
+ * pm_data_insert_dependent_tasks() - Insert the list of dependencies
+ *
+ * @param		array	An array of project ID's
+ * @param		int		The project task ID
+ * @returns true on success/false on error
+ *
+ */
+function pm_data_insert_dependent_tasks($array,$project_task_id) {
+	global $feedback;
+		
+	$depend_count=count($array);
+	if ($depend_count < 1) {
+		//if no tasks selected, insert task "none"
+		$sql="INSERT INTO project_dependencies (project_task_id,is_dependent_on_task_id) 
+			VALUES ('$project_task_id','100')";
+		$result=db_query($sql);
+		if (!$result) {
+			return false;
+		} else {
+			return true;
+		}
+	} else {
+		for ($i=0; $i<$depend_count; $i++) {
+			if (($depend_count > 1) && ($array[$i]==100)) {
+				//don't insert the row if there's more
+				//than 1 item selected and this item is the "none task"
+			} else {
+				$sql="INSERT INTO project_dependencies (project_task_id,is_dependent_on_task_id) 
+					VALUES ('$project_task_id','$array[$i]')";
+				//echo "\n$sql";
+				$result=db_query($sql);
+	
+				if (!$result) {
+					$feedback .= ' ERROR inserting dependent_tasks '.db_error();
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+}
+
+/**
+ * pm_data_update_dependend_tasks() - Delete then Insert the list of dependencies
+ *
+ * @param		array	An array of project ID's
+ * @param		int		The project task ID
+ * @returns true on success/false on error
+ *
+ */
+function pm_data_update_dependent_tasks($array,$project_task_id) {
+	$toss=db_query("DELETE FROM project_dependencies WHERE project_task_id='$project_task_id'");
+	return pm_data_insert_dependent_tasks($array,$project_task_id);
+}
+
+/**
+ * pm_data_create_task() - Creates a new task in the task mgr
+ * NOTE: Does no handle security!!
+ *
+ * @param		int		The group project ID
+ * @param		int		The starting month
+ * @param		int		The starting day
+ * @param		int		The ending month
+ * @param		int		The ending day
+ * @param		int		The ending year
+ * @param		string	The task summary
+ * @param		string	Details of the task
+ * @param		int		The completed percentage of the task
+ * @param		int		The task priority
+ * @param		int		The number of hours exptected to complete this task
+ * @param		int		The user ID of the person to which this task is assigned
+ * @param		int		on The task ID on which this task depends
+ * @returns Nnew project_task_id or false and $feedback
+ *
+ */
+function pm_data_create_task ($group_project_id,$start_month,$start_day,$start_year,$end_month,$end_day,
+		$end_year,$summary,$details,$percent_complete,$priority,$hours,$assigned_to,$dependent_on) {
+
+	global $feedback;
+	if (!$group_project_id || !$start_month || !$start_day || !$start_year || !$end_month || !$end_day || 
+		!$end_year || !$summary || !$details || !$priority) {
+		$feedback .= ' ERROR - Missing Required Parameters ';
+		return false;
+	}
+
+	if (mktime(0,0,0,$start_month,$start_day,$start_year) > mktime(0,0,0,$end_month,$end_day,$end_year)) {
+		exit_error('Error','End Date Must Be Greater Than Begin Date');
+	}
+
+	$sql="INSERT INTO project_task (group_project_id,summary,details,percent_complete,".
+		"priority,hours,start_date,end_date,".
+		"created_by,status_id) VALUES ('$group_project_id','".htmlspecialchars($summary)."',".
+		"'".htmlspecialchars($details)."','$percent_complete','$priority','$hours','".
+		mktime(0,0,0,$start_month,$start_day,$start_year)."','".
+		mktime(0,0,0,$end_month,$end_day,$end_year)."','".user_getid()."','1')";
+
+	db_begin();
+
+	$result=db_query($sql);
+	$project_task_id=db_insertid($result,'project_task','project_task_id');
+
+	if (!$result || !$project_task_id) {
+		$feedback .= ' ERROR INSERTING ROW '.db_error();
+		db_rollback();
+		return false;
+	} else {
+		$feedback .= ' Successfully added task ';
+		if (!pm_data_insert_assigned_to($assigned_to,$project_task_id)) {
+			db_rollback();
+			$feedback .= ' ERROR inserting assigned to ';
+			return false;
+		}
+		if (!pm_data_insert_dependent_tasks($dependent_on,$project_task_id)) {
+			db_rollback();
+			$feedback .= ' ERROR inserting assigned to ';
+			return false;
+		}
+		mail_followup($project_task_id,$group_project_id,1);
+		db_commit();
+		return $project_task_id;
+	}
+}
+
+/**
+ * pm_data_update_task() - Update a task
+ * NOTE: Does not handle security at this time!
+ * This assumes that you have verified this $group_project_id truly belongs to this $group_id
+ * AND that this user is a project_task_admin
+ *
+ * @param		int		The group project ID
+ * @param		int		The starting month
+ * @param		int		The starting day
+ * @param		int		The ending month
+ * @param		int		The ending day
+ * @param		int		The ending year
+ * @param		string	The task summary
+ * @param		string	Details of the task
+ * @param		int		The completed percentage of the task
+ * @param		int		The task priority
+ * @param		int		The number of hours exptected to complete this task
+ * @param		int		The user ID of the person to which this task is assigned
+ * @param		int		The task ID on which this task depends
+ * @returns Nnew project_task_id or false and $feedback
+ * @returns true/false and $feedback string
+ *
+ */
+function pm_data_update_task ($group_project_id,$project_task_id,$start_month,$start_day,$start_year,
+		$end_month,$end_day,$end_year,$summary,$details,$percent_complete,$priority,$hours,
+		$status_id,$assigned_to,$dependent_on,$new_group_project_id,$group_id) {
+
+	global $feedback;
+	if (!$group_project_id || !$project_task_id || !$status_id || !$start_month || !$start_day || !$start_year || 
+		!$end_month || !$end_day || !$end_year || !$summary || !$priority || !$new_group_project_id || !$group_id) {
+		$feedback .= ' ERROR - Missing Parameters ';
+		return false;
+	}
+	$sql="SELECT * FROM project_task WHERE project_task_id='$project_task_id' AND group_project_id='$group_project_id'";
+
+	$result=db_query($sql);
+
+	if (db_numrows($result) < 1) {
+		$feedback .= ' ERROR - Task Doesn\'t Exist In This Subproject ';
+		return false;
+	}
+
+	/*
+		Enforce start date > end date
+	*/
+	if (mktime(0,0,0,$start_month,$start_day,$start_year) > mktime(0,0,0,$end_month,$end_day,$end_year)) {
+		$feedback .= ' ERROR - End Date Must Be Greater Than Start Date ';
+		return false;
+	}
+
+	db_begin();
+
+	/*
+		If changing subproject, verify the new subproject belongs to this project
+	*/
+	if ($group_project_id != $new_group_project_id) {
+		$sql = "SELECT group_id FROM project_group_list WHERE group_project_id='$new_group_project_id'";
+		
+		if (db_result(db_query($sql),0,'group_id') != $group_id) {
+			$feedback .= ' You can not put this task into the subproject of another group. ';
+			db_rollback();
+			return false;
+		} else {
+			pm_data_create_history ('subproject_id',$group_project_id,$project_task_id);
+		}
+	}
+
+	/*
+		See which fields changed during the modification
+		and create audit trail
+	*/
+
+	if (db_result($result,0,'status_id') != $status_id)
+		{ pm_data_create_history ('status_id',db_result($result,0,'status_id'),$project_task_id);  }
+
+	if (db_result($result,0,'priority') != $priority)
+		{ pm_data_create_history ('priority',db_result($result,0,'priority'),$project_task_id);  }
+
+	if (db_result($result,0,'summary') != htmlspecialchars(stripslashes($summary)))
+		{ pm_data_create_history ('summary',addslashes(db_result($result,0,'summary')),$project_task_id);  }
+
+	if (db_result($result,0,'percent_complete') != $percent_complete)
+		{ pm_data_create_history ('percent_complete',db_result($result,0,'percent_complete'),$project_task_id);  }
+
+	if (db_result($result,0,'hours') != $hours)
+		{ pm_data_create_history ('hours',db_result($result,0,'hours'),$project_task_id);  }
+
+	if (db_result($result,0,'start_date') != mktime(0,0,0,$start_month,$start_day,$start_year))
+		{ pm_data_create_history ('start_date',db_result($result,0,'start_date'),$project_task_id);  }
+
+	if (db_result($result,0,'end_date') != mktime(0,0,0,$end_month,$end_day,$end_year))
+		{ pm_data_create_history ('end_date',db_result($result,0,'end_date'),$project_task_id);  }
+
+	/*
+		Details field is handled a little differently
+
+		Details are comments attached to bugs
+		They are still stored in the project_history (audit trail)
+		system, but they are not shown in the regular audit trail
+
+		Someday, these should technically be split into their own table.
+	*/
+	if ($details != '') 
+		{ pm_data_create_history ('details',htmlspecialchars($details),$project_task_id);  }
+
+	if (!pm_data_update_dependent_tasks($dependent_on,$project_task_id)) {
+		db_rollback();
+		$feedback .= ' ERROR updating dependent tasks ';
+		return false;
+	}
+	if (!pm_data_update_assigned_to($assigned_to,$project_task_id)) {
+		db_rollback();
+		$feedback .= ' ERROR updating assigned to ';
+		return false;
+	}
+
+	/*
+		Update the actual db record
+	*/
+	$sql="UPDATE project_task SET status_id='$status_id', priority='$priority',".
+		"summary='".htmlspecialchars($summary)."',start_date='".
+		mktime(0,0,0,$start_month,$start_day,$start_year)."',end_date='".
+		mktime(0,0,0,$end_month,$end_day,$end_year)."',hours='$hours',".
+		"percent_complete='$percent_complete', ".
+		"group_project_id='$new_group_project_id' ".
+		"WHERE project_task_id='$project_task_id' AND group_project_id='$group_project_id'";
+
+	$result=db_query($sql);
+	if (!$result) {
+		$feedback .= ' ERROR - Database Update Failed '.db_error();
+		db_rollback();
+		return false;
+	} else {
+		$feedback .= ' Successfully Modified Task ';
+		mail_followup($project_task_id,$new_group_project_id);
+		db_commit();
+		return true;
+	}
+
+}
+
+/**
+ * mail_followup() - Send a message to the person who opened this task and the person(s) it is assigned to
+ * Accepts the unique id of a task, its group project id and optionally a list of additional addresses to send to
+ *
+ * @param		int		The project task ID
+ * @param		int		The group project ID
+ * @param		string	The additional addresses to send the followup
+ * @param		bool	The flag of whether this is a new task or not
+ *
+ */
+function mail_followup($project_task_id,$group_project_id,$more_addresses=false,$new_task=0) {
+	global $sys_datefmt,$feedback;
+
+	$sql="SELECT project_task.*, project_group_list.*, groups.group_name,groups.new_task_address, ".
+		"groups.send_all_tasks,project_status.status_name,users.email, ".
+                "users.user_name AS creator_name ".
+		"FROM project_task,project_group_list,project_status,users,groups ".
+		"WHERE project_task_id='$project_task_id' ".
+		"AND project_task.group_project_id='$group_project_id' ".
+		"AND project_task.status_id=project_status.status_id ".
+		"AND project_task.group_project_id=project_group_list.group_project_id ".
+		"AND groups.group_id=project_group_list.group_id ".
+		"AND project_task.created_by=users.user_id";
+		
+	$result=db_query($sql);
+	
+	if ($result && db_numrows($result) > 0) {
+	
+		// Send a message to the task creator
+		$to = db_result($result,0,'email');
+
+		// Build the list of developers assigned this task
+		$sql="SELECT users.email AS Email,users.user_name ".
+			"FROM users,project_assigned_to ".
+			"WHERE project_assigned_to.project_task_id='$project_task_id' ".
+			"AND users.user_id=project_assigned_to.assigned_to_id";
+
+		$result3=db_query($sql);
+		$rows=db_numrows($result3);
+		if ($result3 && $rows > 0) {
+			$to .= ', ' . implode(result_column_to_array($result3),', ');
+			$assignees = implode(result_column_to_array($result3, 1),', ');
+		}
+
+		$body = "Task #".db_result($result,0,"project_task_id")." has been updated. ".
+			"\n\nProject: ".db_result($result,0,'group_name').
+			"\nSubproject: ".db_result($result,0,'project_name').
+			"\nSummary: ".util_unconvert_htmlspecialchars(db_result($result,0,'summary')).
+			"\nComplete: ".db_result($result,0,'percent_complete')."%".
+			"\nStatus: ".db_result($result,0,'status_name').
+			"\nAuthority  : ".db_result($result,0,'creator_name').
+			"\nAssigned to: ".$assignees.
+			"\n\nDescription: ".db_result($result,0,'details');
+			
+		/*      
+			Now get the followups to this task
+		*/
+		$sql="SELECT project_history.field_name,project_history.old_value,project_history.date,users.user_name ".
+			"FROM project_history,users ".
+			"WHERE project_history.mod_by=users.user_id AND project_history.field_name = 'details' ".
+			"AND project_task_id='$project_task_id' ORDER BY project_history.date DESC";
+		$result2=db_query($sql);
+		$rows=db_numrows($result2);
+		if ($result2 && $rows > 0) {
+			$body .= "\n\nFollow-Ups:";
+			for ($i=0; $i<$rows;$i++) {
+				$body .= "\n\n-------------------------------------------------------";
+				$body .= "\nDate: ".date($sys_datefmt,db_result($result2,$i,'date'));
+				$body .= "\nBy: ".db_result($result2,$i,'user_name');
+				$body .= "\n\nComment:\n".util_unconvert_htmlspecialchars(db_result($result2,$i,'old_value'));
+			}
+		}
+		$body .= "\n\n-------------------------------------------------------".
+			"\nFor more info, visit:".
+			"\n\nhttp://$GLOBALS[sys_default_domain]/pm/task.php?func=detailtask&project_task_id=".
+				db_result($result,0,'project_task_id')."&group_id=".
+				db_result($result,0,'group_id')."&group_project_id=".db_result($result,0,'group_project_id');
+		
+		$subject="[Task #".db_result($result,0,'project_task_id').'] '.
+			util_unconvert_htmlspecialchars(db_result($result,0,'summary'));
+		
+		
+		// Append the list of additional receiptients
+		if ($more_addresses) {
+			$to .= ', ' . $more_addresses;
+		}
+		
+		// If this is a new task, or if send all tasks == 1,
+		// append the new_task_address for the group
+		if (($new_task && db_result($result,0,'new_task_address')) || db_result($result,0,'send_all_tasks')) {
+			$to .= ', ' . db_result($result,0,'new_task_address');
+		}
+		
+		$more='From: noreply@'.$GLOBALS['sys_default_domain'];
+		
+		mail($to,$subject,$body,$more);
+		
+		$feedback .= " Task Update Sent ";
+		
+	} else {	
+	
+		$feedback .= " Could Not Send Task Update ";
+		echo db_error();
+		
+	}       
+}       
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifact.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifact.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifact.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,1026 @@
+<?php
+/**
+ *
+ * Artifact.class - Main Artifact class
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class Artifact extends Error {
+
+	/**
+	 * Resource ID
+	 *
+	 * @var		int		$status_res
+	 */
+	var $status_res;
+
+	/**
+	 * Artifact Type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $ArtifactType; 
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 * Array of ArtifactFile objects
+	 *
+	 * @var		array	$files
+	 */
+	var $files; 
+
+	/**
+	 *  Artifact() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	The artifact type object
+	 *  @param	integer	(primary key from database OR complete assoc array) 
+	 *		ONLY OPTIONAL WHEN YOU PLAN TO IMMEDIATELY CALL ->create()
+	 *  @return true/false
+	 */
+	function Artifact(&$ArtifactType, $data=false) {
+		$this->Error(); 
+
+		$this->ArtifactType =& $ArtifactType;
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('Artifact: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('Artifact: '.$ArtifactType->getErrorMessage());
+			return false;
+		}
+
+		//
+		//	make sure this person has permission to view artifacts
+		//
+		if (!$this->ArtifactType->userCanView()) {
+			$this->setError('Artifact: Only Group Members Can View Private ArtifactTypes');
+			return false;
+		}
+
+		//
+		//	set up data structures
+		//
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		} else {
+			$this->setError('No ID Present');
+		}
+	}
+
+
+	/**
+	 *	create() - construct a new Artifact in the database
+	 *
+	 *	@param	int		The category ID
+	 *	@param	int		The artifact group ID
+	 *	@param	string	The artifact summary
+	 *	@param	string	Details of the artifact
+	 *	@param	int		The ID of the user to which this artifact is to be assigned
+	 *	@param	int		The artifacts priority
+	 *  @return id on success / false on failure
+	 */
+	function create($category_id, $artifact_group_id, $summary, $details, $assigned_to=100, $priority=5, $monitor_email=false) {
+
+		//
+		//	make sure this person has permission to add artifacts
+		//
+		if (!$this->ArtifactType->isPublic()) {
+			//
+			//	Only admins can post/modify private artifacts
+			//
+			if (!$this->ArtifactType->userIsAdmin()) {
+				$this->setError('Artifact: Only Artifact Admins Can Modify Private ArtifactTypes');
+				return false;
+			}
+		}
+
+		//
+		//	get the user_id
+		//
+		if (user_isloggedin()) {
+			$user=user_getid();
+		} else {
+			if ($this->ArtifactType->allowsAnon()) {
+				$user=100;
+			} else {
+				$this->setError('Artifact: This ArtifactType Does Not Allow Anonymous Submissions. Please Login.');
+				return false;
+			}
+		}
+
+		//
+		//	data validation
+		//
+		if (!$summary) {
+			$this->setError('Artifact: Message Summary Is Required');
+			return false;
+		}
+		if (!$details) {
+			$this->setError('Artifact: Message Body Is Required');
+			return false;
+		}
+		if (!$assigned_to) {
+			if ($category_id == 100) {
+				$assigned_to=100;
+			} else {
+				//create an ArtifactCategory to determine who to auto-assign to
+				$ac=new ArtifactCategory($this->ArtifactType,$category_id);
+				if (!$ac || !is_object($ac) || $ac->isError()) {
+					$assigned_to=100;
+				} else {
+					$assigned_to=$ac->getAssignee();
+				}
+			}
+		}
+		if ($assigned_to==100 && $category_id != 100) {
+			//create an ArtifactCategory to determine who to auto-assign to
+			$ac=new ArtifactCategory($this->ArtifactType,$category_id);
+			if (!$ac || !is_object($ac) || $ac->isError()) {
+				$assigned_to=100;
+			} else {
+				$assigned_to=$ac->getAssignee();
+			}
+		}
+		if (!$priority) {
+			$priority=5;
+		}
+		if (!$category_id) {
+			$category_id=100;
+		}
+		if (!$artifact_group_id) {
+			$artifact_group_id=100;
+		}
+		if (!$resolution_id) {
+			$resolution_id=100;
+		}
+
+		db_begin();
+
+		//
+		//	Check to see if this idiot user is trying to double-submit
+		//
+		$res=db_query("SELECT * FROM artifact 
+			WHERE summary='$summary' 
+			AND submitted_by='$user'
+			AND open_date > '". (time() - 86400) ."'");
+		if ($res && db_numrows($res) > 0) {
+			$this->setError("You Attempted To Double-submit this item. Please avoid double-clicking.");
+			db_rollback();
+			return false;
+		}
+
+		$res=db_query("INSERT INTO artifact 
+			(group_artifact_id,status_id,category_id,artifact_group_id,priority,
+			submitted_by,assigned_to,open_date,summary,details,resolution_id) 
+			VALUES 
+			('".$this->ArtifactType->getID()."','1','$category_id','$artifact_group_id',
+			'$priority','$user','$assigned_to','". time() ."','". 
+			htmlspecialchars($summary)."','". htmlspecialchars($details)."','$resolution_id')");
+
+		$artifact_id=db_insertid($res,'artifact','artifact_id');
+
+		if (!$res || !$artifact_id) {
+			$this->setError('Artifact: '.db_error());
+			db_rollback();
+			return false;
+		} else {
+			//
+			//	Now set up our internal data structures
+			//
+			if (!$this->fetchData($artifact_id)) {
+				db_rollback();
+				return false;
+			}
+
+			//
+			//	now send an email if appropriate
+			//
+			$this->mailFollowup(1);
+			db_commit();
+			$this->clearError();
+			
+			//
+			//  Set up monitoring for the user if requested
+			//
+			if ($monitor_email) {
+				$this->setMonitor($monitor_email);
+			}
+			return $artifact_id;
+		}
+	}
+
+	/**
+	 *	fetchData() - re-fetch the data for this Artifact from the database
+	 *
+	 *	@param	int		The artifact ID
+	 *	@return true/false
+	 */
+	function fetchData($artifact_id) {
+		$res=db_query("SELECT * FROM artifact_vw 
+			WHERE artifact_id='$artifact_id' AND group_artifact_id='".$this->ArtifactType->getID()."'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('Artifact: Invalid ArtifactID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifactType() - get the ArtifactType Object this Artifact is associated with
+	 *
+	 *	@return ArtifactType
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+	
+	/**
+	 *	getID() - get this ArtifactID
+	 *
+	 *	@return the group_artifact_id #
+	 */
+	function getID() {
+		return $this->data_array['artifact_id'];
+	}
+
+	/**
+	 *	getStatusID() - get open/closed/deleted flag
+	 *
+	 *	@return (1) Open, (2) Closed, (3) Deleted
+	 */
+	function getStatusID() {
+		return $this->data_array['status_id'];
+	}
+
+	/**
+	 *	getStatusName() - get open/closed/deleted text
+	 *
+	 *	@return text status name
+	 */
+	function getStatusName() {
+		return $this->data_array['status_name'];
+	}
+
+	/**
+	 *	getResolutionID() - get resolution flag
+	 *
+	 *	@return int
+	 */
+	function getResolutionID() {
+		return $this->data_array['resolution_id'];
+	}
+
+	/**
+	 *	getResolutionName() - get resolution name
+	 *
+	 *	@return text resolution name
+	 */
+	function getResolutionName() {
+		return $this->data_array['resolution_name'];
+	}
+
+	/**
+	 *	getCategoryID() - get category_id flag
+	 *
+	 *	@return int category_id
+	 */
+	function getCategoryID() {
+		return $this->data_array['category_id'];
+	}
+
+	/**
+	 *	getCategoryName() - get category text name
+	 *
+	 *	@return text category name
+	 */
+	function getCategoryName() {
+		return $this->data_array['category_name'];
+	}
+
+	/**
+	 *	getArtifactGroupID() - get artifact_group_id flag
+	 *
+	 *	@return int artifact_group_id
+	 */
+	function getArtifactGroupID() {
+		return $this->data_array['artifact_group_id'];
+	}
+
+	/**
+	 *	getArtifactGroupName() - get artifact_group_name text
+	 *
+	 *	@return text artifact_group name
+	 */
+	function getArtifactGroupName() {
+		return $this->data_array['group_name'];
+	}
+
+	/**
+	 *	getPriority() - get priority flag
+	 *
+	 *	@return int priority
+	 */
+	function getPriority() {
+		return $this->data_array['priority'];
+	}
+
+	/**
+	 *	getSubmittedBy() - get ID of submitter
+	 *
+	 *	@return int user_id of submitter
+	 */
+	function getSubmittedBy() {
+		return $this->data_array['submitted_by'];
+	}
+
+	/**
+	 *	getSubmittedEmail() - get email of submitter
+	 *
+	 *	@return text email of submitter
+	 */
+	function getSubmittedEmail() {
+		return $this->data_array['submitted_email'];
+	}
+
+	/**
+	 *	getSubmittedRealName() - get real name of submitter
+	 *
+	 *	@return text real name of submitter
+	 */
+	function getSubmittedRealName() {
+		return $this->data_array['submitted_realname'];
+	}
+
+	/**
+	 *	getSubmittedUnixName() - get login name of submitter
+	 *
+	 *	@return text unix name of submitter
+	 */
+	function getSubmittedUnixName() {
+		return $this->data_array['submitted_unixname'];
+	}
+
+	/**
+	 *	getAssignedTo() - get ID of assignee
+	 *
+	 *	@return int user_id of assignee
+	 */
+	function getAssignedTo() {
+		return $this->data_array['assigned_to'];
+	}
+
+	/**
+	 *	getAssignedEmail() - get email of assignee
+	 *
+	 *	@return text email of assignee
+	 */
+	function getAssignedEmail() {
+		return $this->data_array['assigned_email'];
+	}
+
+	/**
+	 *	getAssignedRealName() - get real name of assignee
+	 *
+	 *	@return text real name of assignee
+	 */
+	function getAssignedRealName() {
+		return $this->data_array['assigned_realname'];
+	}
+
+	/**
+	 *	getAssignedUnixName() - get login name of assignee
+	 *
+	 *	@return text unix name of assignee
+	 */
+	function getAssignedUnixName() {
+		return $this->data_array['assigned_unixname'];
+	}
+
+	/**
+	 *	getOpenDate() - get unix time of creation
+	 *
+	 *	@return int unix time
+	 */
+	function getOpenDate() {
+		return $this->data_array['open_date'];
+	}
+
+	/**
+	 *	getCloseDate() - get unix time of closure
+	 *
+	 *	@return int unix time
+	 */
+	function getCloseDate() {
+		return $this->data_array['close_date'];
+	}
+
+	/**
+	 *	getSummary() - get text summary of artifact
+	 *
+	 *	@return text summary (subject)
+	 */
+	function getSummary() {
+		return $this->data_array['summary'];
+	}
+
+	/**
+	 *	getDetails() - get text body (message) of artifact
+	 *
+	 *	@return text body (message)
+	 */
+	function getDetails() {
+		return $this->data_array['details'];
+	}
+
+	/**
+	 *  setMonitor() - user can monitor this artifact
+	 *
+	 *	@param	string	The email address of the user who is monitoring this artifact
+	 *  @return false - always false - always use the getErrorMessage() for feedback
+	 */
+	function setMonitor($email=false) {
+		if (user_isloggedin()) {
+
+			$user_id=user_getid();
+			$user =& user_get_object(user_getid());
+			$email=' ';
+
+			//we don't want to include the "And email=" because
+			//a logged-in user's email may have changed
+			$email_sql='';
+
+		} else {
+
+			if (!$email || !validate_email($email)) {
+				$this->setError('SetMonitor::Valid Email Address Required');
+				return false;
+			}
+			$user_id=100;
+
+			$email_sql="AND email='$email'";
+
+		}
+
+		$email=strtolower($email);
+
+		$res=db_query("SELECT * FROM artifact_monitor 
+			WHERE artifact_id='". $this->getID() ."' 
+			AND user_id='$user_id' $email_sql");
+
+		if (!$res || db_numrows($res) < 1) {
+			//not yet monitoring
+			$res=db_query("INSERT INTO artifact_monitor (artifact_id,user_id,email) 
+				VALUES ('". $this->getID() ."','$user_id','$email')");
+			if (!$res) {
+				$this->setError(db_error());
+				return false;
+			} else {
+				$this->setError('Now Monitoring');
+				return false;
+			}
+		} else {
+			//already monitoring - remove their monitor
+			db_query("DELETE FROM artifact_monitor 
+				WHERE artifact_id='". $this->getID() ."' 
+				AND user_id='$user_id' $email_sql");
+			$this->setError('Monitoring Deactivated');
+			return false;
+		}
+	}
+
+	/**
+	 *  getMonitorEmails() - 
+	 *
+	 *  @return array of email addresses monitoring this ArtifactType
+	 */
+	function &getMonitorEmails() {
+		$res=db_query("SELECT artifact_monitor.user_id,users.email,artifact_monitor.email as email2 
+			FROM users,artifact_monitor 
+			WHERE users.user_id=artifact_monitor.user_id 
+			AND artifact_monitor.artifact_id='". $this->getID() ."'");
+
+		$rows=db_numrows($res);
+		$email=array();
+
+		for ($i=0; $i<$rows; $i++) {
+			//
+			//  for monitoring by non-logged-in users, 
+			//  we grab the email they gave us
+			//
+			//  otherwise we use the confirmed one from the users table
+			//
+			$email[]=((db_result($res,$i,'user_id') == 100)?db_result($res,$i,'email2'):db_result($res,$i,'email') );
+		}
+		return $email;
+	}
+
+	/**
+	 *	getHistory() - returns a result set of audit trail for this support request
+	 *
+	 *	@return result set
+	 */
+	function getHistory() {
+		$sql="SELECT * ".
+		"FROM artifact_history_user_vw ".
+		"WHERE artifact_id='". $this->getID() ."' ".
+		"ORDER BY entrydate DESC";
+		return db_query($sql);
+	}
+
+	/**
+	 *	getMessages() - get the list of messages attached to this artifact
+	 *
+	 *	@return database result set
+	 */
+	function getMessages() {
+		$sql="select * ".
+			"FROM artifact_message_user_vw ".
+			"WHERE artifact_id='". $this->getID() ."' ORDER BY adddate DESC";
+		return db_query($sql);
+	}
+
+	/**
+	 *	getFiles() - get array of ArtifactFile's
+	 *
+	 *	@return array of ArtifactFile's
+	 */
+	function &getFiles() {
+		if (!isset($this->files)) {
+			$sql="select * ".
+			"FROM artifact_file_user_vw ".
+			"WHERE artifact_id='". $this->getID() ."'";
+			$res=db_query($sql);
+			$rows=db_numrows($res);
+			if ($rows > 0) {
+				for ($i=0; $i < $rows; $i++) {
+					$this->files[$i]=new ArtifactFile($this,db_fetch_array($res));
+				}
+			} else {
+				$this->files=array();
+			}
+		}
+		return $this->files;
+	}
+
+	/**
+	 *  addMessage() - attach a text message to this Artifact
+	 *
+	 *	@param	string	The message being attached
+	 *	@param	string	Email address of message creator
+	 *	@param	bool	Whether to email out a followup
+	 *	@access private
+	 *  @return true/false
+	 */
+	function addMessage($body,$by=false,$send_followup=false) {
+		if (!$body) {
+			$this->setError('ERROR - addMessage: Missing Parameters');
+			return false;
+		}
+
+		if (user_isloggedin()) {
+			$user_id=user_getid();
+			$user =& user_get_object($user_id);
+			if (!$user || !is_object($user)) {
+				$this->setError('ERROR - Logged In User Bug Could Not Get User Object');
+				return false;
+			}
+			$body="Logged In: YES \nuser_id=$user_id\n\n".$body;
+
+			//	we'll store this email even though it will likely never be used - 
+			//	since we have their correct user_id, we can join the USERS table to get email
+			$by=$user->getEmail();
+		} else {
+			$body="Logged In: NO \n\n".$body;
+			$user_id=100;
+			if (!$by) {
+				$this->setError('ERROR - addMessage: Missing Email Address');
+				return false;
+			}
+		}
+
+		$sql="insert into artifact_message (artifact_id,submitted_by,from_email,adddate,body) ".
+			"VALUES ('". $this->getID() ."','$user_id','$by','". time() ."','". htmlspecialchars($body). "')";
+		$res = db_query($sql);
+		if ($send_followup) {
+			$this->mailFollowup(2,false);
+		}
+		return $res;
+	}
+
+	/**
+	 *  addHistory() - add an entry to audit trail
+	 *
+	 *  @param	string	The name of the field in the database being modified
+	 *  @param	string	The former value of this field
+	 *  @access private
+	 *  @return true/false
+	 */
+	function addHistory($field_name,$old_value) {
+		if (!user_isloggedin()) {
+			$user=100;
+		} else {
+			$user=user_getid();
+		}
+?><?php
+		$sql="insert into artifact_history(artifact_id,field_name,old_value,mod_by,entrydate) 
+			VALUES ('". $this->getID() ."','$field_name','$old_value','$user','". time() ."')";
+		return db_query($sql);
+	}
+
+	/**
+	 *	update() - update the fields in this artifact
+	 *
+	 *	@param	int		The artifact priority
+	 *	@param	int		The artifact status ID
+	 *	@param	int		The artifact category ID
+	 *	@param	int		The artifact group ID
+	 *	@param	int		The artifact resolution ID
+	 *	@param	int		The person to which this artifact is to be assigned
+	 *	@param	int		The artifact summary
+	 *	@param	int		The canned response
+	 *	@param	int		Attaching another comment
+	 *	@param	int		Allows you to move an artifact to another type
+	 *	@return true/false
+	 */
+	function update($priority,$status_id,$category_id,$artifact_group_id,$resolution_id,
+		$assigned_to,$summary,$canned_response,$details,$new_artifact_type_id) {
+
+		if (!$this->getID() 
+			|| !$assigned_to 
+			|| !$status_id 
+			|| !$category_id 
+			|| !$artifact_group_id 
+			|| !$resolution_id
+			|| !$canned_response 
+			|| !$new_artifact_type_id) {
+			$this->setError('Artifact: Missing required parameters to artifact::update()');
+			return false;
+		}
+
+		// If the current status is Pending then auto-reset it to 'Open'
+		// Assumes the status ID for 'Pending' is '4'
+		if ($status_id != '2' && $status_id != '3'  && $this->getStatusID() == '4') {
+			$status_id = '1';
+		}
+
+		//	original submitter can always modify his/her items now
+		if (!$this->ArtifactType->userIsAdmin() && ($this->getSubmittedBy() != user_getid())) {
+			$this->setError('Artifact: Update Permission Denied');
+			return false;
+		}
+
+		// Array to record which properties were changed
+		$changes = array();
+
+		db_begin();
+
+		//
+		//	Get a lock on this row in the database
+		//
+		$lock=db_query("SELECT * FROM artifact WHERE artifact_id='".$this->getID()."' FOR UPDATE");
+
+		$artifact_type_id = $this->ArtifactType->getID();
+
+		//
+		//	Attempt to move this Artifact to a new ArtifactType
+		//	need to instantiate new ArtifactType obj and test perms
+		//
+		if ($new_artifact_type_id != $artifact_type_id) {
+			$newArtifactType= new ArtifactType($this->ArtifactType->getGroup(), $new_artifact_type_id);
+			if (!is_object($newArtifactType) || $newArtifactType->isError()) {
+				$this->setError('Artifact: Could not move to new ArtifactType'.$newArtifactType->getErrorMessage());
+				return false;
+			}
+			//	do they have perms for new ArtifactType?
+			if (!$newArtifactType->userIsAdmin()) {
+				$this->setError('Artifact: Could not move to new ArtifactType: Permission Denied');
+				db_rollback();
+				return false;
+			}
+			//
+			//	Now set ArtifactGroup, Category, and Assigned to 100 in the new ArtifactType
+			//
+			$status_id=1;
+			$category_id='100';
+			$artifact_group_id='100';
+			$assigned_to='100';
+			//can't send a canned response when changing ArtifactType
+			$canned_response=100;
+			$this->ArtifactType =& $newArtifactType;
+			$update = true;
+		}
+
+		$sqlu='';
+
+		//
+		//	handle audit trail & build SQL statement
+		//
+		if ($this->getStatusID() != $status_id) {
+			$this->addHistory('status_id',$this->getStatusID());
+			$sqlu .= " status_id='$status_id', ";
+			$changes['status'] = 1;
+			$update = true;
+		}
+		if (($this->getResolutionID() != $resolution_id) && ($resolution_id != 100)) {
+			$this->addHistory('resolution_id',$this->getResolutionID());
+			$sqlu .= " resolution_id='$resolution_id', ";
+			$changes['resolution'] = 1;
+			$update = true;
+		}
+		if ($this->getCategoryID() != $category_id) {
+			$this->addHistory('category_id',$this->getCategoryID());
+			$sqlu .= " category_id='$category_id', ";
+			$changes['category'] = 1;
+			$update = true;
+		}
+		if ($this->getArtifactGroupID() != $artifact_group_id) {
+			$this->addHistory('artifact_group_id',$this->getArtifactGroupID());
+			$sqlu .= " artifact_group_id='$artifact_group_id', ";
+			$changes['artifact_group'] = 1;
+			$update = true;
+		}
+		if ($this->getPriority() != $priority) {
+			$this->addHistory('priority',$this->getPriority());
+			$sqlu .= " priority='$priority', ";
+			$changes['priority'] = 1;
+			$update = true;
+		}
+
+		if ($this->getAssignedTo() != $assigned_to) {
+			$this->addHistory('assigned_to',$this->getAssignedTo());
+			$sqlu .= " assigned_to='$assigned_to', ";
+			$changes['assigned_to'] = 1;
+			$update = true;
+		}
+		if ($summary && (addslashes($this->getSummary()) != htmlspecialchars($summary))) {
+			$this->addHistory('summary', addslashes($this->getSummary()));
+			$sqlu .= " summary='". htmlspecialchars($summary) ."', ";
+			$changes['summary'] = 1;
+			$update = true;
+		}
+
+		if ($details) {
+			$this->addMessage($details);
+			$changes['details'] = 1;
+			$send_message=true;
+		}
+
+		//
+		//	Enter the timestamp if we are changing to closed
+		//
+		if ($status_id != 1) {
+			$now=time();
+			$sqlu .= " close_date='$now', ";
+			$this->addHistory('close_date',$this->getCloseDate());
+			$update = true;
+		}
+
+		/*
+			Finally, update the artifact itself
+		*/
+		if ($update){
+			$sql = "UPDATE artifact 
+				SET 
+				$sqlu
+				group_artifact_id='$new_artifact_type_id'
+				WHERE 
+				artifact_id='". $this->getID() ."'
+				AND group_artifact_id='$artifact_type_id'";
+
+			$result=db_query($sql);
+
+			if (!$result || db_affected_rows($result) < 1) {
+				$this->setError('Error - update failed!');
+				echo db_error();
+				db_rollback();
+				return false;
+			} else {
+				$this->fetchData($this->getID());
+//error check the data fetching??
+			}
+		}
+
+		/*
+			handle canned responses
+
+			Instantiate ArtifactCanned and get the body of the message
+		*/
+		if ($canned_response != 100) {
+			//don't care if this response is for this group - could be hacked
+			$acr=new ArtifactCanned($this->ArtifactType,$canned_response);
+			if (!$acr || !is_object($acr)) {
+				$this->setError('Artifact: Could Not Create Canned Response Object');
+			} elseif ($acr->isError()) {
+				$this->setError('Artifact: '.$acr->getErrorMessage());
+			} else {
+				$body = addslashes($acr->getBody());
+				if ($body) {
+					if (!$this->addMessage(util_unconvert_htmlspecialchars($body),user_getname().'@'.$GLOBALS['sys_users_host'])) {
+						db_rollback();
+						return false;
+					} else {
+						$send_message=true;
+					}
+				} else {
+					$this->setError('Artifact: Unable to Use Canned Response');
+					return false;
+				}
+			}
+		}
+
+		if ($update || $send_message){
+			/*
+				now send the email
+			*/
+			$this->mailFollowup(2, false, $changes);
+			db_commit();
+			return true;
+		} else {
+			//nothing changed, so cancel the transaction
+			$this->setError('Nothing Changed - Update Cancelled');
+			db_rollback();
+			return false;
+		}
+	}
+
+	// function which returns proper marker for changed properties
+	function marker($prop_name,$changes) {
+		if ($changes[$prop_name]) {
+			return '>';
+		} else {
+			return '';
+		}
+	}				
+
+	/**
+	 *	mailFollowup() - send out an email update for this artifact
+	 *
+	 *	@param	int		(1) initial/creation (2) update
+	 *	@param	array	Array of additional addresses to mail to
+	 *	@param	array	Array of fields changed in this update 
+	 *	@access private
+	 *	@return true/false
+	 */
+	function mailFollowup($type, $more_addresses=false, $changes='') {
+		global $sys_datefmt;
+
+		if (!$changes) {
+			$changes=array();
+		}
+
+		if ($this->ArtifactType->useResolution()) {
+			$resolution_text = $this->marker('resolution',$changes).
+			 "Resolution: ". $this->getResolutionName() ."\n";
+		}
+
+		$body = $this->ArtifactType->getName() ." item #". $this->getID() .", was opened at ". date( $sys_datefmt, $this->getOpenDate() ). 
+			"\nYou can respond by visiting: ".
+			"\nhttp://".$GLOBALS['sys_default_domain']."/tracker/?func=detail&atid=". $this->ArtifactType->getID() .
+				"&aid=". $this->getID() .
+				"&group_id=". $this->ArtifactType->Group->getID() .
+			"\n\n".
+			$this->marker('category',$changes).
+			 "Category: ". $this->getCategoryName() ."\n".
+			$this->marker('artifact_group',$changes).
+			 "Group: ". $this->getArtifactGroupName() ."\n".
+			$this->marker('status',$changes).
+			 "Status: ". $this->getStatusName() ."\n".
+			$resolution_text.
+			$this->marker('priority',$changes).
+			 "Priority: ". $this->getPriority() ."\n".
+			"Submitted By: ". $this->getSubmittedRealName() .
+			" (". $this->getSubmittedUnixName(). ")"."\n".
+			$this->marker('assigned_to',$changes).
+			 "Assigned to: ". $this->getAssignedRealName() .
+			 " (". $this->getAssignedUnixName(). ")"."\n".
+			$this->marker('summary',$changes).
+			 "Summary: ". util_unconvert_htmlspecialchars( $this->getSummary() );
+			
+			
+		$subject='[ '. $this->ArtifactType->Group->getUnixName() . '-' . $this->ArtifactType->getName() . '-' . $this->getID() .' ] '. util_unconvert_htmlspecialchars( $this->getSummary() );
+
+		if ($type > 1) {
+			/*
+				get all the email addresses that are monitoring this request
+			*/
+			$emails =& $this->getMonitorEmails();
+		}
+
+		if ($more_addresses) {
+			$emails[] = $more_addresses;
+		}
+		//we don't email the current user
+		if ($this->getAssignedTo() != user_getid()) {
+			$emails[] = $this->getAssignedEmail();
+		}
+		if ($this->getSubmittedBy() != user_getid()) {
+			$emails[] = $this->getSubmittedEmail();
+		}
+		//initial submission
+		if ($type==1) {
+			//if an email is set for this ArtifactType
+			//add that address to the BCC: list
+			if ($this->ArtifactType->getEmailAddress()) {
+				$emails[] = $this->ArtifactType->getEmailAddress();
+			}
+		} else {
+			//update
+			if ($this->ArtifactType->emailAll()) {
+				$emails[] = $this->ArtifactType->getEmailAddress();
+			}
+		}
+
+		$body .= "\n\nInitial Comment:".
+			"\n".util_unconvert_htmlspecialchars( $this->getDetails() ) .
+			"\n\n----------------------------------------------------------------------";
+
+		if ($type > 1) {
+			/*
+				Now include the followups
+			*/
+			$result2=$this->getMessages();
+
+			$rows=db_numrows($result2);
+		
+			if ($result2 && $rows > 0) {
+				for ($i=0; $i<$rows; $i++) {
+					//
+					//	for messages posted by non-logged-in users, 
+					//	we grab the email they gave us
+					//
+					//	otherwise we use the confirmed one from the users table
+					//
+					if (db_result($result2,$i,'user_id') == 100) {
+						$emails[] = db_result($result2,$i,'from_email');
+					} else {
+						$emails[] = db_result($result2,$i,'email');
+					}
+
+
+					$body .= "\n\n";
+					if ($i == 0) {
+						$body .= $this->marker('details',$changes);
+					}
+					$body .= "Comment By: ". db_result($result2,$i,'realname') . " (".db_result($result2,$i,'user_name').")".
+					"\nDate: ". date( $sys_datefmt,db_result($result2,$i,'adddate') ).
+					"\n\nMessage:".
+					"\n".util_unconvert_htmlspecialchars( db_result($result2,$i,'body') ).
+					"\n\n----------------------------------------------------------------------";
+				}	   
+			}
+
+		}
+
+		$body .= "\n\nYou can respond by visiting: ".
+		"\nhttp://$GLOBALS[sys_default_domain]/tracker/?func=detail&atid=". $this->ArtifactType->getID() .
+			"&aid=". $this->getID() .
+			"&group_id=". $this->ArtifactType->Group->getID();
+
+		//only send if some recipients were found
+		if (count($emails) < 1) {
+			return true;
+		}
+
+		//now remove all duplicates from the email list
+		$BCC=implode(',',array_unique($emails));
+
+		/*
+			Send the email
+		*/
+		util_send_mail("noreply@$GLOBALS[sys_default_domain]",$subject,$body,"noreply@$GLOBALS[sys_default_domain]",$BCC);
+		return true;
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCanned.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCanned.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCanned.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,199 @@
+<?php
+/**
+ * ArtifactCanned.class - Class to handle canned responses
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class ArtifactCanned extends Error {
+
+	/** 
+	 * The artifact type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $ArtifactType; 
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *  ArtifactCanned() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	The Artifact Type object
+	 *  @param	array	(all fields from artifact_file_user_vw) OR id from database
+	 *  @return true/false
+	 */
+	function ArtifactCanned(&$ArtifactType, $data=false) {
+		$this->Error(); 
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('ArtifactCanned: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('ArtifactCanned: '.$Artifact->getErrorMessage());
+			return false;
+		}
+		$this->ArtifactType =& $ArtifactType;
+
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		} else {
+			$this->setError('No ID Passed');
+		}
+	}
+
+	/**
+	 *	create() - create a new item in the database
+	 *
+	 *	@param	string	The item title
+	 *	@param	string	The item body
+	 *  @return id on success / false on failure
+	 */
+	function create($title, $body) {
+		//
+		//	data validation
+		//
+		if (!$title || !$body) {
+			$this->setError('ArtifactCanned: name and assignee are Required');
+			return false;
+		}
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+
+		$sql="INSERT INTO artifact_canned_responses (group_artifact_id,title,body) 
+			VALUES ('".$this->ArtifactType->getID()."',
+			'". htmlspecialchars($title) ."','". htmlspecialchars($body) ."')";
+
+		$result=db_query($sql);
+
+		if ($result && db_affected_rows($result) > 0) {
+			$this->clearError();
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+
+/*
+			//
+			//	Now set up our internal data structures
+			//
+			if (!$this->fetchData($id)) {
+				return false;
+			}
+*/
+	}
+
+	/**
+	 *	fetchData() - re-fetch the data for this ArtifactCanned from the database
+	 *
+	 *	@param int		Data ID
+	 *	@return true/false
+	 */
+	function fetchData($id) {
+		$res=db_query("SELECT * FROM artifact_canned_responses WHERE id='$id'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactCanned: Invalid ArtifactCanned ID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifactType() - get the ArtifactType Object this ArtifactCanned message is associated with
+	 *
+	 *	@return ArtifactType
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+	
+	/**
+	 *	getID() - get this ArtifactCanned message's ID
+	 *
+	 *	@return the id #
+	 */
+	function getID() {
+		return $this->data_array['id'];
+	}
+
+	/**
+	 *	getTitle() - get the title
+	 *
+	 *	@return text title
+	 */
+	function getTitle() {
+		return $this->data_array['title'];
+	}
+
+	/**
+	 *	getBody() - get the body of this message
+	 *
+	 *	@return text message body
+	 */
+	function getBody() {
+		return $this->data_array['body'];
+	}
+
+	/**
+	 *  update() - update an ArtifactCanned message
+	 *
+	 *  @param	string	Title of the message
+	 *  @param	string	Body of the message
+	 *  @return true/false
+	 */
+	function update($title,$body) {
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}   
+		if (!$title || !$body) {
+			$this->setError('Missing Params');
+			return false;
+		}   
+
+		$sql="UPDATE artifact_canned_responses 
+			SET title='". htmlspecialchars($title) ."',body='". htmlspecialchars($body) ."'
+			WHERE group_artifact_id='". $this->ArtifactType->getID() ."' AND id='". $this->getID() ."'";
+
+		$result=db_query($sql);
+
+		if ($result && db_affected_rows($result) > 0) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCategory.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCategory.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactCategory.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,195 @@
+<?php
+/**
+ * ArtifactCategory.class - Class to handle artifact categories
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class ArtifactCategory extends Error {
+
+	/** 
+	 * The artifact type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $ArtifactType; //object
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *  ArtifactCategory() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	ArtifactType object
+	 *  @param	array	(all fields from artifact_file_user_vw) OR id from database
+	 *  @return true/false
+	 */
+	function ArtifactCategory(&$ArtifactType, $data=false) {
+		$this->Error(); 
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('ArtifactCategory: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('ArtifactCategory: '.$Artifact->getErrorMessage());
+			return false;
+		}
+		$this->ArtifactType =& $ArtifactType;
+
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		} else {
+			$this->setError('No ID Passed');
+		}
+	}
+
+	/**
+	 *	create() - create a new item in the database
+	 *
+	 *	@param	string	Item name
+	 *	@param	int		User_id of assignee
+	 *  @return id on success / false on failure
+	 */
+	function create($name, $auto_assign_to) {
+		//
+		//	data validation
+		//
+		if (!$name || !$auto_assign_to) {
+			$this->setError('ArtifactCategory: name and assignee are Required');
+			return false;
+		}
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+		$sql="INSERT INTO artifact_category (group_artifact_id,category_name,auto_assign_to) 
+			VALUES ('".$this->ArtifactType->getID()."','$name','$auto_assign_to')";
+
+		$result=db_query($sql);
+
+		if ($result && db_affected_rows($result) > 0) {
+			$this->clearError();
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+
+/*
+			//
+			//	Now set up our internal data structures
+			//
+			if (!$this->fetchData($id)) {
+				return false;
+			}
+*/
+	}
+
+	/**
+	 *	fetchData() - re-fetch the data for this ArtifactCategory from the database
+	 *
+	 *	@param	int		ID of the category
+	 *	@return true/false
+	 */
+	function fetchData($id) {
+		$res=db_query("SELECT * FROM artifact_category WHERE id='$id'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactCategory: Invalid ArtifactCategory ID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifactType() - get the ArtifactType Object this ArtifactCategory is associated with
+	 *
+	 *	@return ArtifactType
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+	
+	/**
+	 *	getID() - get this ArtifactCategory's ID
+	 *
+	 *	@return the id #
+	 */
+	function getID() {
+		return $this->data_array['id'];
+	}
+
+	/**
+	 *	getName() - get the name
+	 *
+	 *	@return text name
+	 */
+	function getName() {
+		return $this->data_array['category_name'];
+	}
+
+	/**
+	 *	getAssignee() - get the user_id of the person to assign this category to
+	 *
+	 *	@return int user_id
+	 */
+	function getAssignee() {
+		return $this->data_array['auto_assign_to'];
+	}
+
+	/**
+	 *  update() - update an ArtifactCategory
+	 *
+	 *  @param	string	Name of the category
+	 *  @param	int		user_id of the person this category should auto-assign to
+	 *  @return true/false
+	 */
+	function update($name,$assign_to) {
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}   
+		if (!$name || !$assign_to) {
+			$this->setError('Missing Params');
+			return false;
+		}   
+		$sql="UPDATE artifact_category 
+			SET category_name='$name',auto_assign_to='$assign_to' 
+			WHERE id='". $this->getID() ."' 
+			AND group_artifact_id='".$this->ArtifactType->getID()."'";
+		$result=db_query($sql);
+		if ($result && db_affected_rows($result) > 0) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactFile.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactFile.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactFile.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,279 @@
+<?php
+/**
+ * ArtifactFile.class - Class to handle files within an artifact
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class ArtifactFile extends Error {
+
+	/** 
+	 * The artifact type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $Artifact; //object
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *  ArtifactFile() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	The Artifact object
+	 *  @param	array	(all fields from artifact_file_user_vw) OR id from database
+	 *  @return true/false
+	 */
+	function ArtifactFile(&$Artifact, $data=false) {
+		$this->Error(); 
+
+		//was Artifact legit?
+		if (!$Artifact || !is_object($Artifact)) {
+			$this->setError('ArtifactFile: No Valid Artifact');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($Artifact->isError()) {
+			$this->setError('ArtifactFile: '.$Artifact->getErrorMessage());
+			return false;
+		}
+		$this->Artifact =& $Artifact;
+
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		} else {
+			$this->setError('No ID Passed');
+		}
+	}
+
+	/**
+	 *	create() - create a new item in the database
+	 *
+	 *	@para	string	Filename of the item
+	 *	@param	string	Item filetype
+	 *	@param	string	Item filesize
+	 *	@param	binary	Binary item data
+	 *	@param	string	Item description
+	 *  @return id on success / false on failure
+	 */
+	function create($filename, $filetype, $filesize, $bin_data, $description='None') {
+
+		// Some browsers don't supply mime type if they don't know it
+		if (!$filetype) {
+			// Let's be on safe side?
+			$filetype = 'application/octet-stream';
+		}
+
+		//
+		//	data validation
+		//
+		if (!$filename || !$filetype || !$filesize || !$bin_data) {
+			//echo '<P>|'.$filename.'|'.$filetype.'|'.$filesize.'|'.$bin_data.'|';
+			$this->setError('ArtifactFile: File name, type, size, and data are Required');
+			return false;
+		}
+
+		if (user_isloggedin()) {
+			$userid=user_getid();
+		} else {
+			$userid=100;
+		}
+
+		$res=db_query("INSERT INTO artifact_file
+			(artifact_id,description,bin_data,filename,filesize,filetype,adddate,submitted_by)
+			VALUES 
+			('".$this->Artifact->getID()."','$description','". base64_encode($bin_data) ."','$filename',
+			'$filesize','$filetype','". time() ."','$userid')"); 
+
+		$id=db_insertid($res,'artifact_file','id');
+
+		if (!$res || !$id) {
+			$this->setError('ArtifactFile: '.db_error());
+			return false;
+		} else {
+/*
+//
+//	skip this unless we need it later - save a db query
+//
+			//
+			//	Now set up our internal data structures
+			//
+			if (!$this->fetchData($id)) {
+				return false;
+			}
+*/
+			$this->Artifact->addHistory('File Added',$id.': '.$filename);
+			$this->clearError();
+			return $id;
+		}
+	}
+
+	/**
+	 *	delete() - delete this artifact file from the db
+	 *
+	 *	@return true/false
+	 */
+	function delete() {
+		if (!$this->Artifact->ArtifactType->userIsAdmin()) {
+			$this->setError('ArtifactFile: Permission Denied');
+			return false;
+		}
+		$res=db_query("DELETE FROM artifact_file WHERE id='". $this->getID() ."'");
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ArtifactFile: Unable to Delete');
+			return false;
+		} else {
+			$this->Artifact->addHistory('File Deleted',$this->getID().': '.$filename);
+			return true;
+		}
+	}
+
+	/**
+	 *	fetchData() - re-fetch the data for this ArtifactFile from the database
+	 *
+	 *	@param	int		Data ID
+	 *	@return true/false
+	 */
+	function fetchData($id) {
+		$res=db_query("SELECT * FROM artifact_file_user_vw WHERE id='$id'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactFile: Invalid ArtifactFile ID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifact() - get the Artifact Object this ArtifactFile is associated with
+	 *
+	 *	@return Artifact
+	 */
+	function &getArtifact() {
+		return $this->Artifact;
+	}
+	
+	/**
+	 *	getID() - get this ArtifactFile's ID
+	 *
+	 *	@return the id #
+	 */
+	function getID() {
+		return $this->data_array['id'];
+	}
+
+	/**
+	 *	getName() - get the filename
+	 *
+	 *	@return text filename
+	 */
+	function getName() {
+		return $this->data_array['filename'];
+	}
+
+	/**
+	 *	getType() - get the type
+	 *
+	 *	@return text type
+	 */
+	function getType() {
+		return $this->data_array['filetype'];
+	}
+
+	/**
+	 *	getData() - get the binary data from the db
+	 *
+	 *	@return binary
+	 */
+	function &getData() {
+//
+//	sorry - the data conversion for sf.net was incorrect
+//	we needed to actually unconvert the htmlspecialchars() 
+//	before base64_encode()ing the data
+//
+		if (($GLOBALS['sys_default_domain'] == 'sourceforge.net') && ($this->getID() < 3976)) {
+			return util_unconvert_htmlspecialchars(base64_decode($this->data_array['bin_data']));
+		} else {
+			return base64_decode($this->data_array['bin_data']);
+		}
+	}
+
+	/**
+	 *	getSize() - get the size
+	 *
+	 *	@return int size
+	 */
+	function getSize() {
+		return $this->data_array['filesize'];
+	}
+
+	/**
+	 *	getDescription() - get the description
+	 *
+	 *	@return text description
+	 */
+	function getDescription() {
+		return $this->data_array['description'];
+	}
+
+	/**
+	 *	getDate() - get the date file was added
+	 *
+	 *	@return int unix time
+	 */
+	function getDate() {
+		return $this->data_array['adddate'];
+	}
+
+	/**
+	 *	getSubmittedBy() - get the user_id of the submitter
+	 *
+	 *	@return int user_id
+	 */
+	function getSubmittedBy() {
+		return $this->data_array['submitted_by'];
+	}
+
+	/**
+	 *	getSubmittedRealName() - get the real name of the submitter
+	 *
+	 *	@return text name
+	 */
+	function getSubmittedRealName() {
+		return $this->data_array['realname'];
+	}
+
+	/**
+	 *	getSubmittedUnixName() - get the unix name of the submitter
+	 *
+	 *	@return text unixname
+	 */
+	function getSubmittedUnixName() {
+		return $this->data_array['user_name'];
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactGroup.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactGroup.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactGroup.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,182 @@
+<?php
+/**
+ * ArtifactGroup.class - Class to artifact groups
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class ArtifactGroup extends Error {
+
+	/**
+	 * Artifact type object
+	 *
+	 * @var		object	$ArtifactType
+	 */	
+	var $ArtifactType; 
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *  ArtifactGroup() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	Artifact type object
+	 *  @param	array	(all fields from artifact_group) OR id from database
+	 *  @return true/false
+	 */
+	function ArtifactGroup(&$ArtifactType, $data=false) {
+		$this->Error(); 
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('ArtifactGroup: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('ArtifactGroup: '.$Artifact->getErrorMessage());
+			return false;
+		}
+		$this->ArtifactType =& $ArtifactType;
+
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		}
+	}
+
+	/**
+	 *	create() - create a new item in the database
+	 *
+	 *	@param	string	Item name
+	 *  @return id on success / false on failure
+	 */
+	function create($name) {
+		//
+		//	data validation
+		//
+		if (!$name) {
+			$this->setError('ArtifactGroup: name is Required');
+			return false;
+		}
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+		$sql="INSERT INTO artifact_group (group_artifact_id,group_name) 
+			VALUES ('".$this->ArtifactType->getID()."','$name')";
+		$result=db_query($sql);
+
+		if ($result && db_affected_rows($result) > 0) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+
+/*
+			//
+			//	Now set up our internal data structures
+			//
+			if (!$this->fetchData($id)) {
+				return false;
+			}
+*/
+	}
+
+	/**
+	 *	fetchData() - re-fetch the data for this ArtifactGroup from the database
+	 *
+	 *	@param	int		Data ID
+	 *	@return true/false
+	 */
+	function fetchData($id) {
+		$res=db_query("SELECT * FROM artifact_group WHERE id='$id'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactGroup: Invalid ArtifactGroup ID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifactType() - get the ArtifactType Object this ArtifactGroup is associated with
+	 *
+	 *	@return ArtifactType
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+	
+	/**
+	 *	getID() - get this ArtifactGroup's ID
+	 *
+	 *	@return the id #
+	 */
+	function getID() {
+		return $this->data_array['id'];
+	}
+
+	/**
+	 *	getName() - get the name
+	 *
+	 *	@return text name
+	 */
+	function getName() {
+		return $this->data_array['group_name'];
+	}
+
+	/**
+	 *  update() - update an ArtifactGroup
+	 *
+	 *  @param	string	Name of the group
+	 *  @return true/false
+	 */
+	function update($name) {
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}   
+		if (!$name) {
+			$this->setError('Missing Params');
+			return false;
+		}   
+		$sql="UPDATE artifact_group
+			SET group_name='$name'
+			WHERE id='". $this->getID() ."' 
+			AND group_artifact_id='". $this->ArtifactType->getID() ."'";
+
+		$result=db_query($sql);
+
+		if ($result && db_affected_rows($result) > 0) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactResolution.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactResolution.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactResolution.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,115 @@
+<?php
+/**
+ *
+ * ArtifactResolution.class - Class to artifact resolutions
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class ArtifactResolution extends Error {
+
+	/** 
+	 * The artifact type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $ArtifactType; //object
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *  ArtifactResolution() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	Artifact type object
+	 *  @param	array	(all fields from artifact_group) OR id from database
+	 *  @return true/false
+	 */
+	function ArtifactResolution(&$ArtifactType, $data=false) {
+		$this->Error(); 
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('ArtifactResolution: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('ArtifactResolution: '.$Artifact->getErrorMessage());
+			return false;
+		}
+		$this->ArtifactType =& $ArtifactType;
+
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		}
+	}
+
+	/**
+	 *	fetchData() - re-fetch the data for this ArtifactResolution from the database
+	 *
+	 *	@param	int		Data ID
+	 *	@return true/false
+	 */
+	function fetchData($id) {
+		$res=db_query("SELECT * FROM artifact_resolution WHERE id='$id'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactResolution: Invalid ArtifactResolution ID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifactType() - get the ArtifactType Object this ArtifactResolution is associated with
+	 *
+	 *	@return ArtifactType
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+	
+	/**
+	 *	getID() - get this ArtifactResolution's ID
+	 *
+	 *	@return the id #
+	 */
+	function getID() {
+		return $this->data_array['id'];
+	}
+
+	/**
+	 *	getName() - get the name
+	 *
+	 *	@return text name
+	 */
+	function getName() {
+		return $this->data_array['resolution_name'];
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactType.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactType.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactType.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,662 @@
+<?php
+/**
+ * ArtifactType.class - Class to artifact an type
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+
+class ArtifactType extends Error {
+
+	/**
+	 * The Group object
+	 *
+	 * @var		object	$Group
+	 */
+	var $Group; //group object
+
+	/**
+	 * Artifact type ID
+	 *
+	 * @var		int		$artifact_type_id
+	 */
+	var $artifact_type_id;
+
+	/**
+	 * Categories db resource ID
+	 *
+	 * @var		int		$categories_res
+	 */
+	var $categories_res;
+
+	/**
+	 * Resolutions db resource ID
+	 *
+	 * @var		int		$resolutions_res
+	 */
+	var $resolutions_res;
+
+	/**
+	 * Groups db resource ID
+	 *
+	 * @var		int		$groups_res
+	 */
+	var $groups_res;
+
+	/**
+	 * Current user permissions
+	 *
+	 * @var		int		$current_user_perm
+	 */
+	var $current_user_perm;
+
+	/**
+	 * Technicians db resource ID
+	 *
+	 * @var		int		$technicians_res
+	 */
+	var $technicians_res;
+
+	/**
+	 * Status db resource ID
+	 *
+	 * @var		int		$status_res
+	 */
+	var $status_res;
+
+	/**
+	 * Canned responses resource ID
+	 *
+	 * @var		int		$cannecresponses_res
+	 */
+	var $cannedresponses_res;
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *	ArtifactType() - constructor
+	 *
+	 *	@param	object	The Group object
+	 *	@param	int		The id # assigned to this artifact type in the db
+	 *	@return true/false
+	 */
+	function ArtifactType(&$Group,$artifact_type_id=false) {
+		$this->Error();
+		if (!$Group || !is_object($Group)) {
+			$this->setError('No Valid Group Object');
+			return false;
+		}
+		if ($Group->isError()) {
+			$this->setError('ArtifactType: '.$Group->getErrorMessage());
+			return false;
+		}
+		$this->Group =& $Group;
+		if ($artifact_type_id) {
+			$this->artifact_type_id=$artifact_type_id;
+
+			if (!$this->fetchData($artifact_type_id)) {
+				return false;
+			} else {
+				return true;
+			}
+		} else {
+			$this->setError('No ID Passed');
+		}
+	}
+
+	/**
+	 *	create() - use this to create a new ArtifactType in the database
+	 *
+	 *	@param	string	The type name
+	 *	@param	string	The type description
+	 *	@param	bool	(1) true (0) false - viewable by general public
+	 *	@param	bool	(1) true (0) false - whether non-logged-in users can submit
+	 *	@param	bool	(1) true (0) false - whether to email on all updates
+	 *	@param	string	The address to send new entries and updates to
+	 *	@param	int		Days before this item is considered overdue
+	 *	@param	bool	(1) trye (0) false - whether the resolution box should be shown
+	 *	@param	string	Free-form text that project admins can place on the submit page
+	 *	@param	string	Free-form text that project admins can place on the browse page
+	 *	@param	int		(1) bug tracker, (2) Support Tracker, (3) Patch Tracker, (4) features (0) other
+	 *	@return id on success, false on failure
+	 */
+	function create($name,$description,$is_public,$allow_anon,$email_all,$email_address,
+		$due_period,$use_resolution,$submit_instructions,$browse_instructions,$datatype=0) {
+
+		$perm =& $this->Group->getPermission( session_get_user() );
+
+		if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
+			$this->setError('ArtifactType: Permission Denied');
+			return false;
+		}
+
+		if (!$name || !$description || !$due_period) {
+			$this->setError('ArtifactType: Name, Description, and Due Period are required');
+			return false;
+		}
+
+		if ($email_address && !validate_email($email_address)) {
+			$email_address='';
+		}
+		if ($email_all && !$email_address) {
+			$email_all=0;
+		}
+
+		$res=db_query("INSERT INTO 
+			artifact_group_list 
+			(group_id,
+			name,
+			description,
+			is_public,
+			allow_anon,
+			email_all_updates,
+			email_address,
+			due_period,
+			status_timeout,
+			use_resolution,
+			submit_instructions,
+			browse_instructions,
+			datatype) 
+			VALUES 
+			('". $this->Group->getID() ."',
+			'". htmlspecialchars($name) ."',
+			'". htmlspecialchars($description) ."',
+			'$is_public',
+			'$allow_anon',
+			'$email_all',
+			'$email_address',
+			'". ($due_period*(60*60*24)) ."',
+			'1209600',
+			'$use_resolution',
+			'$submit_instructions',
+			'$browse_instructions',
+			'$datatype')");
+
+		$this->artifact_type_id = db_insertid($res,'artifact_group_list','group_artifact_id');
+		
+		if (!$res || !$this->artifact_type_id) {
+			$this->setError('ArtifactType: '.db_error());
+			return false;
+		} else {
+			if (!$this->fetchData($this->artifact_type_id)) {
+				return false;
+			} else {
+				$this->clearError();
+				return $this->artifact_type_id;
+			}
+		}
+	}
+
+	/**
+	 *  fetchData() - re-fetch the data for this ArtifactType from the database
+	 *
+	 *  @param	int		The artifact type ID
+	 *  @return true/false
+	 */
+	function fetchData($artifact_type_id) {
+		$res=db_query("SELECT * FROM artifact_group_list
+			WHERE group_artifact_id='$artifact_type_id' 
+			AND group_id='". $this->Group->getID() ."'");
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactType: Invalid ArtifactTypeID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	  getGroup() - get the Group object this ArtifactType is associated with
+	 *
+	 *	  @return the Group object
+	 */
+	function &getGroup() {
+		return $this->Group;
+	}
+
+	/**
+	 *	  getID() - get this ArtifactTypeID
+	 *
+	 *	  @return the group_artifact_id #
+	 */
+	function getID() {
+		return $this->artifact_type_id;
+	}
+
+	/**
+	 *	  allowsAnon() - determine if non-logged-in users can post
+	 *
+	 *	  @return true/false
+	 */
+	function allowsAnon() {
+		return $this->data_array['allow_anon'];
+	}
+
+	/**
+	 *	  getSubmitInstructions() - get the free-form text strings
+	 *
+	 *	  @return text instructions
+	 */
+	function getSubmitInstructions() {
+		return $this->data_array['submit_instructions'];
+	}
+
+	/**
+	 *	  getBrowseInstructions() - get the free-form text strings
+	 *
+	 *	  @return text instructions
+	 */
+	function getBrowseInstructions() {
+		return $this->data_array['browse_instructions'];
+	}
+
+	/**
+	 *	  emailAll() - determine if we're supposed to email on every event
+	 *
+	 *	  @return true/false
+	 */
+	function emailAll() {
+		return $this->data_array['email_all_updates'];
+	}
+
+	/**
+	 *	  emailAddress() - defined email address to send events to
+	 *
+	 *	  @return text email
+	 */
+	function getEmailAddress() {
+		return $this->data_array['email_address'];
+	}
+
+	/**
+	 *	  isPublic() - whether non-group-members can view
+	 *
+	 *	  @return true/false
+	 */
+	function isPublic() {
+		return $this->data_array['is_public'];
+	}
+
+	/**
+	 *	  getName() - the name of this ArtifactType
+	 *
+	 *	  @return text name
+	 */
+	function getName() {
+		return $this->data_array['name'];
+	}
+
+	/**
+	 *	  getDescription() - the description of this ArtifactType
+	 *
+	 *	  @return text description
+	 */
+	function getDescription() {
+		return $this->data_array['description'];
+	}
+
+	/**
+	 *	  getDuePeriod() - how many seconds until it's considered overdue?
+	 *
+	 *	  @return int seconds
+	 */
+	function getDuePeriod() {
+		return $this->data_array['due_period'];
+	}
+
+	/**
+	 *    getStatusTimeout() - how many seconds until an item is stale?
+	 *
+	 *    @return int seconds
+	 */
+	function getStatusTimeout() {
+		return $this->data_array['status_timeout'];
+	}
+
+	/**
+	 *	  useResolution() - whether this ArtifactType uses the resolution feature
+	 *
+	 *	  @return true/false
+	 */
+	function useResolution() {
+		return $this->data_array['use_resolution'];
+	}
+
+	/**
+	 *	  getDataType() - flag that is generally unused but can mark the difference between bugs, patches, etc
+	 *
+	 *	  @return (1) bug (2) support (3) patch (4) feature (0) other
+	 */
+	function getDataType() {
+		return $this->data_array['datatype'];
+	}
+
+	/**
+	 *	getCategories() - List of possible categories set up for this artifact type
+	 *
+	 *	@return result set
+	 */
+	function getCategories() {
+		if (!isset($this->categories_res)) {
+			$sql="select id,category_name 
+				FROM artifact_category 
+				WHERE group_artifact_id='$this->artifact_type_id'";
+			$this->categories_res=db_query($sql);
+		}
+		return $this->categories_res;
+	}
+
+	/**
+	 *	getGroups() - List of possible groups set up for this artifact type
+	 *
+	 *	@return result set
+	 */
+	function getGroups() {
+		if (!isset($this->groups_res)) {
+			$sql="select id,group_name 
+				FROM artifact_group 
+				WHERE group_artifact_id='$this->artifact_type_id'";
+			$this->groups_res=db_query($sql);
+		}
+		return $this->groups_res;
+	}
+
+	/**
+	 *	getResolutions() - List of possible resolutions
+	 *
+	 *	@return result set
+	 */
+	function getResolutions() {
+		if (!isset($this->resolutions_res)) {
+			$sql="select id,resolution_name 
+				FROM artifact_resolution";
+			$this->resolutions_res=db_query($sql);
+		}
+		return $this->resolutions_res;
+	}
+
+	/**
+	 *	getTechnicians() - returns a result set of technicians 
+	 *
+	 *	@return result set
+	 */
+	function getTechnicians() {
+		if (!isset($this->technicians_res)) {
+			$sql="SELECT user_id,user_name 
+				FROM artifactperm_user_vw
+				WHERE group_artifact_id='$this->artifact_type_id' 
+				AND perm_level in (1,2)";
+			$this->technicians_res = db_query($sql);
+		}
+		return $this->technicians_res;
+	}
+
+	/**
+	 *	getCannedResponses() - returns a result set of canned responses 
+	 *
+	 *	@return result set
+	 */
+	function getCannedResponses() {
+		if (!isset($this->cannedresponses_res)) {
+			$sql="SELECT id,title
+				FROM artifact_canned_responses 
+				WHERE group_artifact_id='$this->artifact_type_id'";
+			$this->cannedresponses_res = db_query($sql);
+		}
+		return $this->cannedresponses_res;
+	}
+
+	/**
+	 *	getStatuses() - returns a result set of statuses
+	 *
+	 *	@return result set
+	 */
+	function getStatuses() {
+		if (!isset($this->status_res)) {
+			$sql="select * from artifact_status";
+			$this->status_res=db_query($sql);
+		}
+		return $this->status_res;
+	}
+
+	/**
+	 * getStatusName() - returns the name of this status 
+	 *
+	 * @param	int		The status ID
+	 * @return name
+	 */
+	function getStatusName($id) {
+		$sql="select * from artifact_status WHERE id='$id'";
+		$result=db_query($sql);
+		if ($result && db_numrows($result) > 0) {
+			return db_result($result,0,'status_name');
+		} else {
+			return 'Error - Not Found';
+		}
+	}
+
+	/**
+	 *	addUser() - add a user to this ArtifactType - depends on UNIQUE INDEX preventing duplicates
+	 *
+	 *	@param	int		user_id of the new user
+	 *	@return true/false
+	 */
+	function addUser($id) {
+		if (!$this->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+		if (!$id) {
+			$this->setError('Missing Params');
+			return false;
+		}
+		$sql="INSERT INTO artifact_perm (group_artifact_id,user_id,perm_level) 
+			VALUES ('".$this->getID()."','$id',0)";
+		$result=db_query($sql);
+		if ($result && db_affected_rows($result) > 0) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+
+	/**
+	 *	updateUser() - update a user's permissions
+	 *
+	 *	@param	int		user_id of the user to update
+	 *	@param	int		(1) tech only, (2) admin & tech (3) admin only
+	 *	@return true/false
+	 */
+	function updateUser($id,$perm_level) {
+		if (!$this->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+		if (!$id) {
+			$this->setError('Missing Params: '.$id.'|'.$perm_level);
+			return false;
+		}
+		$sql="UPDATE artifact_perm SET perm_level='$perm_level'
+			WHERE user_id='$id' AND group_artifact_id='".$this->getID()."'";
+		$result=db_query($sql);
+		if ($result) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+
+	/**
+	 *	deleteUser() - delete a user's permissions
+	 *
+	 *	@param	int		user_id of the user who's permissions to delete
+	 *	@return true/false
+	 */
+	function deleteUser($id) {
+		if (!$this->userIsAdmin()) {
+			$this->setError('Permission Denied');
+			return false;
+		}
+		if (!$id) {
+			$this->setError('Missing Params');
+			return false;
+		}
+		$sql="DELETE FROM artifact_perm
+			WHERE user_id='$id' AND group_artifact_id='".$this->getID()."'";
+		$result=db_query($sql);
+		if ($result) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+
+	/*
+
+		USER PERMISSION FUNCTIONS
+
+	*/
+
+	/**
+	 *	  userCanView() - determine if the user can view this artifact type
+	 *
+	 *	  @return true/false
+	 */
+	function userCanView() {
+		if ($this->isPublic()) {
+			return true;
+		} else {
+			if (!user_isloggedin()) {
+				return false;
+			} else {
+				//
+				//	For now, we let any member of a project view this ArtifactType
+				//	A future change might be to restrict to only those people with 
+				//	a corresponding entry in artifact_perm table
+				//
+				$perm =& $this->Group->getPermission( session_get_user() );
+				return $perm->isMember();
+			}
+		}
+	}
+
+	/**
+	 *	userIsAdmin() - see if the logged-in user's perms are >= 2 or Group ArtifactAdmin
+	 *
+	 *	@return true/false
+	 */
+	function userIsAdmin() { 
+		$perm =& $this->Group->getPermission( session_get_user() );
+
+		if (($this->getCurrentUserPerm() >= 2) || ($perm->isArtifactAdmin())) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 *	getCurrentUserPerm() - get the logged-in user's perms from artifact_perm
+	 *
+	 *	@return int perm level for the logged-in user
+	 */
+	function getCurrentUserPerm() {
+		if (!user_isloggedin()) {
+			return 0;
+		} else {
+			if (!isset($this->current_user_perm)) {
+				$sql="select perm_level
+				FROM artifact_perm
+				WHERE group_artifact_id='$this->artifact_type_id' 
+				AND user_id='".user_getid()."'";
+				$this->current_user_perm=db_result(db_query($sql),0,0);
+			}
+			return $this->current_user_perm;
+		}
+	}
+
+	/**
+	 *  update() - use this to update this ArtifactType in the database
+	 *
+	 *  @param	string	The item name
+	 *  @param	string	The item description
+	 *  @param	bool	(1) true (0) false - viewable by general public
+	 *  @param	bool	(1) true (0) false - whether non-logged-in users can submit
+	 *  @param	bool	(1) true (0) false - whether to email on all updates
+	 *  @param	string	The address to send new entries and updates to
+	 *  @param	int		Days before this item is considered overdue
+	 *  @param	int		Days before stale items time out
+	 *  @param	bool	(1) trye (0) false - whether the resolution box should be shown
+	 *  @param	string	Free-form text that project admins can place on the submit page
+	 *  @param	string	Free-form text that project admins can place on the browse page
+	 *  @return true on success, false on failure
+	 */
+	function update($name,$description,$is_public,$allow_anon,$email_all,$email_address,
+		$due_period, $status_timeout,$use_resolution,$submit_instructions,$browse_instructions) {
+
+		$perm =& $this->Group->getPermission(session_get_user());
+
+		if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
+			$this->setError('ArtifactType: Permission Denied');
+			return false;
+		}
+
+		if ($this->getDataType()) {
+			$name=$this->getName();
+			$description=$this->getDescription();
+		}
+		
+		if (!$name || !$description || !$due_period || !$status_timeout) {
+			$this->setError('ArtifactType: Name, Description, Due Period, and Status Timeout are required');
+			return false;
+		}
+		
+		if ($email_address && !validate_email($email_address)) {
+			$email_address='';
+		}
+		if ($email_all && !$email_address) {
+			$email_all=0;
+		}
+		$sql="UPDATE artifact_group_list SET 
+			name='$name',
+			description='". htmlspecialchars($description) ."',
+			is_public='$is_public',
+			allow_anon='$allow_anon',
+			email_all_updates='$email_all',
+			email_address='$email_address',
+			due_period='". ($due_period * (60*60*24)) ."',
+			status_timeout='". ($status_timeout * (60*60*24)) . "',
+			use_resolution='$use_resolution',
+			submit_instructions='$submit_instructions',
+			browse_instructions='$browse_instructions'
+			WHERE 
+			group_artifact_id='". $this->getID() ."' 
+			AND group_id='". $this->Group->getID() ."'";
+
+		$res=db_query($sql);
+		if (!$res || db_affected_rows($res) < 1) {
+			$this->setError('ArtifactType::Update(): '.db_error());
+			return false;
+		} else {
+			$this->fetchData($this->getID());
+			return true;
+		}
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactTypes.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactTypes.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/ArtifactTypes.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,222 @@
+<?php
+/**
+ * ArtifactTypes.class - Class to handle artifact types
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+require_once('common/include/Error.class');
+require_once('common/tracker/ArtifactType.class');
+require_once('common/tracker/ArtifactGroup.class');
+require_once('common/tracker/ArtifactCategory.class');
+
+class ArtifactTypes extends Error {
+
+	/** 
+	 * The artifact type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $Group; //group object
+
+	/**
+	 * Array of artifact data
+	 *
+	 * @var		array	$data_array
+	 */
+	var $data_array;
+
+	/**
+	 *	ArtifactTypes() - constructor.
+	 *
+	 *	@param	object	The Group object
+	 *	@return true/false
+	 */
+	function ArtifactTypes(&$Group) {
+		$this->Error();
+		if (!$Group || !is_object($Group)) {
+			$this->setError('No Valid Group Object');
+			return false;
+		}
+		if ($Group->isError()) {
+			$this->setError('ArtifactType: '.$Group->getErrorMessage());
+			return false;
+		}
+		$this->Group =& $Group;
+		return true;
+	}
+
+	/**
+	 *	createTrackers() creates all the standard trackers for a given Group.
+	 *
+	 *	@return true/false
+	 */
+	function createTrackers() {
+
+		// first, check if trackers already exist
+		$res=db_query("SELECT * FROM artifact_group_list 
+			WHERE group_id='".$this->Group->getID()."' AND datatype > 0");
+		if (db_numrows($res) > 0) {
+			return true;
+		}
+
+		db_begin();
+		if (!$this->createBugTracker()) {
+			db_rollback();
+			return false;
+		} elseif (!$this->createSupportTracker()) {
+			db_rollback();
+			return false;
+		} elseif (!$this->createPatchTracker()) {
+			db_rollback();
+			return false;
+		} elseif (!$this->createFeatureTracker()) {
+			db_rollback();
+			return false;
+		} else {
+			db_commit();
+			return true;
+		}
+	}
+
+	/**
+	 *	createBugTracker() creates bug tracker
+	 *
+	 *	@return true/false
+	 *	@access private
+	 */
+	function createBugTracker() {
+		$at=new ArtifactType($this->Group);
+		if (!$at || !is_object($at)) {
+			$this->setError('Error Creating ArtifactType for Bug Tracker');
+			return false;
+		} else {
+			if ($at->create('Bugs','Bug Tracking System',1,1,0,'',30,1,'','',1)) {
+				//
+				//	create a default category
+				//	
+				$ac=new ArtifactCategory($at);
+				$ac->create('Interface (example)',100);
+
+				//
+				//	create a default group
+				//	
+				$ag=new ArtifactGroup($at);
+				$ag->create('v1.0 (example)');
+				return true;
+			} else {
+				$this->setError('Failed to create bug tracker: '.$at->getErrorMessage());
+				return false;
+			}
+		}	  
+	}
+
+	/**
+	 *	createSupportTracker() creates support tracker
+	 *
+	 *	@return true/false
+	 *	@access private
+	 */
+	function createSupportTracker() {
+		$at=new ArtifactType($this->Group);
+		if (!$at || !is_object($at)) {
+			$this->setError('Error Creating ArtifactType for support Tracker');
+			return false;
+		} else {
+			if ($at->create('Support Requests','Tech Support Tracking System',1,1,0,'',15,0,'','',2)) {
+				//
+				//  create a default category
+				//  
+				$ac=new ArtifactCategory($at);
+				$ac->create('Install Problem (example)',100);
+
+				//
+				//  create a default group
+				//  
+				$ag=new ArtifactGroup($at);
+				$ag->create('v1.0 (example)');
+				return true;
+			} else {
+				$this->setError('Failed to create support tracker: '.$at->getErrorMessage());
+				return false;
+			}   
+		}
+	}
+
+	/**
+	 *	createPatchTracker() creates patch tracker
+	 *
+	 *	@return true/false
+	 *	@access private
+	 */
+	function createPatchTracker() {
+		//	
+		//  Set up a patch tracker for this group
+		//  
+		$at=new ArtifactType($this->Group);
+		if (!$at || !is_object($at)) {
+			$this->setError('Error Creating ArtifactType for patch Tracker');
+			return false;
+		} else {
+			if ($at->create('Patches','Patch Tracking System',1,1,0,'',15,1,'','',3)) {
+				//
+				//  create a default category
+				//
+				$ac=new ArtifactCategory($at);
+				$ac->create('Widget (example)',100);
+
+				//  
+				//  create a default group
+				//
+				$ag=new ArtifactGroup($at);
+				$ag->create('Unstable (example)');
+				return true;
+			} else {
+				$this->setError('Failed to create support tracker: '.$at->getErrorMessage());
+				return false;
+			}
+		}
+	}
+
+	/**
+	 *	createFeatureTracker() creates feature tracker
+	 *
+	 *	@return true/false
+	 *	@access private
+	 */
+	function createFeatureTracker() {
+		//	
+		//  Set up a feature request tracker for this group
+		//	
+		$at=new ArtifactType($this->Group);
+		if (!$at || !is_object($at)) {
+			$this->setError('Error Creating ArtifactType for feature Tracker');
+			return false;
+		} else {
+			if ($at->create('Feature Requests','Feature Request Tracking System',1,1,0,'',45,0,'','',4)) {
+				//
+				//  create a default category
+				//
+				$ac=new ArtifactCategory($at);
+				$ac->create('Interface Improvements (example)',100);
+
+				//  
+				//  create a default group
+				//
+				$ag=new ArtifactGroup($at);
+				$ag->create('Next Release (example)');
+				return true;
+			} else {
+				$this->setError('Failed to create support tracker: '.$at->getErrorMessage());
+				return false;
+			}
+		}
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifacts.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifacts.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/common/tracker/Artifacts.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Artifacts.class - Class to handle multiple artifacts
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ *
+ */
+
+require_once('common/include/Error.class');
+
+//need to include Artifact.class
+require_once('common/tracker/Artifact.class');
+
+class Artifacts extends Error {
+
+	/**
+	 * Status db resource ID
+	 *
+	 * @var		int		$status_res
+	 */
+	var $status_res;
+
+	/**
+	 * Artifact Type object
+	 *
+	 * @var		object	$ArtifactType
+	 */
+	var $ArtifactType; 
+
+	/**
+	 * Array of Artifact objects
+	 *
+	 * @var		array	$artifacts_array
+	 */
+	var $artifacts_array; 
+
+	/**
+	 *  Artifacts() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param	object	Artifact Type object
+	 *  @param	int		(primary key from database)
+	 *  @return true/false
+	 */
+	function Artifacts(&$ArtifactType) {
+		$this->Error(); 
+
+		$this->ArtifactType =& $ArtifactType;
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('Artifact: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('Artifact: '.$ArtifactType->getErrorMessage());
+			return false;
+		}
+
+	}
+
+	/**
+	 *  getArtifacts() - get an array of artifacts
+	 *
+	 *  Retrieves an array of artifact objects.
+	 *
+	 *  @param	bool	Database query offset
+	 *  @return an array of artifact objects on success / false on failure.
+	 */
+	function &getArtifacts($offset=false) {
+		if (!$offset) {
+			$offset = 0;
+		}
+
+		$sql = "SELECT 
+					* 
+				FROM 
+					artifact_vw 
+				WHERE 
+					group_artifact_id='". $this->ArtifactType->getID() ."'";
+	
+		$res = db_query($sql,500,$offset);
+
+		if (!$res) {
+			$this->setError('Could not get artifacts: ' . db_error());
+			return false;
+		} else {
+			while ($rows = db_fetch_array($res)) {
+				$this->artifacts_array[] = new Artifact($this->ArtifactType, $rows);
+			}
+
+			return $this->artifacts_array;
+		}
+	}
+
+	/**
+	 * getArtifactType() - get the artifact type
+	 *
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/check_stale_tracker_items.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/check_stale_tracker_items.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/check_stale_tracker_items.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,40 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+ * check_stale_tracker_items.php - Check for stale tracker items.
+ *
+ * This script goes through the database looking for tracker items that have a
+ * status of 'Pending' older than the admin-defined timeout period.  The items
+ * that it finds it goes ahead and closes them out.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id$
+ * @author Darrell Brogdon dbrogdon at valinux.com
+ # @date 2001-04-20
+ *
+ */
+
+require ('squal_pre.php');
+
+$time = time();
+
+$sql = "UPDATE
+			artifact
+		SET
+		    status_id='2'
+		WHERE
+	        artifact_id IN (
+				SELECT
+					artifact_id
+				FROM
+					artifact a NATURAL JOIN artifact_group_list agl
+				WHERE
+					(agl.status_timeout+a.close_date) < '$time'
+				AND
+					a.status_id=4);";
+$res = db_query($sql);
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/check_stale_tracker_items.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/db_foundry_boxes.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/db_foundry_boxes.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/db_foundry_boxes.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,148 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: db_foundry_boxes.php,v 1.8 2001/06/13 18:44:09 pfalcon Exp $
+  *
+  */
+
+require ('squal_pre.php');
+
+/*
+
+	Aggregation script - 
+
+	--
+	--	must be run after foundry population and stats
+	--
+
+	Since we cannot crunch down all the data on the fly anymore, 
+	we need to crunch it down once daily into a separate table
+
+	DEPENDS ON 
+		-download stats
+		-project weekly metric
+
+For the First-Time Run, Issue this SQL:
+
+CREATE TABLE foundry_project_rankings_agg AS
+SELECT 
+	DISTINCT ON (fp.foundry_id,pwm.ranking)
+	fp.foundry_id,
+	groups.group_id,
+	groups.group_name,
+	groups.unix_group_name,
+	pwm.ranking,
+	pwm.percentile 
+FROM
+	groups,project_weekly_metric pwm, foundry_projects fp 
+WHERE 
+	groups.group_id=pwm.group_id 
+	AND pwm.group_id=fp.project_id 
+	AND groups.is_public=1 
+	AND groups.type=1 
+	ORDER BY
+	foundry_id ASC, ranking ASC;
+
+CREATE INDEX foundryprojectrankingsagg_foundry_ranking ON foundry_project_rankings_agg (foundry_id,ranking);
+
+
+DROP TABLE foundry_project_downloads_agg;
+CREATE TABLE foundry_project_downloads_agg AS
+SELECT 
+	DISTINCT ON (fp.foundry_id,frs_dlstats_group_agg.downloads,groups.group_id)
+	fp.foundry_id,
+	frs_dlstats_group_agg.downloads,
+	groups.group_id, 
+	groups.group_name, 
+	groups.unix_group_name
+FROM 
+	frs_dlstats_group_agg,groups, foundry_projects fp 
+WHERE
+	frs_dlstats_group_agg.month='200102' AND
+	frs_dlstats_group_agg.day='20' 
+	AND frs_dlstats_group_agg.group_id=groups.group_id 
+	AND groups.type=1 
+	AND groups.is_public=1
+	AND groups.group_id=fp.project_id
+	ORDER BY foundry_id DESC, downloads DESC, group_id DESC;
+
+CREATE INDEX foundryprojdlsagg_foundryid_dls ON foundry_project_downloads_agg (foundry_id,downloads);
+
+*/
+
+
+/*
+    Create an aggregation table that includes foundry member project rankings
+*/
+db_begin(SYS_DB_STATS);
+
+$rel = db_query("DELETE FROM foundry_project_rankings_agg;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO foundry_project_rankings_agg
+SELECT 
+    DISTINCT ON (fp.foundry_id,pwm.ranking)
+    fp.foundry_id,
+    groups.group_id,
+    groups.group_name,
+    groups.unix_group_name,
+    pwm.ranking,
+    pwm.percentile 
+FROM
+    groups,project_weekly_metric pwm, foundry_projects fp 
+WHERE 
+    groups.group_id=pwm.group_id 
+    AND pwm.group_id=fp.project_id 
+    AND groups.is_public=1 
+    AND groups.type=1 
+    ORDER BY
+    foundry_id ASC, ranking ASC;
+", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+
+/*
+	Now crunch down the top downloads for each foundry
+*/
+
+$month=date('Ym',(time()-(86400*2)));
+$day=date('d',(time()-(86400*2)));
+
+db_begin(SYS_DB_STATS);
+
+$rel = db_query("DELETE FROM foundry_project_downloads_agg;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO foundry_project_downloads_agg
+SELECT 
+    DISTINCT ON (fp.foundry_id,frs_dlstats_group_agg.downloads,groups.group_id)
+    fp.foundry_id,
+    frs_dlstats_group_agg.downloads,
+    groups.group_id, 
+    groups.group_name, 
+    groups.unix_group_name
+FROM 
+    frs_dlstats_group_agg,groups, foundry_projects fp 
+WHERE
+    frs_dlstats_group_agg.month='$month' 
+    AND frs_dlstats_group_agg.day='$day' 
+    AND frs_dlstats_group_agg.group_id=groups.group_id 
+    AND groups.type=1 
+    AND groups.is_public=1
+    AND groups.group_id=fp.project_id
+    ORDER BY foundry_id DESC, downloads DESC, group_id DESC;
+", -1, 0, SYS_DB_STATS);
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/db_foundry_boxes.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/db_project_sums.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/db_project_sums.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/db_project_sums.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,151 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require ('squal_pre.php');
+
+/*
+
+	Aggregation script
+
+	Since we cannot crunch down all the data on the fly anymore, 
+	we need to crunch it down once daily into a separate table, 
+	then join against that table to get counts.
+
+*/
+
+
+/*
+    Create an aggregation table that includes counts of forum messages 
+*/
+db_begin();
+
+db_query("LOCK TABLE forum_agg_msg_count IN ACCESS EXCLUSIVE MODE;");
+db_query("LOCK TABLE forum IN ACCESS EXCLUSIVE MODE;");
+db_query("LOCK TABLE forum_group_list IN ACCESS EXCLUSIVE MODE;");
+
+$res = db_query("DELETE FROM forum_agg_msg_count;");
+if (!$res) {
+	echo "DELETE FROM forum_agg_msg_count : ".db_error();
+}
+
+$res = db_query("INSERT INTO forum_agg_msg_count
+SELECT fgl.group_forum_id,count(f.msg_id)
+FROM forum_group_list fgl
+LEFT JOIN forum f USING (group_forum_id)
+GROUP BY fgl.group_forum_id;");
+if (!$res) {
+	echo "INSERT INTO forum_agg_msg_count : ".db_error();
+}
+
+db_commit();
+
+db_query("VACUUM ANALYZE forum_agg_msg_count;");
+
+
+/*
+	Create an aggregation table that includes counts of artifacts
+*/
+db_begin();
+
+db_query("LOCK TABLE artifact_counts_agg IN ACCESS EXCLUSIVE MODE;");
+db_query("LOCK TABLE artifact IN ACCESS EXCLUSIVE MODE;");
+db_query("LOCK TABLE artifact_group_list IN ACCESS EXCLUSIVE MODE;");
+
+$rel = db_query("DELETE FROM artifact_counts_agg;");
+echo db_error();
+
+$rel=db_query("INSERT INTO artifact_counts_agg
+SELECT agl.group_artifact_id,
+(SELECT count(*) FROM artifact WHERE status_id <> 3 AND group_artifact_id=agl.group_artifact_id), 
+(SELECT count(*) FROM artifact WHERE status_id=1 AND group_artifact_id=agl.group_artifact_id)
+FROM artifact_group_list agl 
+LEFT JOIN artifact a USING (group_artifact_id)
+GROUP BY agl.group_artifact_id;");
+echo db_error();
+
+db_commit();
+
+db_query("VACUUM ANALYZE artifact_counts_agg;");
+
+/*
+
+	Rebuild the project_sums_agg table, which saves us
+	from doing really expensive queries
+	each time the project summary is viewed
+
+*/
+
+db_begin();
+$res=db_query("DELETE FROM project_sums_agg;");
+
+/*
+	Get counts of mailing lists
+*/
+$sql="INSERT INTO project_sums_agg 
+	SELECT group_id,'mail'::text AS type,count(*) AS count 
+	FROM mail_group_list
+	GROUP BY group_id,type;";
+
+$res=db_query($sql);
+echo db_error();
+
+
+/*
+	Get counts of surveys
+*/
+$sql="INSERT INTO project_sums_agg 
+	SELECT group_id,'surv'::text AS type,count(*) AS count 
+	FROM surveys
+	WHERE is_active='1'
+	GROUP BY group_id,type;";
+
+$res=db_query($sql);
+echo db_error();
+
+
+/*
+	Forum message count
+*/
+$sql="INSERT INTO project_sums_agg
+	SELECT forum_group_list.group_id,'fmsg'::text AS type, count(forum.msg_id) AS count 
+	FROM forum,forum_group_list 
+	WHERE forum.group_forum_id=forum_group_list.group_forum_id 
+	AND forum_group_list.is_public=1
+	GROUP BY group_id,type;";
+
+$res=db_query($sql);
+echo db_error();
+
+
+/*
+	Forum count
+*/
+$sql="INSERT INTO project_sums_agg
+	SELECT group_id,'fora'::text AS type, count(*) AS count 
+	FROM forum_group_list 
+	WHERE is_public=1
+	GROUP BY group_id,type;";
+
+$res=db_query($sql);
+echo db_error();
+
+
+db_commit();
+echo db_error();
+
+db_query("VACUUM ANALYZE project_sums_agg;");
+
+if (db_error()) {
+	echo "Error: ".db_error();
+}
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/db_project_sums.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/db_stats_agg.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/db_stats_agg.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/db_stats_agg.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,870 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require ('squal_pre.php');
+
+/*
+
+	Aggregation script
+
+	Since we cannot crunch down all the data on the fly anymore, 
+	we need to crunch it down once daily into separate tables
+
+*/
+
+
+/*
+	FIRST TIME RUN:
+
+--
+--	Create a table of total downloads by file
+--
+--	NOTE: Builds on stats_sum.pl
+--
+DROP TABLE frs_dlstats_filetotal_agg;
+CREATE TABLE frs_dlstats_filetotal_agg AS
+SELECT file_id,sum(downloads)::int AS downloads
+FROM frs_dlstats_file_agg
+GROUP BY file_id;
+
+CREATE INDEX frsdlfiletotal_fileid on frs_dlstats_filetotal_agg(file_id);
+
+--
+--	Create a table of total downloads by group
+--
+--	NOTE: Builds on prior step (frs_dlstats_filetotal_agg)
+--
+DROP TABLE frs_dlstats_grouptotal_agg;
+CREATE TABLE frs_dlstats_grouptotal_agg AS
+SELECT frs_package.group_id, sum(frs_dlstats_filetotal_agg.downloads)::int AS downloads
+FROM frs_package,frs_release,frs_file,frs_dlstats_filetotal_agg
+WHERE frs_package.package_id=frs_release.package_id 
+AND frs_release.release_id=frs_file.release_id 
+AND frs_file.file_id=frs_dlstats_filetotal_agg.file_id
+GROUP BY frs_package.group_id;
+
+CREATE INDEX frsdlgrouptotal_groupid ON frs_dlstats_grouptotal_agg(group_id);
+
+--
+--	Create table of total downloads by group/day
+--
+--	NOTE: Builds on frs_dlstats_filetotal_agg
+--
+DROP TABLE frs_dlstats_group_agg;
+CREATE TABLE frs_dlstats_group_agg AS
+SELECT 
+frs_package.group_id::int AS group_id, 
+fdfa.month::int AS month, 
+fdfa.day::int AS day, 
+sum(fdfa.downloads)::int AS downloads
+FROM frs_package,frs_release,frs_file,frs_dlstats_file_agg fdfa
+WHERE frs_package.package_id=frs_release.package_id 
+AND frs_release.release_id=frs_file.release_id 
+AND frs_file.file_id=fdfa.file_id
+GROUP BY frs_package.group_id,fdfa.month, fdfa.day;
+
+CREATE INDEX frsdlgroup_groupid ON frs_dlstats_group_agg(group_id);
+CREATE INDEX frsdlgroup_month_day_groupid ON frs_dlstats_group_agg(month,day,group_id);
+
+--
+--	Create a table containing project_stats grouped by month
+--
+DROP TABLE stats_project_months;
+CREATE TABLE stats_project_months AS
+SELECT spd.month::int AS month,
+	spd.group_id::int AS group_id,
+	spd.developers::int AS developers,
+	spm.group_ranking::int AS group_ranking,
+	spm.group_metric::float AS group_metric,
+	salbg.logo_showings::int AS logo_showings,
+	fdga.downloads::int AS downloads,
+	sasbg.site_views::int AS site_views,
+	ssp.subdomain_views::int AS subdomain_views,
+	(coalesce(sasbg.site_views,0) + coalesce(ssp.subdomain_views,0))::int AS page_views,
+	sp.file_releases::int AS file_releases,
+	sp.msg_posted::int AS msg_posted,
+	sp.msg_uniq_auth::int AS msg_uniq_auth,
+	sp.bugs_opened::int AS bugs_opened,
+	sp.bugs_closed::int AS bugs_closed,
+	sp.support_opened::int AS support_opened,
+	sp.support_closed::int AS support_closed,
+	sp.patches_opened::int AS patches_opened,
+	sp.patches_closed::int AS patches_closed,
+	sp.artifacts_opened::int AS artifacts_opened,
+	sp.artifacts_closed::int AS artifacts_closed,
+	sp.tasks_opened::int AS tasks_opened,
+	sp.tasks_closed::int AS tasks_closed,
+	sp.help_requests::int AS help_requests,
+	scg.cvs_checkouts::int AS cvs_checkouts,
+	scg.cvs_commits::int AS cvs_commits,
+	scg.cvs_adds::int AS cvs_adds
+	FROM (
+		SELECT month,group_id,avg(developers)::int AS developers 
+		FROM stats_project_developers GROUP BY month,group_id 
+		) spd 
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(file_releases) AS file_releases,
+			sum(msg_posted) AS msg_posted,
+			sum(msg_uniq_auth) AS msg_uniq_auth,
+			sum(bugs_opened) AS bugs_opened,
+			sum(bugs_closed) AS bugs_closed, 
+			sum(support_opened) AS support_opened,
+			sum(support_closed) AS support_closed,
+			sum(patches_opened) AS patches_opened,
+			sum(patches_closed) AS patches_closed,
+			sum(artifacts_opened) AS artifacts_opened,
+			sum(artifacts_closed) AS artifacts_closed,
+			sum(tasks_opened) AS tasks_opened,
+			sum(tasks_closed) AS tasks_closed,
+			sum(help_requests) AS help_requests
+		FROM
+			stats_project
+		GROUP BY month,group_id
+		) sp USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(count) AS logo_showings 
+		FROM stats_agg_logo_by_group 
+		GROUP BY month,group_id
+		) salbg USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,avg(ranking)::int AS group_ranking,avg(percentile)::float AS group_metric
+		FROM stats_project_metric 
+		GROUP BY month,group_id
+		) spm USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(checkouts) AS cvs_checkouts,sum(commits) AS cvs_commits,sum(adds) AS cvs_adds
+		FROM stats_cvs_group 
+		GROUP BY month,group_id
+		) scg USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(count) AS site_views
+		FROM stats_agg_site_by_group 
+		GROUP BY month,group_id
+		) sasbg USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(pages) AS subdomain_views
+		FROM stats_subd_pages 
+		GROUP BY month,group_id
+		) ssp USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(downloads) AS downloads
+		FROM frs_dlstats_group_agg 
+		GROUP BY month,group_id
+		) fdga USING (month,group_id);
+
+CREATE INDEX statsprojectmonths_groupid on stats_project_months(group_id);
+CREATE INDEX statsprojectmonths_groupid_month on stats_project_months(group_id,month);
+
+--
+--	Create a table containing project_stats grouped by all time
+--
+--	NOTE: Builds on results in stats_project_months
+--
+DROP TABLE stats_project_all;
+CREATE TABLE stats_project_all AS
+SELECT group_id::int AS group_id,
+	AVG(developers)::int AS developers,
+	AVG(group_ranking)::int AS group_ranking,
+	AVG(group_metric)::float AS group_metric, 
+	SUM(logo_showings)::int AS logo_showings,
+	SUM(downloads)::int AS downloads, 
+	SUM(site_views)::int AS site_views,
+	SUM(subdomain_views)::int AS subdomain_views,
+	SUM(page_views)::int AS page_views, 
+	SUM(msg_posted)::int AS msg_posted, 
+	AVG(msg_uniq_auth)::int AS msg_uniq_auth,
+	SUM(bugs_opened)::int AS bugs_opened,
+	SUM(bugs_closed)::int AS bugs_closed, 
+	SUM(support_opened)::int AS support_opened, 
+	SUM(support_closed)::int AS support_closed, 
+	SUM(patches_opened)::int AS patches_opened, 
+	SUM(patches_closed)::int AS patches_closed, 
+	SUM(artifacts_opened)::int AS artifacts_opened, 
+	SUM(artifacts_closed)::int AS artifacts_closed, 
+	SUM(tasks_opened)::int AS tasks_opened, 
+	SUM(tasks_closed)::int AS tasks_closed, 
+	SUM(help_requests)::int AS help_requests, 
+	SUM(cvs_checkouts)::int AS cvs_checkouts, 
+	SUM(cvs_commits)::int AS cvs_commits, 
+	SUM(cvs_adds)::int AS cvs_adds 
+	FROM stats_project_months 
+	GROUP BY group_id
+	ORDER BY group_id DESC;
+
+CREATE INDEX statsprojectall_groupid on stats_project_all(group_id);
+
+--
+--	We unforunately have to create this temp table as postgres
+--	fails to produce the right results in production (works on webdev)
+--
+DROP TABLE stats_project_developers_last30;
+CREATE TABLE stats_project_developers_last30 AS
+SELECT * FROM stats_project_developers 
+WHERE (month = 200104 AND day >= 8 ) OR ( month > 200104 );
+
+--
+--	Build a table with only the last 30 days of data in it
+--
+DROP TABLE stats_project_last_30;
+CREATE TABLE stats_project_last_30 AS
+SELECT spd.month::int AS month,
+spd.day::int AS day,
+spd.group_id::int AS group_id,
+spd.developers::int AS developers,
+spm.ranking::int AS group_ranking,
+spm.percentile::float AS group_metric,
+salbg.count::int AS logo_showings,
+fdga.downloads::int AS downloads,
+sasbg.count::int AS site_views,
+ssp.pages::int AS subdomain_views,
+(coalesce(sasbg.count,0) + coalesce(ssp.pages,0))::int AS page_views,
+sp.file_releases::int AS filereleases,
+sp.msg_posted::int AS msg_posted,
+sp.msg_uniq_auth::int AS msg_uniq_auth,
+sp.bugs_opened::int AS bugs_opened,
+sp.bugs_closed::int AS bugs_closed,
+sp.support_opened::int AS support_opened,
+sp.support_closed::int AS support_closed,
+sp.patches_opened::int AS patches_opened,
+sp.patches_closed::int AS patches_closed,
+sp.artifacts_opened::int AS artifacts_opened,
+sp.artifacts_closed::int AS artifacts_closed,
+sp.tasks_opened::int AS tasks_opened,
+sp.tasks_closed::int AS tasks_closed,
+sp.help_requests::int AS help_requests,
+scg.checkouts::int AS cvs_checkouts,
+scg.commits::int AS cvs_commits,
+scg.adds::int AS cvs_adds
+
+FROM stats_project_developers_last30 spd
+
+LEFT JOIN frs_dlstats_group_agg fdga USING (month,day,group_id)
+LEFT JOIN stats_project sp USING (month,day,group_id)
+LEFT JOIN stats_agg_logo_by_group salbg USING (month,day,group_id)
+LEFT JOIN stats_project_metric spm USING (month,day,group_id)
+LEFT JOIN stats_cvs_group scg USING (month,day,group_id)
+LEFT JOIN stats_agg_site_by_group sasbg USING (month,day,group_id)
+LEFT JOIN stats_subd_pages ssp USING (month,day,group_id)
+;
+
+CREATE INDEX statsproject30_groupid on stats_project_last_30(group_id);
+
+--
+--	create a table containing main site page views grouped by month
+--
+DROP TABLE stats_site_pages_by_month;
+CREATE TABLE stats_site_pages_by_month AS
+select month,sum(site_page_views)::int as site_page_views 
+	from stats_site_pages_by_day group by month;
+
+--
+--	Create a table joining stats_site and stats_project
+--	with the last 30 days of data only
+--
+--	NOTE: Builds on results of stats_project_last_30
+--
+DROP TABLE stats_site_last_30;
+CREATE TABLE stats_site_last_30 AS
+SELECT p.month::int AS month, 
+	p.day::int AS day, 
+	sspbd.site_page_views::int AS site_page_views,
+	SUM(p.downloads)::int AS downloads, 
+	SUM(p.subdomain_views)::int AS subdomain_views,
+	SUM(p.msg_posted)::int AS msg_posted, 
+	SUM(p.bugs_opened)::int AS bugs_opened, 
+	SUM(p.bugs_closed)::int AS bugs_closed, 
+	SUM(p.support_opened)::int AS support_opened, 
+	SUM(p.support_closed)::int AS support_closed, 
+	SUM(p.patches_opened)::int AS patches_opened, 
+	SUM(p.patches_closed)::int AS patches_closed, 
+	SUM(p.artifacts_opened)::int AS artifacts_opened,
+	SUM(p.artifacts_closed)::int AS artifacts_closed,
+	SUM(p.tasks_opened)::int AS tasks_opened, 
+	SUM(p.tasks_closed)::int AS tasks_closed, 
+	SUM(p.help_requests)::int AS help_requests, 
+	SUM(p.cvs_checkouts)::int AS cvs_checkouts, 
+	SUM(p.cvs_commits)::int AS cvs_commits, 
+	SUM(p.cvs_adds)::int AS cvs_adds 
+	FROM stats_project_last_30 p, stats_site_pages_by_day sspbd
+		WHERE p.month=sspbd.month AND p.day=sspbd.day
+	GROUP BY p.month, p.day, sspbd.site_page_views;
+
+CREATE INDEX statssitelast30_month_day on stats_site_last_30 (month,day);
+
+--
+--  Create a table joining stats_site and stats_project
+--  grouped by month
+--
+--	NOTICE - this builds on the results of stats_project_months
+--
+DROP TABLE stats_site_months;
+CREATE TABLE stats_site_months AS
+SELECT spm.month::int AS month, 
+	sspbm.site_page_views::int AS site_page_views,
+	SUM(spm.downloads)::int AS downloads,
+	SUM(spm.subdomain_views)::int AS subdomain_views,
+	SUM(spm.msg_posted)::int AS msg_posted, 
+	SUM(spm.bugs_opened)::int AS bugs_opened, 
+	SUM(spm.bugs_closed)::int AS bugs_closed, 
+	SUM(spm.support_opened)::int AS support_opened, 
+	SUM(spm.support_closed)::int AS support_closed, 
+	SUM(spm.patches_opened)::int AS patches_opened, 
+	SUM(spm.patches_closed)::int AS patches_closed, 
+	SUM(spm.artifacts_opened)::int AS artifacts_opened,
+	SUM(spm.artifacts_closed)::int AS artifacts_closed,
+	SUM(spm.tasks_opened)::int AS tasks_opened, 
+	SUM(spm.tasks_closed)::int AS tasks_closed, 
+	SUM(spm.help_requests)::int AS help_requests,
+	SUM(spm.cvs_checkouts)::int AS cvs_checkouts, 
+	SUM(spm.cvs_commits)::int AS cvs_commits, 
+	SUM(spm.cvs_adds)::int AS cvs_adds 
+	FROM stats_project_months spm, stats_site_pages_by_month sspbm
+		WHERE spm.month=sspbm.month
+	GROUP BY spm.month,sspbm.site_page_views
+	ORDER BY spm.month ASC;
+
+CREATE INDEX statssitemonths_month on stats_site_months(month);
+
+--
+--  Create a table joining stats_site and stats_project
+--  grouped by all to get total
+--
+--  NOTICE - this builds on the results of stats_site_months
+--
+DROP TABLE stats_site_all;
+CREATE TABLE stats_site_all AS
+SELECT 
+	SUM(site_page_views)::int AS site_page_views,
+	SUM(downloads)::int AS downloads,
+	SUM(subdomain_views)::int AS subdomain_views,
+	SUM(msg_posted)::int AS msg_posted, 
+	SUM(bugs_opened)::int AS bugs_opened, 
+	SUM(bugs_closed)::int AS bugs_closed, 
+	SUM(support_opened)::int AS support_opened, 
+	SUM(support_closed)::int AS support_closed, 
+	SUM(patches_opened)::int AS patches_opened, 
+	SUM(patches_closed)::int AS patches_closed, 
+	SUM(artifacts_opened)::int AS artifacts_opened,
+	SUM(artifacts_closed)::int AS artifacts_closed,
+	SUM(tasks_opened)::int AS tasks_opened, 
+	SUM(tasks_closed)::int AS tasks_closed, 
+	SUM(help_requests)::int AS help_requests,
+	SUM(cvs_checkouts)::int AS cvs_checkouts, 
+	SUM(cvs_commits)::int AS cvs_commits, 
+	SUM(cvs_adds)::int AS cvs_adds 
+	FROM stats_site_months;
+
+*/
+
+
+
+//
+//  total file downloads by file
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning frs_dlstats_filetotal_agg: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM frs_dlstats_filetotal_agg;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO frs_dlstats_filetotal_agg
+SELECT file_id,sum(downloads) AS downloads
+FROM frs_dlstats_file_agg
+GROUP BY file_id
+;", -1, 0, SYS_DB_STATS);
+
+if (!$rel) {
+    echo "ERROR IN frs_dlstats_filetotal_agg";
+}   
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE frs_dlstats_filetotal_agg;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//  total downloads by group
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning frs_dlstats_grouptotal_agg: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM frs_dlstats_grouptotal_agg;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO frs_dlstats_grouptotal_agg
+SELECT frs_package.group_id, sum(frs_dlstats_filetotal_agg.downloads) AS downloads
+FROM frs_package,frs_release,frs_file,frs_dlstats_filetotal_agg
+WHERE frs_package.package_id=frs_release.package_id 
+AND frs_release.release_id=frs_file.release_id 
+AND frs_file.file_id=frs_dlstats_filetotal_agg.file_id
+GROUP BY frs_package.group_id
+;", -1, 0, SYS_DB_STATS);
+
+if (!$rel) {
+    echo "ERROR IN frs_dlstats_grouptotal_agg";
+}
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE frs_dlstats_grouptotal_agg;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//  total downloads by group
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning frs_dlstats_group_agg: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM frs_dlstats_group_agg;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO frs_dlstats_group_agg
+SELECT frs_package.group_id, fdfa.month, fdfa.day, sum(fdfa.downloads) AS downloads
+FROM frs_package,frs_release,frs_file,frs_dlstats_file_agg fdfa
+WHERE frs_package.package_id=frs_release.package_id 
+AND frs_release.release_id=frs_file.release_id 
+AND frs_file.file_id=fdfa.file_id
+GROUP BY frs_package.group_id,fdfa.month, fdfa.day
+;", -1, 0, SYS_DB_STATS);
+
+if (!$rel) {
+    echo "ERROR IN frs_dlstats_group_agg";
+}
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE frs_dlstats_group_agg;", -1, 0, SYS_DB_STATS);
+
+?><?php
+
+
+//
+//	project stats by month
+//
+db_begin(SYS_DB_STATS);
+echo "\n\nBeginning stats_project_months: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_project_months;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_project_months
+SELECT spd.month,
+	spd.group_id,
+	spd.developers,
+	spm.group_ranking,
+	spm.group_metric,
+	salbg.logo_showings,
+	fdga.downloads,
+	sasbg.site_views,
+	ssp.subdomain_views,
+	(sasbg.site_views + ssp.subdomain_views) AS page_views,
+	sp.file_releases,
+	sp.msg_posted,
+	sp.msg_uniq_auth,
+	sp.bugs_opened,
+	sp.bugs_closed,
+	sp.support_opened,
+	sp.support_closed,
+	sp.patches_opened,
+	sp.patches_closed,
+	sp.artifacts_opened,
+	sp.artifacts_closed,
+	sp.tasks_opened,
+	sp.tasks_closed,
+	sp.help_requests,
+	scg.cvs_checkouts,
+	scg.cvs_commits,
+	scg.cvs_adds
+	FROM (
+		SELECT month,group_id,avg(developers)::int AS developers 
+		FROM stats_project_developers GROUP BY month,group_id 
+		) spd 
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(file_releases) AS file_releases,
+			sum(msg_posted) AS msg_posted,
+			sum(msg_uniq_auth) AS msg_uniq_auth,
+			sum(bugs_opened) AS bugs_opened,
+			sum(bugs_closed) AS bugs_closed, 
+			sum(support_opened) AS support_opened,
+			sum(support_closed) AS support_closed,
+			sum(patches_opened) AS patches_opened,
+			sum(patches_closed) AS patches_closed,
+			sum(artifacts_opened) AS artifacts_opened,
+			sum(artifacts_closed) AS artifacts_closed,
+			sum(tasks_opened) AS tasks_opened,
+			sum(tasks_closed) AS tasks_closed,
+			sum(help_requests) AS help_requests
+		FROM
+			stats_project
+		GROUP BY month,group_id
+		) sp USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(count) AS logo_showings 
+		FROM stats_agg_logo_by_group 
+		GROUP BY month,group_id
+		) salbg USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,avg(ranking)::int AS group_ranking,avg(percentile)::float AS group_metric
+		FROM stats_project_metric 
+		GROUP BY month,group_id
+		) spm USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(checkouts) AS cvs_checkouts,sum(commits) AS cvs_commits,sum(adds) AS cvs_adds
+		FROM stats_cvs_group 
+		GROUP BY month,group_id
+		) scg USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(count) AS site_views
+		FROM stats_agg_site_by_group 
+		GROUP BY month,group_id
+		) sasbg USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(pages) AS subdomain_views
+		FROM stats_subd_pages 
+		GROUP BY month,group_id
+		) ssp USING (month,group_id)
+
+	LEFT JOIN (
+		SELECT month,group_id,sum(downloads) AS downloads
+		FROM frs_dlstats_group_agg 
+		GROUP BY month,group_id
+		) fdga USING (month,group_id);
+", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_project_months;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//	All-time stats by group_id
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_project_all: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_project_all;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_project_all
+SELECT group_id,
+    AVG(developers)::int AS developers,
+    AVG(group_ranking)::int AS group_ranking,
+    AVG(group_metric) AS group_metric, 
+    SUM(logo_showings) AS logo_showings,
+    SUM(downloads) AS downloads, 
+    SUM(site_views) AS site_views,
+    SUM(subdomain_views) AS subdomain_views,
+    SUM(page_views) AS page_views, 
+    SUM(msg_posted) AS msg_posted, 
+    AVG(msg_uniq_auth)::int AS msg_uniq_auth,
+    SUM(bugs_opened) AS bugs_opened,
+    SUM(bugs_closed) AS bugs_closed, 
+    SUM(support_opened) AS support_opened, 
+    SUM(support_closed) AS support_closed, 
+    SUM(patches_opened) AS patches_opened, 
+    SUM(patches_closed) AS patches_closed, 
+    SUM(artifacts_opened) AS artifacts_opened, 
+    SUM(artifacts_closed) AS artifacts_closed, 
+    SUM(tasks_opened) AS tasks_opened, 
+    SUM(tasks_closed) AS tasks_closed, 
+    SUM(help_requests) AS help_requests, 
+    SUM(cvs_checkouts) AS cvs_checkouts, 
+    SUM(cvs_commits) AS cvs_commits, 
+    SUM(cvs_adds) AS cvs_adds 
+    FROM stats_project_months 
+    GROUP BY group_id
+    ORDER BY group_id DESC
+;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_project_all;", -1, 0, SYS_DB_STATS);
+
+
+$beg_year=date('Y',mktime(0,0,0,(date('m')-1),date('d'),date('Y')));
+$beg_month=date('m',mktime(0,0,0,(date('m')-1),date('d'),date('Y')));
+$beg_day=date('d',mktime(0,0,0,(date('m')-1),date('d'),date('Y')));
+
+echo "\n$beg_year$beg_month$beg_day";
+
+$year=date('Y');
+$month=date('m');
+
+//
+//	Table with just the last 30 days data sorted out
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_project_developers_last30: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_project_developers_last30;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_project_developers_last30
+SELECT * FROM stats_project_developers
+WHERE ( month = '$beg_year$beg_month' AND day >= '$beg_day' ) OR ( month > '$beg_year$beg_month' );
+", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_project_developers_last30;", -1, 0, SYS_DB_STATS);
+
+?><?php
+
+
+//
+//	Table with just the last 30 days data sorted out
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_project_last_30: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_project_last_30;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_project_last_30
+SELECT spd.month,
+spd.day,
+spd.group_id,
+spd.developers,
+spm.ranking AS group_ranking,
+spm.percentile AS group_metric,
+salbg.count AS logo_showings,
+fdga.downloads,
+sasbg.count AS site_views,
+ssp.pages AS subdomain_views,
+sasbg.count+ssp.pages AS page_views,
+sp.file_releases,
+sp.msg_posted,
+sp.msg_uniq_auth,
+sp.bugs_opened,
+sp.bugs_closed,
+sp.support_opened,
+sp.support_closed,
+sp.patches_opened,
+sp.patches_closed,
+sp.artifacts_opened,
+sp.artifacts_closed,
+sp.tasks_opened,
+sp.tasks_closed,
+sp.help_requests,
+scg.checkouts AS cvs_checkouts,
+scg.commits AS cvs_commits,
+scg.adds AS cvs_adds
+
+FROM stats_project_developers_last30 spd
+
+LEFT JOIN frs_dlstats_group_agg fdga USING (month,day,group_id)
+LEFT JOIN stats_project sp USING (month,day,group_id)
+LEFT JOIN stats_agg_logo_by_group salbg USING (month,day,group_id)
+LEFT JOIN stats_project_metric spm USING (month,day,group_id)
+LEFT JOIN stats_cvs_group scg USING (month,day,group_id)
+LEFT JOIN stats_agg_site_by_group sasbg USING (month,day,group_id)
+LEFT JOIN stats_subd_pages ssp USING (month,day,group_id)
+;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_project_last_30;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//  main site page views by month
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_site_pages_by_month: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_site_pages_by_month;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_site_pages_by_month
+select month,sum(site_page_views) as site_page_views 
+    from stats_site_pages_by_day group by month;
+", -1, 0, SYS_DB_STATS);
+
+if (!$rel) {
+	echo "ERROR IN stats_site_pages_by_month";
+}
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_site_pages_by_month;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//  sitewide stats in last 30 days
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_site_last_30: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_site_last_30;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_site_last_30
+SELECT p.month, 
+	p.day, 
+	sspbd.site_page_views,
+	SUM(p.downloads) AS downloads, 
+	SUM(p.subdomain_views) AS subdomain_views,
+	SUM(p.msg_posted) AS msg_posted, 
+	SUM(p.bugs_opened) AS bugs_opened, 
+	SUM(p.bugs_closed) AS bugs_closed, 
+	SUM(p.support_opened) AS support_opened, 
+	SUM(p.support_closed) AS support_closed, 
+	SUM(p.patches_opened) AS patches_opened, 
+	SUM(p.patches_closed) AS patches_closed, 
+    SUM(artifacts_opened) AS artifacts_opened, 
+    SUM(artifacts_closed) AS artifacts_closed, 
+	SUM(p.tasks_opened) AS tasks_opened, 
+	SUM(p.tasks_closed) AS tasks_closed, 
+	SUM(p.help_requests) AS help_requests, 
+	SUM(p.cvs_checkouts) AS cvs_checkouts, 
+	SUM(p.cvs_commits) AS cvs_commits, 
+	SUM(p.cvs_adds) AS cvs_adds 
+	FROM stats_project_last_30 p, stats_site_pages_by_day sspbd
+		WHERE p.month=sspbd.month AND p.day=sspbd.day
+	GROUP BY p.month, p.day, sspbd.site_page_views;
+", -1, 0, SYS_DB_STATS);
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_site_last_30;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//  sitewide stats in last 30 days
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_site_months: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_site_months;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_site_months
+SELECT spm.month, 
+	sspbm.site_page_views,
+	SUM(spm.downloads) AS downloads,
+	SUM(spm.subdomain_views) AS subdomain_views,
+	SUM(spm.msg_posted) AS msg_posted, 
+	SUM(spm.bugs_opened) AS bugs_opened, 
+	SUM(spm.bugs_closed) AS bugs_closed, 
+	SUM(spm.support_opened) AS support_opened, 
+	SUM(spm.support_closed) AS support_closed, 
+	SUM(spm.patches_opened) AS patches_opened, 
+	SUM(spm.patches_closed) AS patches_closed, 
+	SUM(spm.artifacts_opened) AS artifacts_opened, 
+	SUM(spm.artifacts_closed) AS artifacts_closed, 
+	SUM(spm.tasks_opened) AS tasks_opened, 
+	SUM(spm.tasks_closed) AS tasks_closed, 
+	SUM(spm.help_requests) AS help_requests, 
+	SUM(spm.cvs_checkouts) AS cvs_checkouts, 
+	SUM(spm.cvs_commits) AS cvs_commits, 
+	SUM(spm.cvs_adds) AS cvs_adds 
+	FROM stats_project_months spm, stats_site_pages_by_month sspbm
+	WHERE spm.month=sspbm.month
+	GROUP BY spm.month,sspbm.site_page_views
+	ORDER BY spm.month ASC;
+", -1, 0, SYS_DB_STATS);
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_site_months;", -1, 0, SYS_DB_STATS);
+
+
+
+//
+//  sitewide stats all time
+//
+db_begin(SYS_DB_STATS);
+
+echo "\n\nBeginning stats_site_all: ".date('Y-m-d H:i:s',time());
+
+$rel = db_query("DELETE FROM stats_site_all;", -1, 0, SYS_DB_STATS);
+echo db_error(SYS_DB_STATS);
+
+$rel=db_query("INSERT INTO stats_site_all
+SELECT 
+	SUM(site_page_views) AS site_page_views,
+	SUM(downloads) AS downloads,
+	SUM(subdomain_views) AS subdomain_views,
+	SUM(msg_posted) AS msg_posted, 
+	SUM(bugs_opened) AS bugs_opened, 
+	SUM(bugs_closed) AS bugs_closed, 
+	SUM(support_opened) AS support_opened, 
+	SUM(support_closed) AS support_closed, 
+	SUM(patches_opened) AS patches_opened, 
+	SUM(patches_closed) AS patches_closed, 
+	SUM(artifacts_opened) AS artifacts_opened, 
+	SUM(artifacts_closed) AS artifacts_closed, 
+	SUM(tasks_opened) AS tasks_opened, 
+	SUM(tasks_closed) AS tasks_closed, 
+	SUM(help_requests) AS help_requests, 
+	SUM(cvs_checkouts) AS cvs_checkouts, 
+	SUM(cvs_commits) AS cvs_commits, 
+	SUM(cvs_adds) AS cvs_adds 
+	FROM stats_site_months;
+", -1, 0, SYS_DB_STATS);
+
+echo db_error(SYS_DB_STATS);
+
+db_commit(SYS_DB_STATS);
+
+db_query("VACUUM ANALYZE stats_site_all;", -1, 0, SYS_DB_STATS);
+
+
+if (db_error(SYS_DB_STATS)) {
+	echo "Error: ".db_error(SYS_DB_STATS);
+}
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/db_stats_agg.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/kt_dump.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/kt_dump.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/kt_dump.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,82 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+  *
+  * kt_dump.php - Retreive the Kernel Traffic page 
+  *
+  * This script retrieves the main Kernel Traffic page and stores it
+  * in the database.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: kt_dump.php,v 1.4 2001/06/13 18:44:09 pfalcon Exp $
+  * @author: Darrell Brogdon <dbrogdon at valinux.com>
+  *
+  */
+
+require ('squal_pre.php');
+set_time_limit(60);
+
+$url = 'http://kt.zork.net/kernel-traffic/latest.html';
+
+// Retrieve the file and store the contents in an array.
+$data =@ file($url);
+if (!sizeof($data)){
+	$errors = 'Could not open link: \'' . $url . "'\n";
+}
+
+$capt_flag = false;
+// Walk through the array looking for elements that indicate the start
+// of the page body.
+foreach ($data as $key => $fileline) {
+	// If this element is the start of the page body then 
+	// Start saving data
+	if( ereg("Kernel Traffic \#", $fileline) ) {
+		$capt_flag = true;
+	}
+
+	if( eregi('<li><a href="latest_print.epl">Printer-Friendly Format</a>',$fileline) ) { 
+		$data[$key] = '<li><a href="' . $url . 'latest_print.epl">Printer-Friendly Format</a>';
+	}
+
+	if( eregi('<li><a href="latest.epl#stats">Mailing List Stats For This Week</a>',$fileline) ) {
+		$data[$key] = '<li><a href="#stats">Mailing List Stats For This Week</a>';
+	}
+
+	// Stop saving data
+	if( eregi('<hr', $fileline) ) {
+		$capt_flag = false;
+	}
+
+	if (!$capt_flag) {
+	// Remove the current line from the array
+		unset($data[$key]);
+	} 
+}
+
+if(!count($data)) {
+	$errors .= "Data size is too small.\n";
+} else {
+	db_begin();
+
+	$sql = 'DELETE FROM kernel_traffic';
+	db_query($sql);
+
+	$sql = 'INSERT INTO kernel_traffic (kt_data) VALUES(\'' . addslashes(implode("", $data)) . '\')';
+	$res = db_query($sql);
+
+	if( !$res || db_affected_rows($res) < 1 ) {
+		db_rollback();
+		$errors .= 'SQL ERROR: ' . db_error();
+	} else {
+		db_commit();
+	}
+}
+
+if ($errors) {
+	$msg = "The following errors ocurred with kt_dump.php:\n     - " . $errors;
+	mail('alexandria-staff at lists.sourceforge.net','kt_dump Failed',$msg);
+}
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/kt_dump.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/massmail.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/massmail.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/massmail.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,280 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+  *
+  * Massmail backend cron script
+  * This is mass mailing backend script which actually sends messages 
+  * of the mailings scheduled via the web frontend. It does so by 
+  * spooling messages directly to mail server via SMTP protocol.
+  * Mailing types, for which this is applicable, have trailer
+  * appended with individual URL for unsubscription from future
+  * mailings.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require ('squal_pre.php');
+
+// SMTP server to connect to
+$MAILSERVER = "sf-list1";
+//$MAILSERVER = "localhost";
+// Whether to feed batch on its entirety and ignore responces or
+// *talk* with server. I decided against using pipelining.
+$PIPELINE = 0;
+// Number of users to mail during single run
+$CHUNK = 2000;
+// Size of SMTP batch (so many messages are sent in one connection)
+$BATCH = 20;
+// Pause between batches, sec
+$SLEEP = 10;
+// Dump batches to file instead sending them over socket
+$TEST = 0;
+
+// This tables maps mailing types to tables which required to perform it
+$table_mapping = array(
+  'ALL'	    => "users",
+  'SITE'    => "users",
+  'COMMNTY' => "users",
+  'DVLPR'   => "users,user_group",
+  'ADMIN'   => "users,user_group",
+  'SFDVLPR' => "users,user_group",
+);
+
+// This tables maps mailing types to WHERE subclauses which select 
+// appropriate users
+$cond_mapping = array(
+  'ALL'	    => "",
+  'SITE'    => "AND mail_siteupdates=1",
+  'COMMNTY' => "AND mail_va=1",
+  'DVLPR'   => "AND users.user_id=user_group.user_id",
+  'ADMIN'   => "AND users.user_id=user_group.user_id AND user_group.admin_flags='A'",
+  'SFDVLPR' => "AND users.user_id=user_group.user_id AND user_group.group_id=1"
+);
+
+/*if (!strstr($REMOTE_ADDR,$sys_internal_network)) {
+        exit_permission_denied();
+}*/
+
+$mail_res = db_query("
+	SELECT *
+	FROM massmail_queue
+	WHERE finished_date=0
+	ORDER BY queued_date
+", 1);
+
+/* If there was error, notify admins, but don't be pesky */
+if (!$mail_res) {
+	print "cannot execute quesry to select pending mailings\n";
+	$hrs = time()/(60*60);
+	// Send reminder every second day at 11am
+	if (($hrs%24)==11 && (($hrs/24)%2)==1) {
+	        global $sys_default_domain;
+		mail(
+			"admin@$sys_default_domain",
+			"ATT: Problems with massmail cron script",
+			"This is automatically generated message from\n"
+			."the mass mailing cron script of SourceForge\n"
+			."installation. There was error querying massmail_queue\n"
+			."database table. Please take appropriate actions.\n",
+			"From: noreply@$sys_default_domain"
+		);
+	}
+
+	exit(1);
+}
+
+// print "Got ".db_numrows($mail_res)." rows\n";
+
+if (db_numrows($mail_res)<1) {
+	// Nothing to send
+	exit();
+}
+
+$type = db_result($mail_res, 0, 'type');
+if (!$table_mapping[$type]) {
+    print "Unknown mailing type\n";
+    exit(1);
+}
+
+$subj = db_result($mail_res, 0, 'subject');
+$mail_id = db_result($mail_res, 0, 'id');
+
+//print "Got mail to send: ".$subj."\n";
+
+$sql = "
+	SELECT users.user_id,user_name,realname,email,confirm_hash
+	FROM ".$table_mapping[$type]."
+	WHERE users.user_id>".db_result($mail_res, 0, 'last_userid')."
+	AND status='A'
+	".$cond_mapping[$type]."
+	ORDER BY users.user_id
+";
+
+//echo $sql;
+
+// Get next chunk of users to mail
+$users_res = db_query($sql, $CHUNK);
+
+print "Mailing ".db_numrows($users_res)." users.\n";
+
+// If no more users left, we've finished with this mailing
+if ($users_res && db_numrows($users_res)==0) {
+	db_query("
+		UPDATE massmail_queue
+		SET failed_date=0,finished_date='".time()."'
+		WHERE id=$mail_id
+	");
+	exit();
+}
+
+$batch_no = 0;
+$count = 0;
+$last_userid = 0;
+
+// These mailing types should include unsubscription info
+if ($type=='SITE' || $type=='COMMNTY') {
+	$tail = "\r\n==================================================================\r\n"
+	       ."You receive this message because you subscribed to SourceForge\r\n"
+	       ."site mailing(s). You may opt out from some of them selectively\r\n"
+	       ."by logging in to SourceForge and visiting your Account Maintenance\r\n"
+	       ."page (http://$sys_default_domain/account/), or disable them altogether\r\n"
+	       ."by visiting following link:\r\n"
+	       ."<http://$sys_default_domain/account/unsubscribe.php?ch=_%s>\r\n";
+}
+$body = db_result($mail_res, 0, 'message');
+//$lines = explode("\n", $body);
+//$crlf_body = implode("\r\n", $lines);
+
+// Get SMTP response
+function get_resp() {
+        global $out;
+	global $response;
+	
+	$response = fgets($out, 500);
+//	print ">$response";
+	return substr($response, 0, 3);
+}
+
+// Expect given response, fail with $diag otherwise
+function expect($diag, $resp) {
+	global $PIPELINE;
+	global $response;
+	
+	if (!$PIPELINE) {
+		if (get_resp()!=$resp) {
+			print "Error: $diag: $response";
+			exit(1);
+		}
+	}
+}
+
+// Start new batch
+function start_batch() {
+        global $out;
+        global $batch_no;
+	global $sys_default_domain;
+	global $MAILSERVER;
+	global $TEST;
+
+	if ($TEST) {
+		$out = fopen("!batch.$batch_no","wb");
+	} else {
+		$out = fsockopen($MAILSERVER, 25, $errno, $errstr);
+	}
+	
+	if (!$out) {
+		print "Error connecting to SMTP: $errstr\n";
+		exit(1);
+	}
+	if (!$TEST) {
+		$resp = fgets($out,200);
+		if (substr($resp,0,3)!="220") {
+			print "Server is not ready to receive messages\n";
+			exit(1);
+		}
+	}
+	fputs($out,"HELO $sys_default_domain\r\n");
+	expect("HELO", "250");
+}
+
+// Finish new batch
+function flush_batch() {
+        global $out;
+        global $count;
+        global $last_userid;
+	global $mail_id;
+	global $TEST;
+
+        if ($count) {
+		fputs($out,"QUIT\r\n");
+		if (!$TEST) {
+//			fpassthru($out);
+			while (!feof($out)) fgets($out, 200);
+			fclose($out);
+		} else {
+			fclose($out);
+		}
+		$count = 0;
+
+		$sql="
+			UPDATE massmail_queue
+			SET failed_date=0,
+			    last_userid=$last_userid
+			WHERE id=$mail_id
+		";
+//		print $sql;
+		db_query($sql);
+
+		sleep($SLEEP);
+	}
+}
+
+
+// Actual mailing loop
+while ($row = db_fetch_array($users_res)) {
+
+        if (!$count) {
+                $batch_no++;
+		start_batch();
+        }
+
+//        print "Sending for: ".$row['user_id']."\n";
+
+//	$row['email'] = 'test at email';
+
+        fputs($out,"MAIL FROM: noreply@$sys_default_domain\r\n");
+	expect("MAIL", "250");
+	fputs($out,"RCPT TO: ".$row['email']."\r\n");
+	expect("RCPT", "250");
+	fputs($out,"DATA\r\n");
+	expect("DATA", "354");
+	fputs(
+		$out,
+		"From: Mailer <noreply@$sys_default_domain>\r\n"
+		."To: \"".strtr($row['realname'],'"',"'")."\" <".$row['email'].">\r\n"
+		."Subject: ".$subj."\r\n"
+		."\r\n"
+		.$body
+		."\r\n"
+		.sprintf($tail,$row['confirm_hash'] )
+		."\r\n.\r\n"
+	);
+	expect("DATA end", "250");
+
+        $last_userid = $row['user_id'];
+
+	if (++$count == $BATCH) {
+	        flush_batch();
+	}
+}
+
+flush_batch();
+
+// print "end\n";
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/massmail.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/project_weekly_metric-backfill.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/project_weekly_metric-backfill.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/project_weekly_metric-backfill.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,233 @@
+#!/usr/local/bin/php -q
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require ('squal_pre.php');
+
+for ($i=0; $i<510; $i++) {
+
+$time = time()-(86400 * $i);
+
+$last_week= ( $time - (86400 * 7) );  
+$this_week = ( $time );
+
+$last_year=date('Y',$last_week);
+$last_month=date('m',$last_week);
+$last_day=date('d',$last_week);
+
+$this_year=date('Y',$this_week);
+$this_month=date('m',$this_week);
+$this_day=date('d',$this_week);
+
+print "\nlast_week: $last_week $last_year $last_month $last_day ";
+
+#create a table to put the aggregates in
+$sql="CREATE TABLE project_counts_weekly_tmp (
+group_id int,
+type text,
+count float(8))";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+
+#forum messages
+$sql="INSERT INTO project_counts_weekly_tmp 
+SELECT forum_group_list.group_id,'forum',log(3 * count(forum.msg_id)::float) AS count 
+FROM forum,forum_group_list 
+WHERE forum.group_forum_id=forum_group_list.group_forum_id 
+AND date > '$last_week' 
+AND date < '$this_week'
+GROUP BY group_id";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+#project manager tasks
+$sql="INSERT INTO project_counts_weekly_tmp 
+SELECT project_group_list.group_id,'tasks',log(4 * count(project_task.project_task_id)::float) AS count 
+FROM project_task,project_group_list 
+WHERE project_task.group_project_id=project_group_list.group_project_id 
+AND end_date > '$last_week'
+AND end_date < '$this_week' 
+GROUP BY group_id";
+
+#print "\n\n".$sql;
+
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+#bugs
+$sql="INSERT INTO project_counts_weekly_tmp 
+SELECT agl.group_id,'bugs',log(3 * count(*)::float) AS count 
+FROM artifact_group_list agl,artifact a
+WHERE a.open_date > '$last_week'
+AND a.open_date < '$this_week'
+AND a.group_artifact_id=agl.group_artifact_id 
+AND agl.datatype='1'
+GROUP BY agl.group_id";
+
+#print "\n\n".$sql;
+
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+#patches
+$sql="INSERT INTO project_counts_weekly_tmp 
+SELECT agl.group_id,'patches',log(10 * count(*)::float) AS count 
+FROM artifact_group_list agl,artifact a
+WHERE a.open_date > '$last_week'
+AND a.open_date < '$this_week'
+AND a.group_artifact_id=agl.group_artifact_id 
+AND agl.datatype='3'
+GROUP BY agl.group_id";
+
+#print "\n\n".$sql;
+
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+#support
+$sql="INSERT INTO project_counts_weekly_tmp 
+SELECT agl.group_id,'support',log(5 * count(*)::float) AS count 
+FROM artifact_group_list agl,artifact a
+WHERE a.open_date > '$last_week'
+AND a.open_date < '$this_week'
+AND a.group_artifact_id=agl.group_artifact_id 
+AND agl.datatype='2'
+GROUP BY agl.group_id";
+
+#print "\n\n".$sql;
+
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+#file releases
+$sql="INSERT INTO project_counts_weekly_tmp 
+select frs_package.group_id,'filereleases',log(5 * count(*)::float)
+FROM frs_release,frs_package
+WHERE 
+	frs_package.package_id = frs_release.package_id 
+	AND frs_release.release_date > '$last_week'
+	AND frs_release.release_date < '$this_week'
+GROUP BY frs_package.group_id";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+#create a new table to insert the final records into
+$sql="CREATE TABLE project_metric_weekly_tmp1 (
+ranking serial primary key,
+group_id int not null,
+value float (10))";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+
+#insert the rows into the table in order, adding a sequential rank #
+$sql="INSERT INTO project_metric_weekly_tmp1 (group_id,value) 
+SELECT project_counts_weekly_tmp.group_id,sum(project_counts_weekly_tmp.count) AS value 
+FROM project_counts_weekly_tmp
+WHERE
+project_counts_weekly_tmp.count > 0
+GROUP BY group_id ORDER BY value DESC";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+#numrows in the set
+$sql="SELECT count(*) FROM project_metric_weekly_tmp1";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+$counts = db_result($rel,0,0);
+print "\n\nCounts: ".$counts;
+
+db_begin();
+
+#drop the old metrics table
+$sql="DELETE FROM project_weekly_metric";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+
+$sql="INSERT INTO project_weekly_metric (ranking,percentile,group_id)
+SELECT ranking,to_char((100-(100*((ranking::float-1)/$counts))), '999D9999'),group_id
+FROM project_metric_weekly_tmp1
+ORDER BY ranking ASC";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+//
+//	Now archive the metric
+//
+db_query("DELETE FROM stats_project_metric WHERE month='$this_year$this_month' AND day='$this_day'");
+
+$sql="INSERT INTO stats_project_metric (month,day,group_id,ranking,percentile) 
+SELECT '$this_year$this_month'::int, '$this_day'::int,group_id,ranking,percentile
+FROM project_weekly_metric";
+$rel = db_query($sql);
+if (!$rel) {
+	echo "<P>$sql<P>".db_error();
+	echo db_error();
+}
+
+db_commit();
+echo db_error();
+
+
+$rel=db_query("DROP TABLE project_counts_weekly_tmp;");
+$rel=db_query("DROP TABLE project_metric_weekly_tmp1;");
+$rel=db_query("DROP SEQUENCE project_metric_week_ranking_seq;");
+
+}
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/project_weekly_metric-backfill.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects-backfill.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects-backfill.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects-backfill.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,41 @@
+#!/usr/local/bin/php
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require_once('squal_pre.php');
+include_once('cronjobs/stats_projects.inc');
+
+$i=0;
+
+while($i < 515) {
+
+	$i++;
+
+	$how_far_back=(86400 * $i);
+
+	$time=time()-$how_far_back;
+
+	$year=date('Y',$time);
+	$month=date('m',$time);
+	$day=date('d',$time);
+
+	$datetime="$year$month$day";
+
+	if ($datetime < 19991117) {
+		$i=1000;
+		echo 'done';
+		break;
+	}
+
+	project_stats_day($year,$month,$day);
+}
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects-backfill.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects.inc
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects.inc	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects.inc	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,271 @@
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+//
+//
+//	POPULATES stats_project table - included in site_stats.php
+//
+//
+
+function project_stats_day($year,$month,$day) {
+
+	db_begin();
+
+	$day_begin=mktime(0,0,0,$month,$day,$year);
+	$day_end=($day_begin + 86400);
+
+	echo "Stats_project: $datetime::$day_begin::$day_end::".date('Ymd',$day_begin)."::".date('Ymd',$day_end)."--> $i\n";
+
+	db_query("DELETE FROM stats_project WHERE month='$year$month' AND day='$day'");
+
+$sql="INSERT INTO stats_project
+
+SELECT 
+'$year$month'::int AS month,
+'$day'::int AS day,
+* FROM (
+
+SELECT 
+	groups.group_id,
+	r.count AS release_count,
+	fmcount.count AS msg_posted,
+	fucount.count AS msg_uniq_auth,
+	obug.count AS bugs_opened,
+	cbug.count AS bugs_closed,
+	osupport.count AS support_opened,
+	csupport.count AS support_closed,
+	opatches.count AS patches_opened,
+	cpatches.count AS patches_closed,
+	oartifact.count AS artifacts_opened,
+	cartifact.count AS artifacts_closed,
+	otask.count AS tasks_opened,
+	ctask.count AS tasks_closed,
+	helpr.count AS help_requests
+
+FROM groups
+
+--
+--	Create tmp table of groups that made any releases
+--
+LEFT JOIN (
+	SELECT group_id,COUNT(release_id) AS count
+    FROM frs_release,frs_package
+    WHERE 
+		frs_release.release_date > '$day_begin' 
+		AND frs_release.release_date < '$day_end' 
+        AND frs_release.package_id = frs_package.package_id
+	GROUP BY group_id 
+	) r USING (group_id)
+
+--
+--	Create tmp table of groups that had any forum posts
+--
+LEFT JOIN ( 
+	SELECT forum_group_list.group_id,COUNT(forum.msg_id) AS count
+    FROM forum_group_list, forum
+    WHERE 
+		forum_group_list.group_forum_id = forum.group_forum_id 
+        AND forum.date > '$day_begin' 
+		AND forum.date < '$day_end' 
+	GROUP BY forum_group_list.group_id
+	) fmcount USING (group_id)
+
+--
+--	Create tmp table of groups and unique posters to forums
+--
+LEFT JOIN ( 
+	SELECT forum_group_list.group_id,COUNT( DISTINCT(forum.posted_by) ) AS count
+    FROM forum_group_list, forum
+    WHERE 
+		forum_group_list.group_forum_id = forum.group_forum_id 
+        AND forum.date > '$day_begin' 
+		AND forum.date < '$day_end'
+    GROUP BY group_id
+	) fucount USING (group_id)
+
+--
+--	Create tmp table of groups and opened bugs
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.open_date > '$day_begin'
+		AND a.open_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+		AND agl.datatype='1'
+	GROUP BY agl.group_id
+	) obug USING (group_id)
+
+--
+--	Create tmp table of groups and closed bugs
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.close_date > '$day_begin'
+		AND a.close_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+		AND agl.datatype='1'
+	GROUP BY agl.group_id
+	) cbug USING (group_id)
+
+--
+--	Create tmp table of groups and opened support
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.open_date > '$day_begin'
+		AND a.open_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+		AND agl.datatype='2'
+	GROUP BY agl.group_id
+	) osupport USING (group_id)
+
+--
+--	Create tmp table of groups and closed support
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.close_date > '$day_begin'
+		AND a.close_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+		AND agl.datatype='2'
+	GROUP BY agl.group_id
+	) csupport USING (group_id)
+
+--
+--	Create tmp table of groups and opened patches
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.open_date > '$day_begin'
+		AND a.open_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+		AND agl.datatype='3'
+	GROUP BY agl.group_id
+	) opatches USING (group_id)
+
+--
+--	Create tmp table of groups and closed patches
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.close_date > '$day_begin'
+		AND a.close_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+		AND agl.datatype='3'
+	GROUP BY agl.group_id
+	) cpatches USING (group_id)
+
+--
+--	Create tmp table of groups and opened total artifacts
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.open_date > '$day_begin'
+		AND a.open_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+	GROUP BY agl.group_id
+	) oartifact USING (group_id)
+
+--
+--	Create tmp table of groups and closed total artifacts
+--
+LEFT JOIN (
+	SELECT agl.group_id,count(*) AS count
+	FROM artifact_group_list agl,artifact a
+	WHERE
+		a.close_date > '$day_begin'
+		AND a.close_date < '$day_end'
+		AND a.group_artifact_id=agl.group_artifact_id
+	GROUP BY agl.group_id
+	) cartifact USING (group_id)
+
+--
+--	Create tmp table of groups that opened tasks
+--
+LEFT JOIN (
+	SELECT pgl.group_id,count(pt.project_task_id) AS count 
+	FROM project_group_list pgl, project_task pt
+	WHERE 
+		pgl.group_project_id=pt.group_project_id 
+		AND pt.start_date > '$day_begin'
+		AND pt.start_date < '$day_end'
+	GROUP BY pgl.group_id
+	) otask USING (group_id)
+
+--
+--	Create tmp table of groups that closed tasks
+--
+LEFT JOIN (
+	SELECT pgl.group_id,count(pt.project_task_id) AS count 
+	FROM project_group_list pgl, project_task pt
+	WHERE 
+		pgl.group_project_id=pt.group_project_id 
+		AND pt.end_date > '$day_begin'
+		AND pt.end_date < '$day_end'
+	GROUP BY pgl.group_id
+	) ctask USING (group_id)
+
+--
+--	Create tmp table of groups that closed tasks
+--
+LEFT JOIN (
+	SELECT group_id,COUNT(job_id) AS count
+    FROM people_job
+    WHERE 
+		date > '$day_begin' 
+		AND date < '$day_end'
+    GROUP BY group_id
+	) helpr USING (group_id)
+
+) mess
+
+--
+--	We really only want the rows that have any content
+--
+WHERE
+release_count > 0 
+OR msg_posted > 0
+OR msg_uniq_auth > 0
+OR bugs_opened > 0
+OR bugs_closed > 0
+OR support_opened > 0
+OR support_closed > 0
+OR patches_opened > 0
+OR patches_closed > 0
+OR artifacts_opened > 0
+OR artifacts_closed > 0
+OR tasks_opened > 0
+OR tasks_closed > 0
+OR help_requests > 0;";
+
+	db_query($sql);
+	//echo $sql;
+	echo db_error();
+
+	db_commit();
+
+}
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_projects.inc
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_site.inc
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_site.inc	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/cronjobs/stats_site.inc	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,42 @@
+<?php
+/**
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+function site_stats_day($year,$month,$day) {
+
+	db_begin();
+
+	$day_begin=mktime(0,0,0,$month,$day,$year);
+	$day_end=($day_begin + 86400);
+
+	echo "Stats_site: $datetime::$day_begin::$day_end::".date('Ymd',$day_begin)."::".date('Ymd',$day_end)."--> $i\n";
+
+	//
+	//  build row for stats_site
+	//
+	$rel=db_query("DELETE FROM stats_site WHERE month='$year$month' AND day='$day'");
+
+	$sql="INSERT INTO stats_site (month,day,uniq_users,sessions,total_users,new_users,new_projects) 
+	VALUES ('$year$month',
+	'$day',
+	(SELECT COUNT(DISTINCT(user_id)) FROM session WHERE (time < '$day_end' AND time > '$day_begin')),
+	(SELECT COUNT(session_hash) FROM session WHERE (time < '$day_end' AND time > $day_begin)),
+	(SELECT COUNT(user_id) FROM users WHERE ( add_date < '$day_end' AND status='A' )),
+	(SELECT COUNT(user_id) FROM users WHERE ( add_date < '$day_end' AND add_date > '$day_begin' )),
+	(SELECT COUNT(group_id) FROM groups WHERE ( register_time < '$day_end' AND register_time > '$day_begin' )))";
+
+	$rel=db_query($sql);
+	echo db_error();
+
+	db_commit();
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/README
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/README	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/README	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,26 @@
+
+Apologies in advance for the difficulty in converting from 2.5 to 2.6.
+
+As always, SourceForge is undergoing radical changes, rewrites, feature 
+and scalability enhancements. This means a large number of SQL and 
+database changes need to occur in sequence over time.
+
+The 2.5 codebase was a radical change because it moved from MySQL to PostgreSQL.
+2.6 is radical because it takes full advantage of Postgres' advanced features 
+and MySQL is no longer usable as it was for 2.5
+
+The process of upgrading from 2.5 to 2.6 involves running these clearly dated 
+sql diff files IN ORDER.
+
+If you encounter difficulties, please report them in the SF Offsite Discussion board:
+https://sourceforge.net/forum/forum.php?forum_id=21304
+
+Please do not submit bugs to SourceForge.net.
+
+************************************************************************************
+
+IMPORTANT!!! Read and understand EACH AND EVERY sql command before running it.
+These commands were issued on SourceForge.net and may cause problems on your system.
+
+************************************************************************************
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-conversion.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-conversion.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-conversion.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,375 @@
+--
+--
+--	database conversion
+--
+--	The general idea is to move data from the 2
+--
+
+--
+--
+--	Bug TRACKER
+--
+--
+BEGIN;
+
+--
+--	set up bug ArtifactTypes for each group
+--
+
+UPDATE groups SET bug_due_period='2592000' WHERE bug_due_period is null;
+INSERT INTO artifact_group_list 
+(group_artifact_id,group_id,name,description,is_public,
+allow_anon,email_all_updates,email_address,due_period,use_resolution,datatype)
+SELECT group_id+100000,group_id,'Bugs','Bug Tracking System',use_bugs,
+1,send_all_bugs,new_bug_address,bug_due_period,1,1 
+FROM groups 
+WHERE status != 'I' AND status != 'P'
+ORDER BY group_id ASC;
+
+--
+--	permissions
+--
+INSERT INTO artifact_perm
+(group_artifact_id,user_id,perm_level)
+SELECT group_id+100000,user_id,bug_flags 
+FROM user_group;
+
+--
+--	bug groups conversion
+--
+INSERT INTO artifact_group (id,group_artifact_id,group_name)
+SELECT bug_group_id+100000,group_id+100000,group_name FROM bug_group;
+
+--
+--	bug category conversion
+--
+INSERT INTO artifact_category (id,group_artifact_id,category_name,auto_assign_to)
+SELECT bug_category_id+100000,group_id+100000,category_name,100 FROM bug_category;
+
+--
+--	bug
+--
+--	bug tracker had status_id of 100 (None) and status_id=3 (closed)
+--
+UPDATE bug SET status_id=1 WHERE status_id=100;
+INSERT INTO bug_status (status_id,status_name) VALUES (2,'Open');
+UPDATE bug SET status_id=2 WHERE status_id=3;
+DELETE FROM bug_status WHERE status_id=3;
+
+UPDATE bug SET close_date=0 WHERE close_date is NULL;
+
+INSERT INTO artifact 
+(artifact_id,group_artifact_id,status_id,category_id,artifact_group_id,priority,
+submitted_by,assigned_to,open_date,close_date,summary,details,resolution_id)
+SELECT 
+bug_id+100000,group_id+100000,status_id,category_id+100000,bug_group_id+100000,priority,
+submitted_by,assigned_to,date,close_date,summary,details,resolution_id 
+FROM bug 
+ORDER BY group_id ASC;
+
+--
+--	bug_history
+--
+--UPDATE bug_history SET old_value=1 WHERE old_value='100' AND field_name='status_id';
+UPDATE bug_history SET old_value=2 WHERE old_value='3' AND field_name='status_id';
+
+--BEGIN;
+--SELECT * from bug_history 
+--WHERE NOT EXISTS (select bug_id FROM bug
+--where bug.bug_id=bug_history.bug_id);
+--COMMIT;
+
+--DELETE FROM bug_history WHERE bug_id=0;
+
+--DELETE FROM bug_history 
+--WHERE bug_id+100000 NOT IN (SELECT artifact_id FROM artifact);
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+bug_id+100000,field_name,old_value,mod_by,date
+FROM bug_history
+WHERE field_name IN ('summary','resolution_id','priority','group_id','close_date','assigned_to','status_id');
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+bug_id+100000,'artifact_group_id',(old_value::int)+100000,mod_by,date
+FROM bug_history
+WHERE field_name='bug_group_id';
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+bug_id+100000,field_name,(old_value::int)+100000,mod_by,date
+FROM bug_history
+WHERE field_name='category_id';
+
+--
+--	bug messages
+--
+INSERT INTO artifact_message
+(artifact_id,submitted_by,from_email,adddate,body)
+SELECT
+bh.bug_id+100000,bh.mod_by,users.email,bh.date,bh.old_value
+FROM bug_history bh, users
+WHERE bh.mod_by=users.user_id
+AND bh.field_name='details';
+
+--
+--	bug canned responses
+--
+delete from bug_canned_responses where title is null;
+
+INSERT INTO artifact_canned_responses
+(group_artifact_id,title,body)
+SELECT
+group_id+100000,title,body
+FROM bug_canned_responses
+WHERE group_id > 0;
+
+COMMIT;
+
+--
+--
+--			SUPPORT
+--
+--
+
+--
+--      set up support ArtifactTypes for each group
+--
+BEGIN;
+
+UPDATE groups SET support_due_period='2592000' WHERE support_due_period is null;
+
+INSERT INTO artifact_group_list 
+(group_artifact_id,group_id,name,description,is_public,
+allow_anon,email_all_updates,email_address,due_period,use_resolution,datatype)
+SELECT group_id+200000,group_id,'Support Requests','Tech Support Tracking System',use_support,
+1,send_all_support,new_support_address,support_due_period,0,2 
+FROM groups  
+WHERE status != 'I' AND status != 'P'
+ORDER BY group_id ASC;
+
+--
+--      permissions
+--
+INSERT INTO artifact_perm
+(group_artifact_id,user_id,perm_level)
+SELECT group_id+200000,user_id,support_flags
+FROM user_group;
+
+--
+--      support category conversion
+--
+INSERT INTO artifact_category (id,group_artifact_id,category_name,auto_assign_to)
+SELECT support_category_id+200000,group_id+200000,category_name,100 FROM support_category;
+
+--
+--	support
+--
+DELETE FROM support WHERE NOT EXISTS 
+(SELECT group_id FROM groups WHERE support.group_id=groups.group_id);
+
+INSERT INTO artifact
+(artifact_id,group_artifact_id,status_id,category_id,artifact_group_id,priority,
+submitted_by,assigned_to,open_date,close_date,summary,details,resolution_id)
+SELECT 
+support_id+200000,group_id+200000,support_status_id,support_category_id+200000,100,priority,
+submitted_by,assigned_to,open_date,close_date,summary,'',100
+FROM support
+ORDER BY group_id ASC;
+
+--
+--	support_history
+--
+DELETE FROM support_history WHERE support_id=0;
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+support_id+200000,field_name,old_value,mod_by,date
+FROM support_history
+WHERE
+field_name IN ('summary','priority','close_date','assigned_to');
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+support_id+200000,'category_id',(old_value::int)+200000,mod_by,date
+FROM support_history
+WHERE
+field_name='support_category_id';
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+support_id+200000,'status_id',old_value,mod_by,date
+FROM support_history
+WHERE
+field_name='support_status_id';
+
+--
+--      messages
+--
+DELETE FROM support_messages WHERE NOT EXISTS
+(SELECT support_id FROM support WHERE support.support_id=support_messages.support_id);
+
+INSERT INTO artifact_message
+(artifact_id,submitted_by,from_email,adddate,body)
+SELECT
+support_id+200000,100,from_email,date,body
+FROM support_messages;
+
+--
+--	canned messages
+--
+INSERT INTO artifact_canned_responses
+(group_artifact_id,title,body)
+SELECT
+group_id+200000,title,body
+FROM support_canned_responses 
+WHERE group_id > 0;
+
+COMMIT;
+
+
+--
+--
+--      Patch Manager
+--
+--
+--BEGIN; 
+
+--
+--      set up patch ArtifactTypes for each group
+--
+UPDATE groups SET patch_due_period='2592000' WHERE patch_due_period is null;
+
+INSERT INTO artifact_group_list  
+(group_artifact_id,group_id,name,description,is_public,
+allow_anon,email_all_updates,email_address,due_period,use_resolution,datatype)
+SELECT group_id+300000,group_id,'Patches','Patch Tracking System',use_patch,
+1,send_all_patches,new_patch_address,patch_due_period,1,3 
+FROM groups  
+WHERE status != 'I' AND status != 'P'
+ORDER BY group_id ASC;
+
+--
+--      permissions
+--
+INSERT INTO artifact_perm
+(group_artifact_id,user_id,perm_level)
+SELECT group_id+300000,user_id,patch_flags
+FROM user_group;
+
+--
+--      patch category conversion
+--
+INSERT INTO artifact_category (id,group_artifact_id,category_name,auto_assign_to)
+SELECT patch_category_id+300000,group_id+300000,category_name,100 FROM patch_category;
+
+--
+--	patch table
+--
+--	moving the odd patch statuses to resolutions
+--
+ALTER TABLE patch ADD COLUMN resolution_id INT NOT NULL DEFAULT 100;
+UPDATE patch SET resolution_id=patch_status_id;
+vacuum analyze patch;
+update patch set patch_status_id=2 where patch_status_id > 3;
+update patch set resolution_id=100 WHERE resolution_id < 4;
+INSERT INTO artifact_resolution VALUES (102,'Accepted');
+INSERT INTO artifact_resolution VALUES (103,'Out of Date');
+INSERT INTO artifact_resolution VALUES (104,'Postponed');
+INSERT INTO artifact_resolution VALUES (105,'Rejected');
+update patch set resolution_id=104 WHERE resolution_id=4;
+update patch set resolution_id=105 WHERE resolution_id=101;
+
+delete from patch where patch_id=100000;
+UPDATE patch SET details=' ' WHERE details is null;
+
+INSERT INTO artifact
+(artifact_id,group_artifact_id,status_id,category_id,artifact_group_id,priority,
+submitted_by,assigned_to,open_date,close_date,summary,details,resolution_id)
+SELECT
+patch_id+300000,group_id+300000,patch_status_id,patch_category_id+300000,100,5,
+submitted_by,assigned_to,open_date,close_date,summary,details,resolution_id
+FROM patch
+ORDER BY group_id ASC;
+
+--
+--	patch history
+--
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+patch_id+300000,field_name,old_value,mod_by,date
+FROM patch_history
+WHERE field_name IN ('summary','close_date','assigned_to','Patch Code');
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+patch_id+300000,'status_id',old_value,mod_by,date
+FROM patch_history
+WHERE field_name='patch_status_id';
+
+INSERT INTO artifact_history
+(artifact_id,field_name,old_value,mod_by,entrydate)
+SELECT
+patch_id+300000,'category_id',(old_value::int)+300000,mod_by,date
+FROM patch_history
+WHERE field_name='patch_category_id';
+
+--
+--      patch messages
+--
+INSERT INTO artifact_message
+(artifact_id,submitted_by,from_email,adddate,body)
+SELECT
+ph.patch_id+300000,ph.mod_by,users.email,ph.date,ph.old_value
+FROM patch_history ph, users
+WHERE ph.mod_by=users.user_id
+AND ph.field_name='details';
+
+--
+--	patch code
+--
+INSERT INTO artifact_file
+(artifact_id,description,bin_data,filename,filesize,filetype,adddate,submitted_by)
+SELECT patch_id+300000,'None',code,'None',length(code),'text/plain',open_date,submitted_by
+FROM patch 
+WHERE code IS NOT NULL;
+
+--COMMIT;
+
+INSERT INTO artifact_counts_agg
+SELECT group_artifact_id,count(*)
+FROM artifact
+WHERE status_id <> 3
+GROUP BY group_artifact_id;
+
+--
+--
+--	Feature Requests
+--
+--
+INSERT INTO artifact_group_list
+(group_artifact_id,group_id,name,description,is_public,
+allow_anon,email_all_updates,email_address,due_period,use_resolution,datatype)
+SELECT group_id+350000,group_id,'Feature Requests','Feature Request Tracking System',1,
+1,0,'',45*24*60*60,0,4 
+FROM groups  
+WHERE status != 'I' AND status != 'P'
+ORDER BY group_id ASC;
+
+vacuum analyze artifact_perm;
+vacuum analyze artifact_group_list;
+vacuum analyze artifact;
+vacuum analyze artifact_history;
+vacuum analyze artifact_category;
+vacuum analyze artifact_group;
+vacuum analyze artifact_file;
+vacuum analyze artifact_message;

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-convert-files.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-convert-files.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-convert-files.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,29 @@
+#!/usr/local/bin/php
+<?php
+
+require ('squal_pre.php');
+
+db_begin();
+
+$rel = db_query("SELECT id,bin_data FROM artifact_file ORDER BY id ASC;");
+echo db_error();
+
+$rows=db_numrows($rel);
+
+for ($i=0; $i<$rows; $i++) {
+
+	$res=db_query("UPDATE artifact_file 
+		SET bin_data='". base64_encode( util_unconvert_htmlspecialchars( db_result($rel,$i,'bin_data') ) ) ."' 
+		WHERE id='". db_result($rel,$i,'id') ."'");
+
+	echo db_error();
+	echo "<BR>Num: $i | id: ".db_result($rel,$i,'id');
+
+}
+
+db_commit();
+echo "Done: ".db_error();
+
+db_query("vacuum analyze;");
+
+?>


Property changes on: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-convert-files.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-fkeys.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-fkeys.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-fkeys.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,66 @@
+ALTER TABLE artifact_group_list ADD CONSTRAINT artifactgroup_groupid_fk 
+	FOREIGN KEY (group_id) REFERENCES groups(group_id) MATCH FULL;
+
+ALTER TABLE artifact_perm ADD CONSTRAINT artifactperm_userid_fk 
+        FOREIGN KEY (user_id) REFERENCES users(user_id) MATCH FULL;
+DELETE from artifact_perm 
+	where not exists (select group_artifact_id 
+	from artifact_group_list 
+	where artifact_perm.group_artifact_id=artifact_group_list.group_artifact_id);
+ALTER TABLE artifact_perm ADD CONSTRAINT artifactperm_groupartifactid_fk 
+        FOREIGN KEY (group_artifact_id) REFERENCES artifact_group_list(group_artifact_id) MATCH FULL;
+
+ALTER TABLE artifact_category ADD CONSTRAINT artifactcategory_groupartifactid_fk
+        FOREIGN KEY (group_artifact_id) REFERENCES artifact_group_list(group_artifact_id) MATCH FULL;
+ALTER TABLE artifact_category ADD CONSTRAINT artifactcategory_autoassignto_fk
+        FOREIGN KEY (auto_assign_to) REFERENCES users(user_id) MATCH FULL;
+
+ALTER TABLE artifact_group ADD CONSTRAINT artifactgroup_groupartifactid_fk
+        FOREIGN KEY (group_artifact_id) REFERENCES artifact_group_list(group_artifact_id) MATCH FULL;
+
+ALTER TABLE artifact ADD CONSTRAINT artifact_groupartifactid_fk
+        FOREIGN KEY (group_artifact_id) REFERENCES artifact_group_list(group_artifact_id) MATCH FULL;
+ALTER TABLE artifact ADD CONSTRAINT artifact_statusid_fk
+        FOREIGN KEY (status_id) REFERENCES artifact_status(id) MATCH FULL;
+ALTER TABLE artifact ADD CONSTRAINT artifact_categoryid_fk
+        FOREIGN KEY (category_id) REFERENCES artifact_category(id) MATCH FULL;
+ALTER TABLE artifact ADD CONSTRAINT artifact_artifactgroupid_fk
+        FOREIGN KEY (artifact_group_id) REFERENCES artifact_group(id) MATCH FULL;
+ALTER TABLE artifact ADD CONSTRAINT artifact_submittedby_fk
+        FOREIGN KEY (submitted_by) REFERENCES users(user_id) MATCH FULL;
+ALTER TABLE artifact ADD CONSTRAINT artifact_assignedto_fk
+        FOREIGN KEY (assigned_to) REFERENCES users(user_id) MATCH FULL;
+ALTER TABLE artifact ADD CONSTRAINT artifact_resolutionid_fk
+        FOREIGN KEY (resolution_id) REFERENCES artifact_resolution(id) MATCH FULL;
+
+DELETE FROM artifact_history WHERE NOT EXISTS
+	(SELECT artifact_id FROM artifact WHERE artifact.artifact_id=artifact_history.artifact_id);
+ALTER TABLE artifact_history ADD CONSTRAINT artifacthistory_artifactid_fk
+        FOREIGN KEY (artifact_id) REFERENCES artifact(artifact_id) MATCH FULL;
+ALTER TABLE artifact_history ADD CONSTRAINT artifacthistory_modby_fk
+        FOREIGN KEY (mod_by) REFERENCES users(user_id) MATCH FULL;
+
+ALTER TABLE artifact_file ADD CONSTRAINT artifactfile_artifactid_fk
+        FOREIGN KEY (artifact_id) REFERENCES artifact(artifact_id) MATCH FULL;
+ALTER TABLE artifact_file ADD CONSTRAINT artifactfile_submittedby_fk
+        FOREIGN KEY (submitted_by) REFERENCES users(user_id) MATCH FULL;
+
+ALTER TABLE artifact_message ADD CONSTRAINT artifactmessage_artifactid_fk
+        FOREIGN KEY (artifact_id) REFERENCES artifact(artifact_id) MATCH FULL;
+ALTER TABLE artifact_message ADD CONSTRAINT artifactmessage_submittedby_fk
+        FOREIGN KEY (submitted_by) REFERENCES users(user_id) MATCH FULL;
+
+ALTER TABLE artifact_monitor ADD CONSTRAINT artifactmonitor_artifactid_fk
+        FOREIGN KEY (artifact_id) REFERENCES artifact(artifact_id) MATCH FULL;
+
+SELECT setval('artifact_grou_group_artifac_seq',(SELECT max(group_artifact_id) FROM artifact_group_list));
+--SELECT setval('artifact_perm_id_seq',(SELECT max(id) FROM artifact_perm));
+SELECT setval('artifact_category_id_seq',(SELECT max(id) FROM artifact_category));
+SELECT setval('artifact_group_id_seq',(SELECT max(id) FROM artifact_group));
+--SELECT setval('artifact_status_id_seq',(SELECT max(id) FROM artifact_status));
+SELECT setval('artifact_artifact_id_seq',(SELECT max(artifact_id) FROM artifact));
+--SELECT setval('artifact_history_id_seq',(SELECT max(id) FROM artifact_history));
+--SELECT setval('artifact_file_id_seq',(SELECT max(id) FROM artifact_file));
+--SELECT setval('artifact_message_id_seq',(SELECT max(id) FROM artifact_message));
+--SELECT setval('artifact_monitor_id_seq',(SELECT max(id) FROM artifact_monitor));
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-man.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-man.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/artifact-man.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,271 @@
+--
+--	need to widen the preference column in user_preferences
+--	postgres isn't as slick as MySQL in this respect
+--
+BEGIN;
+ALTER TABLE user_preferences RENAME COLUMN preference_value TO dead1;
+ALTER TABLE user_preferences ADD COLUMN preference_value TEXT;
+UPDATE user_preferences SET preference_value=dead1;
+UPDATE user_preferences SET dead1='';
+COMMIT;
+--
+--	user_group permissions flag
+--
+ALTER TABLE user_group ADD COLUMN artifact_flags INT NOT NULL DEFAULT 0;
+UPDATE user_group SET artifact_flags=0;
+
+--
+--	each group can have multiple artifact types
+--
+create table artifact_group_list (
+group_artifact_id serial primary key,
+group_id int not null,
+name text,
+description text,
+is_public int not null default 0,
+allow_anon int not null default 0,
+email_all_updates int not null default 0,
+email_address text not null,
+due_period int not null default 2592000,
+use_resolution int not null default 0,
+submit_instructions text,
+browse_instructions text,
+datatype int not null default 0
+);
+
+CREATE INDEX artgrouplist_groupid on artifact_group_list (group_id);
+CREATE INDEX artgrouplist_groupid_public on artifact_group_list (group_id,is_public);
+
+create table artifact_resolution (
+id serial primary key,
+resolution_name text
+);
+
+INSERT INTO artifact_resolution SELECT * FROM bug_resolution;
+
+--
+--	new permissions model required
+--
+create table artifact_perm (
+id serial primary key,
+group_artifact_id int not null,
+user_id int not null,
+perm_level int not null DEFAULT 0
+);
+
+CREATE INDEX artperm_groupartifactid on artifact_perm (group_artifact_id);
+CREATE UNIQUE INDEX artperm_groupartifactid_userid on artifact_perm (group_artifact_id,user_id);
+
+--
+--	create a view to make selecting all perms for a user_id/group_id easier
+--
+
+CREATE VIEW artifactperm_user_vw AS 
+SELECT ap.id, ap.group_artifact_id, ap.user_id, ap.perm_level, users.user_name, users.realname
+	FROM artifact_perm ap, users 
+	WHERE users.user_id=ap.user_id;
+
+CREATE VIEW artifactperm_artgrouplist_vw AS
+SELECT agl.group_artifact_id,agl.name,agl.description,agl.group_id,ap.user_id, ap.perm_level
+FROM artifact_perm ap, artifact_group_list agl
+WHERE ap.group_artifact_id=agl.group_artifact_id;
+
+--
+--	similar to bug_category
+--
+CREATE TABLE artifact_category (
+  id serial primary key,
+  group_artifact_id int NOT NULL,
+  category_name text NOT NULL,
+  auto_assign_to int not null DEFAULT 100
+);
+
+CREATE INDEX artcategory_groupartifactid on artifact_category (group_artifact_id);
+
+--
+--	similar to bug_group
+--
+CREATE TABLE artifact_group (
+  id serial primary key,
+  group_artifact_id int NOT NULL,
+  group_name text NOT NULL
+);
+
+CREATE INDEX artgroup_groupartifactid on artifact_group (group_artifact_id);
+
+--
+--      similar to bug_status
+--
+CREATE TABLE artifact_status (
+  id serial primary key,
+  status_name text NOT NULL
+);
+
+--
+--	similar to bug table
+--
+CREATE TABLE artifact (
+  artifact_id serial primary key,
+  group_artifact_id int NOT NULL,
+  status_id int DEFAULT '1' NOT NULL,
+  category_id int DEFAULT '100' NOT NULL,
+  artifact_group_id int DEFAULT '0' NOT NULL,
+  resolution_id int not null default '100',
+  priority int DEFAULT '5' NOT NULL,
+  submitted_by int DEFAULT '100' NOT NULL,
+  assigned_to int DEFAULT '100' NOT NULL,
+  open_date int DEFAULT '0' NOT NULL,
+  close_date int DEFAULT '0' NOT NULL,
+  summary text NOT NULL,
+  details text NOT NULL
+);
+
+CREATE INDEX art_groupartid ON artifact (group_artifact_id);
+CREATE INDEX art_groupartid_statusid ON artifact (group_artifact_id,status_id);
+CREATE INDEX art_groupartid_assign ON artifact (group_artifact_id,assigned_to);
+CREATE INDEX art_groupartid_submit ON artifact (group_artifact_id,submitted_by);
+create index art_submit_status ON artifact(submitted_by,status_id);
+create index art_assign_status ON artifact(assigned_to,status_id);
+create index art_groupartid_artifactid on artifact (group_artifact_id,artifact_id);
+
+
+
+CREATE VIEW artifact_vw AS
+SELECT 
+artifact.*,
+u.user_name AS assigned_unixname,
+u.realname AS assigned_realname,
+u.email AS assigned_email,
+u2.user_name AS submitted_unixname,
+u2.realname AS submitted_realname,
+u2.email AS submitted_email,
+artifact_status.status_name, 
+artifact_category.category_name, 
+artifact_group.group_name, 
+artifact_resolution.resolution_name 
+FROM 
+users u, users u2, artifact, artifact_status, artifact_category, artifact_group, artifact_resolution
+WHERE 
+artifact.assigned_to=u.user_id
+AND artifact.submitted_by=u2.user_id
+AND artifact.status_id=artifact_status.id 
+AND artifact.category_id=artifact_category.id 
+AND artifact.artifact_group_id=artifact_group.id
+AND artifact.resolution_id=artifact_resolution.id;
+
+
+--
+--	audit trail table
+--
+CREATE TABLE artifact_history (
+  id serial primary key,
+  artifact_id int DEFAULT '0' NOT NULL,
+  field_name text DEFAULT '' NOT NULL,
+  old_value text DEFAULT '' NOT NULL,
+  mod_by int DEFAULT '0' NOT NULL,
+  entrydate int DEFAULT '0' NOT NULL
+);
+
+CREATE INDEX arthistory_artid on artifact_history(artifact_id);
+CREATE INDEX arthistory_artid_entrydate on artifact_history(artifact_id,entrydate);
+
+--
+--	create a view from the audit trail which joins the user table and history table
+--
+CREATE VIEW artifact_history_user_vw AS
+SELECT ah.id, ah.artifact_id, ah.field_name, ah.old_value, ah.entrydate, users.user_name 
+FROM artifact_history ah, users 
+WHERE ah.mod_by=users.user_id; 
+
+--
+--	files attached to a given artifact
+--
+CREATE TABLE artifact_file (
+  id serial primary key,
+  artifact_id int NOT NULL,
+  description text NOT NULL,
+  bin_data text NOT NULL,
+  filename text NOT NULL,
+  filesize int NOT NULL,
+  filetype text NOT NULL,
+  adddate int not null DEFAULT '0',
+  submitted_by int not null
+);
+
+CREATE INDEX artfile_artid on artifact_file(artifact_id);
+CREATE INDEX artfile_artid_adddate on artifact_file(artifact_id,adddate);
+
+--
+--      create a view from the files which joins the user table and files table
+--
+CREATE VIEW artifact_file_user_vw AS
+SELECT af.id, af.artifact_id, af.description, af.bin_data, af.filename, af.filesize, af.filetype, 
+	af.adddate, af.submitted_by, users.user_name, users.realname
+FROM artifact_file af,users 
+WHERE af.submitted_by=users.user_id;
+
+--
+--	messages and comments attached to an artifact
+--
+CREATE TABLE artifact_message (
+  id serial primary key,
+  artifact_id int NOT NULL,
+  submitted_by int not null,
+  from_email text NOT NULL,
+  adddate int DEFAULT '0' NOT NULL,
+  body text NOT NULL
+);
+
+CREATE INDEX artmessage_artid on artifact_message(artifact_id);
+CREATE INDEX artmessage_artid_adddate on artifact_message(artifact_id,adddate);
+
+--
+--      create a view from the messages which joins the user table and messages table
+--
+CREATE VIEW artifact_message_user_vw AS
+SELECT am.id, am.artifact_id, am.from_email, am.body, am.adddate, 
+users.user_id, users.email, users.user_name, users.realname
+FROM artifact_message am,users 
+WHERE am.submitted_by=users.user_id;
+
+--
+--	table containing list of people monitoring each artifact
+--
+CREATE TABLE artifact_monitor (
+id serial primary key,
+artifact_id int NOT NULL,
+user_id int not null,
+email text
+);
+
+CREATE INDEX artmonitor_artifactid on artifact_monitor(artifact_id);
+
+ALTER TABLE artifact_monitor ADD CONSTRAINT artifactmonitor_artifactid_fk
+        FOREIGN KEY (artifact_id) REFERENCES artifact(artifact_id) MATCH FULL;
+
+INSERT INTO artifact_group_list VALUES (100,1,'Default','Default Data - Dont Edit',3,0,0,'0',0);
+INSERT INTO artifact_category VALUES (100,100,'None',100);
+INSERT INTO artifact_group VALUES (100,100,'None');
+INSERT INTO artifact_status VALUES (1,'Open');
+INSERT INTO artifact_status VALUES (2,'Closed');
+INSERT INTO artifact_status VALUES (3,'Deleted');
+
+CREATE TABLE artifact_canned_responses (
+  id serial primary key,
+  group_artifact_id int NOT NULL,
+  title text NOT NULL,
+  body text NOT NULL
+);
+
+CREATE INDEX artifactcannedresponses_groupid ON artifact_canned_responses (group_artifact_id);
+
+CREATE TABLE artifact_counts_agg (
+group_artifact_id int not null,
+count int not null
+);
+CREATE INDEX artifactcountsagg_groupartid ON artifact_counts_agg(group_artifact_id);
+
+GRANT SELECT ON 
+artifact,
+artifact_group_list
+TO stats;

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001209.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001209.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001209.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,20 @@
+drop index downloads_idx;
+create index frsdlstatsgroupagg_day_dls on  frs_dlstats_group_agg (day,downloads);
+create index projectweeklymetric_ranking on project_weekly_metric(ranking);
+create index users_status on users(status);
+drop index news_date;
+create index support_groupid_assignedto_status on support(group_id,assigned_to,support_status_id);
+create index support_groupid_assignedto on support(group_id,assigned_to);
+create index support_groupid_status on support(group_id,support_status_id);
+
+create index patch_groupid_assignedto_status on patch(group_id,assigned_to,patch_status_id);
+create index patch_groupid_assignedto on patch(group_id,assigned_to);
+create index patch_groupid_status on patch(group_id,patch_status_id);
+
+create index projecttask_projid_status on project_task(group_project_id,status_id);
+
+create index forummonitoredforums_user on forum_monitored_forums(user_id);
+
+create index filemodulemonitor_userid on filemodule_monitor(user_id);
+create index support_status_assignedto on support(support_status_id,assigned_to);
+create index bug_status_assignedto on bug(status_id,assigned_to);

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001214.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001214.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001214.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,15 @@
+alter table filemodule_monitor add column id int not null default 0 primary key auto_increment first;
+alter table frs_dlstats_filetotal_agg change column file_id file_id int not null default 0 primary key;
+alter table group_cvs_history add column id int not null default 0 primary key auto_increment first;
+
+DROP TABLE system_news;
+DROP TABLE system_history;
+DROP TABLE system_status;
+DROP TABLE system_services;
+DROP TABLE system_machines;
+
+
+create index foundrynews_foundry_date_approved on foundry_news(foundry_id,approve_date,is_approved);
+create index news_group_date on news_bytes(group_id,date);
+create index news_date on news_bytes(date);
+create index news_approved_date on news_bytes(is_approved,date);

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001220.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001220.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20001220.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,2 @@
+ALTER TABLE patch ADD COLUMN details text;
+INSERT INTO themes VALUES (3,'ultralite','Ultra Lite');

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010109.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010109.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010109.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,7 @@
+create table project_sums_agg (
+group_id int not null default 0,
+type char(4),
+count int not null default 0
+);
+
+CREATE INDEX projectsumsagg_groupid ON project_sums_agg (group_id);

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010112.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010112.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010112.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,9 @@
+-- by: pfalcon
+-- purpose: add default due periods (in sec) for tools
+--30*24*60*60,
+--0*24*60*60,
+--15*24*60*60
+
+ALTER TABLE groups ADD COLUMN bug_due_period int NOT NULL DEFAULT 2592000;
+ALTER TABLE groups ADD COLUMN patch_due_period int NOT NULL DEFAULT 5184000;
+ALTER TABLE groups ADD COLUMN support_due_period int NOT NULL DEFAULT 1296000;

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010126.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010126.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010126.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,51 @@
+-- by: apzen
+-- purpose: stuff for project database and vhost maintanance
+
+     CREATE TABLE prdb_dbs (
+        dbid SERIAL PRIMARY KEY, 
+        group_id INT NOT NULL,
+        dbname TEXT NOT NULL,
+        dbusername TEXT NOT NULL,
+        dbuserpass TEXT NOT NULL,
+        requestdate INT NOT NULL,
+        dbtype INT NOT NULL,
+        created_by INT NOT NULL,
+        state INT NOT NULL
+    );
+
+    CREATE TABLE prdb_states (
+
+        stateid INT NOT NULL,
+        statename TEXT
+    );                
+
+	CREATE UNIQUE INDEX idx_prdb_dbname ON prdb_dbs (dbname);
+
+    INSERT INTO prdb_states VALUES ('1', 'Active');
+    INSERT INTO prdb_states VALUES ('2', 'Pending Create');
+    INSERT INTO prdb_states VALUES ('3', 'Pending Delete');
+    INSERT INTO prdb_states VALUES ('4', 'Pending Update');
+    INSERT INTO prdb_states VALUES ('5', 'Failed Create'); 
+    INSERT INTO prdb_states VALUES ('6', 'Failed Delete');
+	INSERT INTO prdb_states VALUES ('7', 'Failed Update');
+
+    CREATE TABLE prdb_types (
+        dbtypeid INT PRIMARY KEY,
+        dbservername TEXT NOT NULL,
+        dbsoftware TEXT NOT NULL
+    );
+      
+   INSERT INTO prdb_types VALUES ('1','pr-db1','mysql');
+
+    CREATE TABLE prweb_vhost (
+        vhostid SERIAL PRIMARY KEY, 
+        vhost_name TEXT,        
+        docdir TEXT,
+		cgidir TEXT,	
+        group_id INT NOT NULL
+    );
+
+   CREATE INDEX idx_vhost_groups ON prweb_vhost (group_id);
+
+   CREATE UNIQUE INDEX idx_vhost_hostnames ON prweb_vhost(vhost_name);
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010206.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010206.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010206.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,9 @@
+-- by: pfalcon
+-- purpose: add timestamp/version for stored multimedia files
+
+ALTER TABLE db_images ADD COLUMN upload_date int NOT NULL;
+ALTER TABLE db_images ADD COLUMN version int NOT NULL;
+
+CREATE UNIQUE INDEX usergroup_uniq_groupid_userid ON 
+user_group(group_id,user_id);
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010301.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010301.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010301.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,16 @@
+--
+-- Selected TOC Entries:
+--
+\connect - www
+--
+-- TOC Entry ID 2 (OID 29407739)
+--
+-- Name: kernel_traffic Type: TABLE Owner: www
+--
+
+CREATE TABLE "kernel_traffic" (
+	"kt_id" serial primary key,
+	"kt_data" text,
+	CONSTRAINT "kernel_traffic_pkey" PRIMARY KEY ("kt_id")
+);
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010304.NOTE
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010304.NOTE	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010304.NOTE	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,12 @@
+IMPORTANT NOTE!
+-------------------
+
+At this point, the artifact manager was rolled live to production.
+
+This involved stopping the website, then applying several scripts to the database in order:
+
+artifact-man.sql        --  Create the new tracker tables in production
+artifact-conversion.sql --  Convert data from the old structures (bug, patch, support)
+artifact-fkeys.sql      --  Apply foreign key constraints to new tables
+
+artifact-convert-files.php  -- PHP command line script that reformats old patches

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010305.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010305.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010305.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,69 @@
+-- r/w of prdb_dbs ||  r/o prweb_vhost
+
+--
+--	All these changes were applied 3/8/2001
+--
+
+CREATE USER backend WITH PASSWORD 'xxxxx' NOCREATEDB NOCREATEUSER;
+
+GRANT SELECT ON prweb_vhost TO backend;
+GRANT SELECT,UPDATE ON prdb_dbs TO backend;
+
+DROP SEQUENCE bug_bug_dependencies_pk_seq;--
+DROP SEQUENCE bug_canned_responses_pk_seq;--     | sequence | tperdue
+DROP SEQUENCE bug_category_pk_seq       ;--      | sequence | tperdue
+DROP SEQUENCE bug_filter_pk_seq         ;--      | sequence | tperdue
+DROP SEQUENCE bug_group_pk_seq       ;--         | sequence | tperdue
+DROP SEQUENCE bug_history_pk_seq    ;--          | sequence | tperdue
+DROP SEQUENCE bug_pk_seq            ;--          | sequence | tperdue
+DROP SEQUENCE bug_resolution_pk_seq  ;--         | sequence | tperdue
+DROP SEQUENCE bug_status_pk_seq      ;--         | sequence | tperdue
+DROP SEQUENCE bug_task_dependencies_pk_seq ;--   | sequence | tperdue
+DROP SEQUENCE patch_category_pk_seq   ;--        | sequence | tperdue
+DROP SEQUENCE patch_history_pk_seq    ;--        | sequence | tperdue
+DROP SEQUENCE patch_pk_seq            ;--        | sequence | tperdue
+DROP SEQUENCE patch_status_pk_seq     ;--        | sequence | tperdue
+DROP SEQUENCE support_canned_responses_pk_seq;-- | sequence | tperdue
+DROP SEQUENCE support_category_pk_seq   ;--      | sequence | tperdue
+DROP SEQUENCE support_history_pk_seq    ;--      | sequence | tperdue
+DROP SEQUENCE support_messages_pk_seq   ;--      | sequence | tperdue
+DROP SEQUENCE support_pk_seq            ;--      | sequence | tperdue
+DROP SEQUENCE support_status_pk_seq     ;--      | sequence | tperdue
+
+DROP TABLE bug                 ;--          | table | tperdue
+DROP TABLE bug_bug_dependencies  ;--        | table | tperdue
+DROP TABLE bug_canned_responses  ;--        | table | tperdue
+DROP TABLE bug_category          ;--        | table | tperdue
+DROP TABLE bug_filter            ;--        | table | tperdue
+DROP TABLE bug_group             ;--        | table | tperdue
+DROP TABLE bug_history           ;--        | table | tperdue
+DROP TABLE bug_resolution        ;--        | table | tperdue
+DROP TABLE bug_status            ;--        | table | tperdue
+DROP TABLE bug_task_dependencies ;--        | table | tperdue
+DROP TABLE patch                 ;--        | table | tperdue
+DROP TABLE patch_category        ;--        | table | tperdue
+DROP TABLE patch_history         ;--        | table | tperdue
+DROP TABLE patch_status          ;--        | table | tperdue
+DROP TABLE support               ;--        | table | tperdue
+DROP TABLE support_canned_responses ;--     | table | tperdue
+DROP TABLE support_category         ;--     | table | tperdue
+DROP TABLE support_history          ;--     | table | tperdue
+DROP TABLE support_messages         ;--     | table | tperdue
+DROP TABLE support_status           ;--     | table | tperdue
+
+alter table groups rename column use_bugs to dead1;
+alter table groups rename column use_patch to dead2;
+alter table groups rename column use_support to dead3;
+alter table groups rename column new_bug_address to dead4;
+alter table groups rename column new_patch_address to dead5;
+alter table groups rename column new_support_address to dead6;
+alter table groups rename column send_all_bugs to dead7;
+alter table groups rename column send_all_patches to dead8;
+alter table groups rename column send_all_support to dead9;
+alter table groups rename column use_bug_depend_box to dead10;
+alter table groups rename column bug_due_period to dead11;
+alter table groups rename column patch_due_period to dead12;
+alter table groups rename column support_due_period to dead13;
+
+drop index groups_unix; 
+create unique index group_unix_uniq on groups (unix_group_name);

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010313.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010313.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010313.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,143 @@
+--
+-- Enforce unique user names
+--
+
+create unique index users_namename_uniq on users(user_name);
+DROP INDEX user_user;
+DROP INDEX idx_users_username;
+
+--
+--	INSTALL PL/pgSQL
+--
+CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
+		 '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C';
+
+CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
+		 HANDLER plpgsql_call_handler
+		 LANCOMPILER 'PL/pgSQL';
+
+--
+--      Define a trigger so when you create a new ArtifactType
+--      You automatically create a related row over in the counters table
+--
+CREATE FUNCTION forumgrouplist_insert_agg () RETURNS OPAQUE AS '
+BEGIN
+        INSERT INTO forum_agg_msg_count (group_forum_id,count) \
+                VALUES (NEW.group_forum_id,0);
+        RETURN NEW;
+END;    
+' LANGUAGE 'plpgsql';
+
+CREATE TRIGGER forumgrouplist_insert_trig AFTER INSERT ON forum_group_list
+        FOR EACH ROW EXECUTE PROCEDURE forumgrouplist_insert_agg();
+
+--
+--  Define a rule so that when new forum messages are submitted,
+--  the counters increment
+--
+CREATE RULE forum_insert_agg AS
+    ON INSERT TO forum
+    DO UPDATE forum_agg_msg_count SET count=count+1
+        WHERE group_forum_id=new.group_forum_id;
+
+CREATE RULE forum_delete_agg AS
+    ON DELETE TO forum
+    DO UPDATE forum_agg_msg_count SET count=count-1
+        WHERE group_forum_id=old.group_forum_id;
+
+
+--
+--	People want the open counts added to the artifact counts
+--
+ALTER TABLE artifact_counts_agg ADD COLUMN open_count int;
+
+--
+--	Define a trigger so when you create a new ArtifactType
+--	You automatically create a related row over in the counters table
+--
+CREATE FUNCTION artifactgrouplist_insert_agg () RETURNS OPAQUE AS '
+BEGIN
+	INSERT INTO artifact_counts_agg (group_artifact_id,count,open_count) \
+		VALUES (NEW.group_artifact_id,0,0);
+        RETURN NEW;
+END;    
+' LANGUAGE 'plpgsql';
+
+CREATE TRIGGER artifactgrouplist_insert_trig AFTER INSERT ON artifact_group_list
+        FOR EACH ROW EXECUTE PROCEDURE artifactgrouplist_insert_agg();
+
+--
+--	Define a rule so that when new artifacts are submitted,
+--	the counters increment
+--
+CREATE RULE artifact_insert_agg AS
+	ON INSERT TO artifact
+	DO UPDATE artifact_counts_agg SET count=count+1,open_count=open_count+1 
+		WHERE group_artifact_id=new.group_artifact_id;
+
+--
+--
+--
+drop TRIGGER artifactgroup_update_trig ON artifact;
+drop function artifactgroup_update_agg();
+
+CREATE FUNCTION artifactgroup_update_agg () RETURNS OPAQUE AS '
+BEGIN
+	--
+	-- see if they are moving to a new artifacttype
+	-- if so, its a more complex operation
+	--
+	IF NEW.group_artifact_id <> OLD.group_artifact_id THEN
+		--
+		-- transferred artifacts always have a status of 1
+		-- so we will increment the new artifacttypes sums
+		--
+		UPDATE artifact_counts_agg SET count=count+1, open_count=open_count+1 \
+			WHERE group_artifact_id=NEW.group_artifact_id;
+
+		--
+		--	now see how to increment/decrement the old types sums
+		--
+		IF NEW.status_id <> OLD.status_id THEN 
+			IF OLD.status_id = 2 THEN
+				UPDATE artifact_counts_agg SET count=count-1 \
+					WHERE group_artifact_id=OLD.group_artifact_id;
+			--
+			--	no need to do anything if it was in deleted status
+			--
+			END IF;
+		ELSE
+			--
+			--	Was already in open status before
+			--
+			UPDATE artifact_counts_agg SET count=count-1, open_count=open_count-1 \
+				WHERE group_artifact_id=OLD.group_artifact_id;
+		END IF;
+	ELSE
+		--
+		-- just need to evaluate the status flag and 
+		-- increment/decrement the counter as necessary
+		--
+		IF NEW.status_id <> OLD.status_id THEN
+			IF new.status_id = 1 THEN
+				UPDATE artifact_counts_agg SET open_count=open_count+1 \
+					WHERE group_artifact_id=new.group_artifact_id;
+			ELSE 
+				IF new.status_id = 2 THEN
+					UPDATE artifact_counts_agg SET open_count=open_count-1 \
+						WHERE group_artifact_id=new.group_artifact_id;
+				ELSE 
+					IF new.status_id = 3 THEN
+						UPDATE artifact_counts_agg SET open_count=open_count-1,count=count-1 \
+							WHERE group_artifact_id=new.group_artifact_id;
+					END IF;
+				END IF;
+			END IF;
+		END IF;	
+	END IF;
+	RETURN NEW;
+END;
+' LANGUAGE 'plpgsql';
+
+CREATE TRIGGER artifactgroup_update_trig AFTER UPDATE ON artifact
+	FOR EACH ROW EXECUTE PROCEDURE artifactgroup_update_agg();

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010317.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010317.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010317.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,13 @@
+-- by: pfalcon
+-- purpose: table to store pending mass mailings
+
+CREATE TABLE massmail_queue (
+id serial primary key,
+type varchar(8) not null,
+subject text not null,
+message text not null,
+queued_date int not null,
+last_userid int not null default 0,
+failed_date int not null default 0,
+finished_date int not null default 0
+);

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010409.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010409.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010409.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,227 @@
+--
+--	Stats structure and process changes
+--
+
+drop table stats_project_build_tmp;
+drop table tmp_projs_releases_tmp;
+begin; delete from stats_project where day is null or week is null; commit;
+drop table stats_project_tmp;
+drop table topproj_admins;
+DROP TABLE frs_dlstats_agg;
+DROP TABLE frs_dlstats_filetotal_agg_old;
+DROP TABLE stats_agg_pages_by_browser;
+DROP TABLE stats_agg_pages_by_day_old;
+DROP TABLE stats_agr_filerelease;
+DROP TABLE stats_agr_project;
+drop table group_cvs_history;
+drop table project_counts_tmp;
+
+
+--
+--  Change the date format of stats_agg_site_by_group
+--
+--  Populated daily by site_stats.php
+--
+CREATE TABLE frs_dlstats_file_agg_tmp AS
+SELECT
+	substring(day::text from 1 for 6)::int AS month,
+	substring(day::text from 7 for 2)::int AS day,
+	file_id,
+	downloads
+	from frs_dlstats_file_agg;
+
+DROP TABLE frs_dlstats_file_agg;
+ALTER TABLE frs_dlstats_file_agg_tmp RENAME TO frs_dlstats_file_agg;
+
+CREATE UNIQUE INDEX frsdlfileagg_month_day_file ON frs_dlstats_file_agg(month,day,file_id);
+
+
+drop index httpdl_fid;
+drop index httpdl_group_id;
+create index statshttpdl_day_fileid ON stats_http_downloads(day,filerelease_id);
+drop index ftpdl_fid;
+drop index ftpdl_group_id;
+create index statsftpdl_day_fileid ON stats_ftp_downloads(day,filerelease_id);
+
+--
+--	Create an archive table of project_weekly_metric
+--
+--	Populated by project_weekly_metric.php
+--
+CREATE TABLE stats_project_metric (
+month int not null default 0,
+day int not null default 0,
+ranking int not null default 0,
+precentile float not null default 0,
+group_id int not null default 0
+);
+
+copy stats_project_metric from '/tmp/stats_project_metric.dump';
+
+CREATE UNIQUE INDEX statsprojectmetric_month_day_group ON stats_project_metric(month,day,group_id);
+
+
+--
+--	Change the date format of stats_agg_site_by_group
+--
+--	Populated daily by site_stats.php
+--
+CREATE TABLE stats_agg_site_by_group_tmp AS
+SELECT 
+	substring(day::text from 1 for 6)::int AS month, 
+	substring(day::text from 7 for 2)::int AS day, 
+	group_id,
+	count
+	from stats_agg_site_by_group ;
+
+DROP TABLE stats_agg_site_by_group;
+ALTER TABLE stats_agg_site_by_group_tmp RENAME TO stats_agg_site_by_group;
+
+DROP TABLE stats_agg_site_by_day;
+
+CREATE UNIQUE INDEX statssitebygroup_month_day_group ON stats_agg_site_by_group(month,day,group_id);
+
+
+--
+--	Change the date format of stats_agg_logo_by_group
+--
+--	Populated daily by site_stats.php
+--
+CREATE TABLE stats_agg_logo_by_group_tmp AS
+SELECT	   
+	substring(day::text from 1 for 6)::int AS month,
+	substring(day::text from 7 for 2)::int AS day,
+	group_id,
+	count 
+	from stats_agg_logo_by_group ;
+
+DROP TABLE stats_agg_logo_by_group;
+ALTER TABLE stats_agg_logo_by_group_tmp RENAME TO stats_agg_logo_by_group;
+
+CREATE UNIQUE INDEX statslogobygroup_month_day_group ON stats_agg_logo_by_group(month,day,group_id);
+
+
+--
+-- Subdomain pages
+--
+create table stats_subd_pages (
+month INT NOT NULL DEFAULT 0,
+day INT NOT NULL DEFAULT 0,
+group_id INT NOT NULL DEFAULT 0,
+pages INT NOT NULL DEFAULT 0
+);
+
+--
+--	Migrate data from old stats_project table
+--
+INSERT INTO stats_subd_pages
+SELECT month,day,group_id,subdomain_views 
+FROM stats_project WHERE subdomain_views > 0;
+
+CREATE UNIQUE INDEX statssubdpages_month_day_group ON stats_subd_pages(month,day,group_id);
+
+
+create table stats_cvs_user (
+month INT NOT NULL DEFAULT 0,
+day INT NOT NULL DEFAULT 0,
+group_id INT NOT NULL DEFAULT 0,
+user_id INT NOT NULL DEFAULT 0,
+checkouts INT NOT NULL DEFAULT 0,
+commits INT NOT NULL DEFAULT 0,
+adds INT NOT NULL DEFAULT 0
+);
+
+create table stats_cvs_group (
+month INT NOT NULL DEFAULT 0,
+day INT NOT NULL DEFAULT 0,
+group_id INT NOT NULL DEFAULT 0,
+checkouts INT NOT NULL DEFAULT 0,
+commits INT NOT NULL DEFAULT 0,
+adds INT NOT NULL DEFAULT 0
+);
+
+--
+--	Migrate data from old stats_project table
+--
+INSERT INTO stats_cvs_group 
+SELECT month,day,group_id,cvs_checkouts,cvs_commits,cvs_adds 
+FROM stats_project 
+WHERE cvs_checkouts > 0 
+OR cvs_commits > 0 
+OR cvs_adds > 0;
+
+CREATE UNIQUE INDEX statscvsgroup_month_day_group ON stats_cvs_group(month,day,group_id);
+
+
+DROP INDEX archive_project_day;
+DROP INDEX archive_project_month;
+DROP INDEX archive_project_monthday;
+DROP INDEX archive_project_week;
+DROP INDEX project_log_group;
+
+--
+--	Populated daily by site_stats.php
+--
+create table stats_project_developers (
+month INT NOT NULL DEFAULT 0,
+day INT NOT NULL DEFAULT 0,
+group_id INT NOT NULL DEFAULT 0,
+developers INT NOT NULL DEFAULT 0
+);
+
+--
+--	Migrate data from old stats_project table
+--
+COPY stats_project_developers from '/tmp/stats_project_developers';
+CREATE UNIQUE INDEX statsprojectdev_month_day_group ON stats_project_developers(month,day,group_id);
+
+
+--
+--	Reorg and normalize stats_project as much as feasible
+--
+--	Populated daily by site_stats.php
+--
+DROP TABLE stats_project;
+
+create table stats_project (
+month INT NOT NULL DEFAULT 0,
+day INT NOT NULL DEFAULT 0,
+group_id INT NOT NULL DEFAULT 0,
+file_releases INT DEFAULT 0,
+msg_posted INT DEFAULT 0,
+msg_uniq_auth INT DEFAULT 0,
+bugs_opened INT DEFAULT 0,
+bugs_closed INT DEFAULT 0,
+support_opened INT DEFAULT 0,
+support_closed INT DEFAULT 0,
+patches_opened INT DEFAULT 0,
+patches_closed INT DEFAULT 0,
+artifacts_opened INT DEFAULT 0,
+artifacts_closed INT DEFAULT 0,
+tasks_opened INT DEFAULT 0,
+tasks_closed INT DEFAULT 0,
+help_requests INT DEFAULT 0
+);
+
+copy stats_project from '/tmp/stats_project.dump';
+
+CREATE UNIQUE INDEX statsproject_month_day_group ON stats_project(month,day,group_id);
+
+
+--
+--	Reorg and normalize the stats_site table
+--
+--	Populated daily by site_stats.php
+--
+create table stats_site_tmp AS 
+select month,day,uniq_users,sessions,total_users,new_users,new_projects 
+from stats_site;
+
+DROP TABLE stats_site;
+ALTER TABLE stats_site_tmp RENAME TO stats_site;
+
+CREATE UNIQUE INDEX statssite_month_day on stats_site(month,day);
+
+grant all on stats_cvs_group to stats;
+grant all on stats_project to stats;
+grant all on stats_subd_pages to stats;

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010412.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010412.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010412.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,5 @@
+-- by: pfalcon
+-- purpose: add logo image support for any group
+
+ALTER TABLE groups ADD COLUMN logo_image_id int NOT NULL DEFAULT 100;
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010507.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010507.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010507.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,5 @@
+-- by: pfalcon
+-- purpose: add field to allow ratings opt-out
+
+ALTER TABLE users ADD COLUMN block_ratings int NOT NULL DEFAULT 0;
+

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010509.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010509.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010509.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,61 @@
+-- by: pfalcon
+-- purpose: Referential integrity constraints for FRS schema
+
+BEGIN;
+
+INSERT INTO frs_filetype VALUES (100,'None');
+INSERT INTO frs_processor VALUES (100,'None');
+
+-- if file is not attched to a release, it can't be seen anyway
+DELETE FROM frs_file
+WHERE NOT EXISTS(
+	SELECT release_id
+	FROM frs_release
+	WHERE frs_file.release_id=frs_release.release_id
+)
+;
+
+UPDATE frs_file
+SET type_id=100
+WHERE NOT EXISTS(
+	SELECT type_id
+	FROM frs_filetype
+	WHERE frs_file.type_id=frs_filetype.type_id
+)
+;
+
+UPDATE frs_file
+SET processor_id=100
+WHERE NOT EXISTS(
+	SELECT processor_id
+	FROM frs_processor
+	WHERE frs_file.processor_id=frs_processor.processor_id
+)
+;
+
+COMMIT;
+
+ALTER TABLE frs_file ADD CONSTRAINT frsfile_releaseid_fk
+	FOREIGN KEY (release_id) REFERENCES frs_release(release_id) MATCH FULL;
+ALTER TABLE frs_file ADD CONSTRAINT frsfile_typeid_fk
+	FOREIGN KEY (type_id) REFERENCES frs_filetype(type_id) MATCH FULL;
+ALTER TABLE frs_file ADD CONSTRAINT frsfile_processorid_fk
+	FOREIGN KEY (processor_id) REFERENCES frs_processor(processor_id) MATCH FULL;
+
+ALTER TABLE frs_package ADD CONSTRAINT frspackage_groupid_fk
+	FOREIGN KEY (group_id) REFERENCES groups(group_id) MATCH FULL;
+ALTER TABLE frs_package ADD CONSTRAINT frspackage_statusid_fk
+	FOREIGN KEY (status_id) REFERENCES frs_status(status_id) MATCH FULL;
+
+ALTER TABLE frs_release ADD CONSTRAINT frsrelease_packageid_fk
+	FOREIGN KEY (package_id) REFERENCES frs_package(package_id) MATCH FULL;
+ALTER TABLE frs_release ADD CONSTRAINT frsrelease_statusid_fk
+	FOREIGN KEY (status_id) REFERENCES frs_status(status_id) MATCH FULL;
+ALTER TABLE frs_release ADD CONSTRAINT frsrelease_releasedby_fk
+	FOREIGN KEY (released_by) REFERENCES users(user_id) MATCH FULL;
+
+-- Tracker 'Pending' patch sql changes
+-- by: zelphyr
+ALTER TABLE artifact_group_list ADD COLUMN status_timeout integer;
+UPDATE artifact_group_list SET status_timeout='1209600' WHERE status_timeout=NULL;
+INSERT INTO artifact_status VALUES('4','Pending');

Added: trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010511.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010511.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/SQL_migrate-2.5-to-2.6/sqlchanges20010511.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,12 @@
+-- by: pfalcon
+-- purpose: table with history of users' rating, for tracking changes/graphing
+
+CREATE TABLE user_metric_history(
+month int not null,
+day  int not null,
+user_id int not null,
+ranking int not null,
+metric float not null);
+
+CREATE UNIQUE INDEX user_metric_history_date_userid 
+ON user_metric_history(month,day,user_id);

Added: trunk/gforge_base/evolvisforge/gforge/db/dbusers.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/dbusers.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/dbusers.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,32 @@
+--
+--	SourceForge: Breaking Down the Barriers to Open Source Development
+--	Copyright 1999-2001 (c) VA Linux Systems
+--	http://sourceforge.net
+--
+--	$Id: dbusers.sql,v 1.3 2001/06/19 16:50:06 jbyers Exp $	
+--
+
+CREATE USER backend WITH PASSWORD 'xxxxx' NOCREATEDB NOCREATEUSER;
+
+GRANT SELECT ON prweb_vhost,users,mail_group_list TO backend;
+GRANT SELECT,UPDATE ON prdb_dbs TO backend;
+
+
+CREATE USER stats WITH PASSWORD 'xxxxx' NOCREATEDB NOCREATEUSER;
+
+GRANT SELECT ON
+groups,
+frs_file,
+frs_package,
+frs_release
+TO stats;
+
+GRANT ALL ON
+frs_dlstats_file_agg,
+stats_ftp_downloads,
+stats_http_downloads,
+stats_cvs_group,
+stats_subd_pages
+TO stats;
+
+grant all on _rserv_log_ to stats;

Added: trunk/gforge_base/evolvisforge/gforge/db/languages.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/languages.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/languages.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,23 @@
+1	English	English.class	English	en
+2	Japanese	Japanese.class	Japanese	ja
+3	Hebrew	Hebrew.class	Hebrew	iw
+4	Spanish	Spanish.class	Spanish	es
+5	Thai	Thai.class	Thai	th
+6	German	German.class	German	de
+7	French	French.class	French	fr
+8	Italian	Italian.class	Italian	it
+9	Norwegian	Norwegian.class	Norwegian	no
+10	Swedish	Swedish.class	Swedish	sv
+12	Dutch	Dutch.class	Dutch	nl
+13	Esperanto	Esperanto.class	Esperanto	eo
+14	Catalan	Catalan.class	Catalan	ca
+15	Polish	Polish.class	Polish	pl
+11	Trad.Chinese	Chinese.class	Chinese	zh
+17	Russian	Russian.class	Russian	ru
+18	Portuguese	Portuguese.class	Portuguese	pt
+19	Greek	Greek.class	Greek	el
+20	Bulgarian	Bulgarian.class	Bulgarian	bg
+21	Indonesian	Indonesian.class	Indonesian	id
+16	Pt. Brazillian	PortugueseBrazillian.class	PortugueseBrazillian	pt
+22	Korean	Korean.class	Korean	ko
+23	Smpl.Chinese	SimplifiedChinese.class	SimplifiedChinese	zn

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/DefaultValues.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/DefaultValues.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/DefaultValues.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,195 @@
+--
+--	SourceForge: Breaking Down the Barriers to Open Source Development
+--	Copyright 1999-2000 (c) The SourceForge Crew
+--	http://sourceforge.net
+--
+--	The values in this file must be inserted in order
+--	and must be complete or you will have referential integrity problems
+--
+
+--
+--      Default Data for 'groups'
+--
+INSERT INTO groups (group_id) VALUES (1);
+
+--
+--      Default Data for 'users'
+--
+INSERT INTO users (user_id, user_name, email, user_pw)  
+VALUES (100,'None','noreply','*********34343');
+
+--
+--	Default data for table 'bug_resolution'
+--
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (1,'Fixed');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (2,'Invalid');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (3,'Wont Fix');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (4,'Later');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (5,'Remind');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (6,'Works For Me');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (100,'None');
+INSERT INTO bug_resolution (resolution_id, resolution_name) VALUES (101,'Duplicate');
+
+--
+--	Default data for table 'bug_status'
+--
+INSERT INTO bug_status (status_id, status_name) VALUES (1,'Open');
+INSERT INTO bug_status (status_id, status_name) VALUES (3,'Closed');
+INSERT INTO bug_status (status_id, status_name) VALUES (100,'None');
+
+--
+--	Default data for bug_category
+--
+INSERT INTO bug_category (bug_category_id, group_id, category_name) VALUES (100,1,'None');
+
+--
+--	Default data for bug_group
+--
+INSERT INTO bug_group (bug_group_id, group_id, group_name) VALUES (100,1,'None');
+
+--
+--	Default data for bug - required for dependent tasks/bugs
+--
+INSERT INTO bug (bug_id,group_id,status_id,category_id,bug_group_id,submitted_by,assigned_to,resolution_id)
+	VALUES (100,1,100,100,100,100,100,100);
+--NOTE - if using sequences, you may have to update the bug_id sequence here
+
+--
+--	Default data for table 'patch_category'
+--
+INSERT INTO patch_category (patch_category_id, group_id, category_name) VALUES (100,1,'None');
+
+--
+--	Default data for table 'patch_status'
+--
+INSERT INTO patch_status (patch_status_id, status_name) VALUES (1,'Open');
+INSERT INTO patch_status (patch_status_id, status_name) VALUES (2,'Closed');
+INSERT INTO patch_status (patch_status_id, status_name) VALUES (3,'Deleted');
+INSERT INTO patch_status (patch_status_id, status_name) VALUES (4,'Postponed');
+INSERT INTO patch_status (patch_status_id, status_name) VALUES (100,'None');
+
+--
+--	Default values for patch
+--
+INSERT INTO patch (group_id,patch_status_id,patch_category_id,submitted_by,assigned_to)
+	VALUES (1,100,100,100,100);
+
+--
+--	Default data for table 'project_status'
+--
+INSERT INTO project_status (status_id, status_name) VALUES (1,'Open');
+INSERT INTO project_status (status_id, status_name) VALUES (2,'Closed');
+INSERT INTO project_status (status_id, status_name) VALUES (100,'None');
+INSERT INTO project_status (status_id, status_name) VALUES (3,'Deleted');
+
+--
+--	Default data for project_group_list
+--
+INSERT INTO project_group_list (group_project_id,group_id) VALUES (1,1);
+--NOTE - if using sequences, you may have to update the group_project_id sequence here
+
+--
+--	Default data for project_task
+--
+INSERT INTO project_task (group_project_id,created_by,status_id)
+	VALUES (1,100,100);
+
+--
+--	Default Data for 'survey_question_types'
+--
+INSERT INTO survey_question_types (id, type) VALUES (1,'Radio Buttons 1-5');
+INSERT INTO survey_question_types (id, type) VALUES (2,'Text Area');
+INSERT INTO survey_question_types (id, type) VALUES (3,'Radio Buttons Yes/No');
+INSERT INTO survey_question_types (id, type) VALUES (4,'Comment Only');
+INSERT INTO survey_question_types (id, type) VALUES (5,'Text Field');
+INSERT INTO survey_question_types (id, type) VALUES (100,'None');
+
+--
+--	Default data for Support System
+--
+insert into support_status values('1','Open');
+insert into support_status values('2','Closed');
+insert into support_status values('3','Deleted');
+
+--
+--	Default data for 'support_category'
+--
+insert into support_category VALUES ('100','1','None');
+
+--
+--	Default data for Help Wanted System
+--
+INSERT INTO people_skill_year VALUES ('','< 6 Months');
+INSERT INTO people_skill_year VALUES ('','6 Mo - 2 yr');
+INSERT INTO people_skill_year VALUES ('','2 yr - 5 yr');
+INSERT INTO people_skill_year VALUES ('','5 yr - 10 yr');
+INSERT INTO people_skill_year VALUES ('','> 10 years');
+
+INSERT INTO people_skill_level VALUES ('','Want to Learn');
+INSERT INTO people_skill_level VALUES ('','Competent');
+INSERT INTO people_skill_level VALUES ('','Wizard');
+INSERT INTO people_skill_level VALUES ('','Wrote The Book');
+INSERT INTO people_skill_level VALUES ('','Wrote It');
+
+INSERT INTO people_job_category (category_id,name) VALUES ('','Developer');
+INSERT INTO people_job_category (category_id,name) VALUES ('','Project Manager');
+INSERT INTO people_job_category (category_id,name) VALUES ('','Unix Admin');
+INSERT INTO people_job_category (category_id,name) VALUES ('','Doc Writer');
+INSERT INTO people_job_category (category_id,name) VALUES ('','Tester');
+INSERT INTO people_job_category (category_id,name) VALUES ('','Support Manager');
+INSERT INTO people_job_category (category_id,name) VALUES ('','Graphic/Other Designer');
+
+INSERT INTO people_job_status VALUES ('1','Open');
+INSERT INTO people_job_status VALUES ('2','Filled');
+INSERT INTO people_job_status VALUES ('3','Deleted');
+
+--
+--	Default data for group_type
+--
+INSERT INTO group_type VALUES ('1','Project');
+INSERT INTO group_type VALUES ('2','Foundry');
+
+--
+--	Default data for new filerelease system
+--
+INSERT INTO frs_filetype VALUES ('1000','.deb');
+INSERT INTO frs_filetype VALUES ('2000','.rpm');
+INSERT INTO frs_filetype VALUES ('3000','.zip');
+INSERT INTO frs_filetype VALUES ('','.bz2');
+INSERT INTO frs_filetype VALUES ('','.gz');
+INSERT INTO frs_filetype VALUES ('5000','Source .zip');
+INSERT INTO frs_filetype VALUES ('','Source .bz2');
+INSERT INTO frs_filetype VALUES ('','Source .gz');
+INSERT INTO frs_filetype VALUES ('5100','Source .rpm');
+INSERT INTO frs_filetype VALUES ('5900','Other Source File');
+INSERT INTO frs_filetype VALUES ('8000','.jpg');
+INSERT INTO frs_filetype VALUES ('','text');
+INSERT INTO frs_filetype VALUES ('','html');
+INSERT INTO frs_filetype VALUES ('','pdf');
+INSERT INTO frs_filetype VALUES ('9999','Other');
+
+INSERT INTO frs_status VALUES ('1','Active');
+INSERT INTO frs_status VALUES ('3','Hidden');
+
+INSERT INTO frs_processor VALUES ('1000','i386');
+INSERT INTO frs_processor VALUES ('6000','IA64');
+INSERT INTO frs_processor VALUES ('7000','Alpha');
+INSERT INTO frs_processor VALUES ('8000','Any');
+INSERT INTO frs_processor VALUES ('2000','PPC');
+INSERT INTO frs_processor VALUES ('3000','MIPS');
+INSERT INTO frs_processor VALUES ('4000','Sparc');
+INSERT INTO frs_processor VALUES ('5000','UltraSparc');
+INSERT INTO frs_processor VALUES ('9999','Other');
+
+--
+--	Default data for themes
+--
+INSERT INTO themes VALUES (1,'forged','Forged Metal');
+INSERT INTO themes VALUES (2,'classic','Classic SourceForge');
+
+--
+--	Default data for user_group
+--
+INSERT INTO user_group (user_id, group_id, admin_flags) VALUES (101,1,'A');
+
+

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/Languages.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/Languages.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/Languages.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,42 @@
+INSERT INTO supported_languages 
+VALUES (1,'English','English.class','English','en'); 
+INSERT INTO supported_languages 
+VALUES (2,'Japanese','Japanese.class','Japanese','ja'); 
+INSERT INTO supported_languages 
+VALUES (3,'Hebrew','Hebrew.class','Hebrew','iw'); 
+INSERT INTO supported_languages 
+VALUES (4,'Spanish','Spanish.class','Spanish','es'); 
+INSERT INTO supported_languages 
+VALUES (5,'Thai','Thai.class','Thai','th'); 
+INSERT INTO supported_languages 
+VALUES (6,'German','German.class','German','de'); 
+INSERT INTO supported_languages 
+VALUES (7,'French','French.class','French','fr'); 
+INSERT INTO supported_languages 
+VALUES (8,'Italian','Italian.class','Italian','it'); 
+INSERT INTO supported_languages 
+VALUES (9,'Norwegian','Norwegian.class','Norwegian','no'); 
+INSERT INTO supported_languages 
+VALUES (10,'Swedish','Swedish.class','Swedish','sv'); 
+INSERT INTO supported_languages 
+VALUES (11,'Chinese','Chinese.class','Chinese','zh'); 
+INSERT INTO supported_languages 
+VALUES (12,'Dutch','Dutch.class','Dutch','nl'); 
+INSERT INTO supported_languages 
+VALUES (13,'Esperanto','Esperanto.class','Esperanto','eo'); 
+INSERT INTO supported_languages 
+VALUES (14,'Catalan','Catalan.class','Catalan','ca'); 
+INSERT INTO supported_languages 
+VALUES (15,'Polish','Polish.class','Polish','pl'); 
+INSERT INTO supported_languages 
+VALUES (16,'Portuguese (Brazillian)','PortugueseBrazillian.class','PortugueseBrazillian','pt'); 
+INSERT INTO supported_languages 
+VALUES (17,'Russian','Russian.class','Russian','ru'); 
+INSERT INTO supported_languages 
+VALUES (18,'Portuguese','Portuguese.class','Portuguese','pt'); 
+INSERT INTO supported_languages 
+VALUES (19,'Greek','Greek.class','Greek','el'); 
+INSERT INTO supported_languages 
+VALUES (20,'Bulgarian','Bulgarian.class','Bulgarian','bg'); 
+INSERT INTO supported_languages 
+VALUES (21,'Indonesian','Indonesian.class','Indonesian','id');

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/SourceForge.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/SourceForge.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/SourceForge.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,6141 @@
+-- ORACLE SCRIPT
+--   Changes were renaming the "session" table to sf_session
+--                renaming "date" columns to sf_date
+--                commenting out the create trigger constraints
+--                commenting out the select setval statements
+
+--
+-- Selected TOC Entries:
+--
+--\connect - tperdue
+--
+-- TOC Entry ID 2 (OID 18138427)
+--
+-- Name: bug_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 182 (OID 18138445)
+--
+-- Name: bug Type: TABLE 
+--
+
+CREATE TABLE bug (
+	bug_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	status_id integer DEFAULT '0' NOT NULL,
+	priority integer DEFAULT '0' NOT NULL,
+	category_id integer DEFAULT '0' NOT NULL,
+	submitted_by integer DEFAULT '0' NOT NULL,
+	assigned_to integer DEFAULT '0' NOT NULL,
+	sf_date integer DEFAULT '0' NOT NULL,
+	summary varchar2(255),
+	details varchar2(255),
+	close_date integer,
+	bug_group_id integer DEFAULT '0' NOT NULL,
+	resolution_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (bug_id)
+);
+
+CREATE TRIGGER DEFAULT_BUG_ID BEFORE 
+    INSERT 
+    ON bug REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_pk_seq.nextval into :new.bug_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 4 (OID 18138495)
+--
+-- Name: bug_bug_dependencies_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_bug_dependencies_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 183 (OID 18138513)
+--
+-- Name: bug_bug_dependencies Type: TABLE 
+--
+
+CREATE TABLE bug_bug_dependencies (
+	bug_depend_id integer DEFAULT '0' NOT NULL,
+	bug_id integer DEFAULT '0' NOT NULL,
+	is_dependent_on_bug_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (bug_depend_id)
+);
+
+CREATE TRIGGER DEFAULT_BUG_DEPEND_ID BEFORE 
+    INSERT 
+    ON bug_bug_dependencies REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_bug_dependencies_pk_seq.nextval into :new.bug_depend_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 6 (OID 18138531)
+--
+-- Name: bug_canned_responses_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_canned_responses_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 184 (OID 18138549)
+--
+-- Name: bug_canned_responses Type: TABLE 
+--
+
+CREATE TABLE bug_canned_responses (
+	bug_canned_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	title varchar2(255),
+	body varchar2(255),
+	PRIMARY KEY (bug_canned_id)
+);
+
+CREATE TRIGGER DEFAULT_BUG_CANNED_ID BEFORE 
+    INSERT 
+    ON bug_canned_responses REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_canned_responses_pk_seq.nextval into :new.bug_canned_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 8 (OID 18138582)
+--
+-- Name: bug_category_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_category_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 185 (OID 18138600)
+--
+-- Name: bug_category Type: TABLE 
+--
+
+CREATE TABLE bug_category (
+	bug_category_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	category_name varchar2(255),
+	PRIMARY KEY (bug_category_id)
+);
+
+CREATE TRIGGER DEFAULT_BUG_CATEGORY_ID BEFORE 
+    INSERT 
+    ON bug_category REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_category_pk_seq.nextval into :new.bug_category_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 10 (OID 18138632)
+--
+-- Name: bug_filter_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_filter_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 186 (OID 18138650)
+--
+-- Name: bug_filter Type: TABLE 
+--
+
+CREATE TABLE bug_filter (
+	filter_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	sql_clause varchar2(255) DEFAULT '',
+	is_active integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (filter_id)
+);
+
+CREATE TRIGGER DEFAULT_BUG_FILTER_ID BEFORE 
+    INSERT 
+    ON bug_filter REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_filter_pk_seq.nextval into :new.filter_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 12 (OID 18138687)
+--
+-- Name: bug_group_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_group_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 187 (OID 18138705)
+--
+-- Name: bug_group Type: TABLE 
+--
+
+CREATE TABLE bug_group (
+	bug_group_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	group_name varchar2(255) DEFAULT '',
+	PRIMARY KEY (bug_group_id)
+);
+
+CREATE TRIGGER DEFAULT_BUG_GROUP_ID BEFORE 
+    INSERT 
+    ON bug_group REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_group_pk_seq.nextval into :new.bug_group_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 14 (OID 18138738)
+--
+-- Name: bug_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 188 (OID 18138756)
+--
+-- Name: bug_history Type: TABLE 
+--
+
+CREATE TABLE bug_history (
+	bug_history_id integer DEFAULT '0' NOT NULL,
+	bug_id integer DEFAULT '0' NOT NULL,
+	field_name varchar2(255) DEFAULT '',
+	old_value varchar2(255) DEFAULT '',
+	mod_by integer DEFAULT '0' NOT NULL,
+	sf_date integer,
+	PRIMARY KEY (bug_history_id)
+);
+
+--nextval('bug_history_pk_seq'::text)
+CREATE TRIGGER DEFAULT_BUG_HISTORY_ID BEFORE 
+    INSERT 
+    ON bug_history REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_history_pk_seq.nextval into :new.bug_history_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 16 (OID 18138794)
+--
+-- Name: bug_resolution_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_resolution_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 189 (OID 18138812)
+--
+-- Name: bug_resolution Type: TABLE 
+--
+
+CREATE TABLE bug_resolution (
+	resolution_id integer DEFAULT '0' NOT NULL,
+	resolution_name varchar2(255) DEFAULT '',
+	PRIMARY KEY (resolution_id)
+);
+
+--nextval('bug_resolution_pk_seq'::text)
+CREATE TRIGGER DEFAULT_BUG_RESOLUTION_ID BEFORE 
+    INSERT 
+    ON bug_resolution REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_resolution_pk_seq.nextval into :new.resolution_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 18 (OID 18138843)
+--
+-- Name: bug_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 190 (OID 18138861)
+--
+-- Name: bug_status Type: TABLE 
+--
+
+CREATE TABLE bug_status (
+	status_id integer DEFAULT '0' NOT NULL,
+	status_name varchar2(255),
+	PRIMARY KEY (status_id)
+);
+
+--nextval('bug_status_pk_seq'::text)
+CREATE TRIGGER DEFAULT_BUG_STATUS_ID BEFORE 
+    INSERT 
+    ON bug_status REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_status_pk_seq.nextval into :new.status_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 20 (OID 18138891)
+--
+-- Name: bug_task_dependencies_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE bug_task_dependencies_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 191 (OID 18138909)
+--
+-- Name: bug_task_dependencies Type: TABLE 
+--
+
+CREATE TABLE bug_task_dependencies (
+	bug_depend_id integer DEFAULT '0' NOT NULL,
+	bug_id integer DEFAULT '0' NOT NULL,
+	is_dependent_on_task_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (bug_depend_id)
+);
+
+--nextval('bug_task_dependencies_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_BUG_TASK_ID BEFORE 
+    INSERT 
+    ON bug_task_dependencies REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select bug_task_dependencies_pk_seq.nextval into :new.bug_depend_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 22 (OID 18138927)
+--
+-- Name: canned_responses_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE canned_responses_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 192 (OID 18138946)
+--
+-- Name: canned_responses Type: TABLE 
+--
+
+CREATE TABLE canned_responses (
+	response_id integer DEFAULT '0' NOT NULL,
+	response_title character varying(25),
+	response_text varchar2(255),
+	PRIMARY KEY (response_id)
+);
+
+--nextval('canned_responses_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_CANNED_RESPONSE_ID BEFORE 
+    INSERT 
+    ON canned_responses REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select canned_responses_pk_seq.nextval into :new.response_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 24 (OID 18138977)
+--
+-- Name: db_images_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE db_images_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 193 (OID 18138995)
+--
+-- Name: db_images Type: TABLE 
+--
+
+CREATE TABLE db_images (
+	id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	description varchar2(255) DEFAULT '',
+	bin_data varchar2(255) DEFAULT '',
+	filename varchar2(255) DEFAULT '',
+	filesize integer DEFAULT '0' NOT NULL,
+	filetype varchar2(255) DEFAULT '',
+	width integer DEFAULT '0' NOT NULL,
+	height integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--nextval('db_images_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_DB_IMAGES_ID BEFORE 
+    INSERT 
+    ON db_images REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select db_images_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 26 (OID 18139040)
+--
+-- Name: doc_data_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE doc_data_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 194 (OID 18139058)
+--
+-- Name: doc_data Type: TABLE 
+--
+
+CREATE TABLE doc_data (
+	docid integer DEFAULT '0' NOT NULL,
+	stateid integer DEFAULT '0' NOT NULL,
+	title character varying(255) DEFAULT '',
+	data varchar2(255) DEFAULT '',
+	updatedate integer DEFAULT '0' NOT NULL,
+	createdate integer DEFAULT '0' NOT NULL,
+	created_by integer DEFAULT '0' NOT NULL,
+	doc_group integer DEFAULT '0' NOT NULL,
+	description varchar2(255),
+	language_id integer DEFAULT '1' NOT NULL,
+	PRIMARY KEY (docid)
+);
+
+--nextval('doc_data_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_DOC_DATA_ID BEFORE 
+    INSERT 
+    ON doc_data REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select doc_data_pk_seq.nextval into :new.docid from dual;
+END;
+/
+
+--
+-- TOC Entry ID 28 (OID 18139104)
+--
+-- Name: doc_groups_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE doc_groups_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 195 (OID 18139122)
+--
+-- Name: doc_groups Type: TABLE 
+--
+
+CREATE TABLE doc_groups (
+	doc_group integer DEFAULT '0' NOT NULL,
+	groupname character varying(255) DEFAULT '',
+	group_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (doc_group)
+);
+
+--nextval('doc_groups_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_DOC_GROUP BEFORE 
+    INSERT 
+    ON doc_groups REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select doc_groups_pk_seq.nextval into :new.doc_group from dual;
+END;
+/
+
+--
+-- TOC Entry ID 30 (OID 18139140)
+--
+-- Name: doc_states_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE doc_states_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 196 (OID 18139158)
+--
+-- Name: doc_states Type: TABLE 
+--
+
+CREATE TABLE doc_states (
+	stateid integer DEFAULT '0' NOT NULL,
+	name character varying(255) DEFAULT '',
+	PRIMARY KEY (stateid)
+);
+
+--nextval('doc_states_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_DOC_STATES_ID BEFORE 
+    INSERT 
+    ON doc_states REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select doc_states_pk_seq.nextval into :new.stateid from dual;
+END;
+/
+
+--
+-- TOC Entry ID 32 (OID 18139174)
+--
+-- Name: filemodule_monitor_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE filemodule_monitor_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 197 (OID 18139192)
+--
+-- Name: filemodule_monitor Type: TABLE 
+--
+
+CREATE TABLE filemodule_monitor (
+	id integer DEFAULT '0' NOT NULL,
+	filemodule_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--nextval('filemodule_monitor_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FILEMODULE_MONITOR_ID BEFORE 
+    INSERT 
+    ON filemodule_monitor REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select filemodule_monitor_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 34 (OID 18139210)
+--
+-- Name: forum_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE forum_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 198 (OID 18139228)
+--
+-- Name: forum Type: TABLE 
+--
+
+CREATE TABLE forum (
+	msg_id integer DEFAULT '0' NOT NULL,
+	group_forum_id integer DEFAULT '0' NOT NULL,
+	posted_by integer DEFAULT '0' NOT NULL,
+	subject varchar2(255) DEFAULT '',
+	body varchar2(255) DEFAULT '',
+	sf_date integer DEFAULT '0' NOT NULL,
+	is_followup_to integer DEFAULT '0' NOT NULL,
+	thread_id integer DEFAULT '0' NOT NULL,
+	has_followups integer DEFAULT '0',
+	most_recent_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (msg_id)
+);
+
+--nextval('forum_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FORUM_MSG_ID BEFORE 
+    INSERT 
+    ON forum REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select forum_pk_seq.nextval into :new.msg_id from dual;
+END;
+/
+
+
+--
+-- TOC Entry ID 199 (OID 18139275)
+--
+-- Name: forum_agg_msg_count Type: TABLE 
+--
+
+CREATE TABLE forum_agg_msg_count (
+	group_forum_id integer DEFAULT '0' NOT NULL,
+	count integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (group_forum_id)
+);
+
+--
+-- TOC Entry ID 36 (OID 18139291)
+--
+-- Name: forum_group_list_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE forum_group_list_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 200 (OID 18139309)
+--
+-- Name: forum_group_list Type: TABLE 
+--
+
+CREATE TABLE forum_group_list (
+	group_forum_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	forum_name varchar2(255) DEFAULT '',
+	is_public integer DEFAULT '0' NOT NULL,
+	description varchar2(255),
+	allow_anonymous integer DEFAULT '0' NOT NULL,
+	send_all_posts_to varchar2(255),
+	PRIMARY KEY (group_forum_id)
+);
+
+--nextval('forum_group_list_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FORUM_GROUP_ID BEFORE 
+    INSERT 
+    ON forum_group_list REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select forum_group_list_pk_seq.nextval into :new.group_forum_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 38 (OID 18139348)
+--
+-- Name: forum_monitored_forums_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE forum_monitored_forums_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 201 (OID 18139366)
+--
+-- Name: forum_monitored_forums Type: TABLE 
+--
+
+CREATE TABLE forum_monitored_forums (
+	monitor_id integer DEFAULT '0' NOT NULL,
+	forum_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (monitor_id)
+);
+
+--nextval('forum_monitored_forums_pk_seq'::text)
+CREATE TRIGGER DEFAULT_FORUM_MON_FORUMS_ID BEFORE 
+    INSERT 
+    ON forum_monitored_forums REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select forum_monitored_forums_pk_seq.nextval into :new.monitor_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 40 (OID 18139384)
+--
+-- Name: forum_saved_place_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE forum_saved_place_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 202 (OID 18139402)
+--
+-- Name: forum_saved_place Type: TABLE 
+--
+
+CREATE TABLE forum_saved_place (
+	saved_place_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	forum_id integer DEFAULT '0' NOT NULL,
+	save_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (saved_place_id)
+);
+
+--nextval('forum_saved_place_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FORUM_SAVED_PLACES_ID BEFORE 
+    INSERT 
+    ON forum_saved_place REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select forum_saved_place_pk_seq.nextval into :new.saved_place_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 203 (OID 18139454)
+--
+-- Name: foundry_data Type: TABLE 
+--
+
+CREATE TABLE foundry_data (
+	foundry_id integer DEFAULT '0' NOT NULL,
+	freeform1_html varchar2(255),
+	freeform2_html varchar2(255),
+	sponsor1_html varchar2(255),
+	sponsor2_html varchar2(255),
+	guide_image_id integer DEFAULT '0' NOT NULL,
+	logo_image_id integer DEFAULT '0' NOT NULL,
+	trove_categories varchar2(255),
+	PRIMARY KEY (foundry_id)
+);
+
+--
+-- TOC Entry ID 42 (OID 18139492)
+--
+-- Name: foundry_news_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE foundry_news_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 204 (OID 18139510)
+--
+-- Name: foundry_news Type: TABLE 
+--
+
+CREATE TABLE foundry_news (
+	foundry_news_id integer DEFAULT '0' NOT NULL,
+	foundry_id integer DEFAULT '0' NOT NULL,
+	news_id integer DEFAULT '0' NOT NULL,
+	approve_date integer DEFAULT '0' NOT NULL,
+	is_approved integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (foundry_news_id)
+);
+
+--nextval('foundry_news_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FOUNDRY_NEWS_ID BEFORE 
+    INSERT 
+    ON foundry_news REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select foundry_news_pk_seq.nextval into :new.foundry_news_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 44 (OID 18139532)
+--
+-- Name: foundry_preferred_projec_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE foundry_preferred_proj_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 205 (OID 18139550)
+--
+-- Name: foundry_preferred_projects Type: TABLE 
+--
+
+CREATE TABLE foundry_preferred_projects (
+	foundry_project_id integer DEFAULT '0' NOT NULL,
+	foundry_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	rank integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (foundry_project_id)
+);
+
+--nextval('foundry_preferred_projec_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FOUNDRY_PREF_PROJS_ID BEFORE 
+    INSERT 
+    ON foundry_preferred_projects REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select foundry_preferred_proj_pk_seq.nextval into :new.foundry_project_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 46 (OID 18139570)
+--
+-- Name: foundry_projects_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE foundry_projects_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 206 (OID 18139588)
+--
+-- Name: foundry_projects Type: TABLE 
+--
+
+CREATE TABLE foundry_projects (
+	id integer DEFAULT '0' NOT NULL,
+	foundry_id integer DEFAULT '0' NOT NULL,
+	project_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--nextval('foundry_projects_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FOUNDRY_PROJS_ID BEFORE 
+    INSERT 
+    ON foundry_projects REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select foundry_projects_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 207 (OID 18139606)
+--
+-- Name: frs_dlstats_agg Type: TABLE 
+--
+
+CREATE TABLE frs_dlstats_agg (
+	file_id integer DEFAULT '0' NOT NULL,
+	day integer DEFAULT '0' NOT NULL,
+	downloads_http integer DEFAULT '0' NOT NULL,
+	downloads_ftp integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 208 (OID 18139623)
+--
+-- Name: frs_dlstats_file_agg Type: TABLE 
+--
+
+CREATE TABLE frs_dlstats_file_agg (
+	file_id integer DEFAULT '0' NOT NULL,
+	day integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 209 (OID 18139638)
+--
+-- Name: frs_dlstats_filetotal_agg Type: TABLE 
+--
+
+CREATE TABLE frs_dlstats_filetotal_agg (
+	file_id integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (file_id)
+);
+
+--
+-- TOC Entry ID 210 (OID 18139654)
+--
+-- Name: frs_dlstats_filetotal_agg_old Type: TABLE 
+--
+
+CREATE TABLE frs_dlstats_filetotal_agg_old (
+	file_id integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 211 (OID 18139667)
+--
+-- Name: frs_dlstats_group_agg Type: TABLE 
+--
+
+CREATE TABLE frs_dlstats_group_agg (
+	group_id integer DEFAULT '0' NOT NULL,
+	day integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 212 (OID 18139682)
+--
+-- Name: frs_dlstats_grouptotal_agg Type: TABLE 
+--
+
+CREATE TABLE frs_dlstats_grouptotal_agg (
+	group_id integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 48 (OID 18139695)
+--
+-- Name: frs_file_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE frs_file_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 213 (OID 18139714)
+--
+-- Name: frs_file Type: TABLE 
+--
+
+CREATE TABLE frs_file (
+	file_id integer DEFAULT '0' NOT NULL,
+	filename varchar2(255),
+	release_id integer DEFAULT '0' NOT NULL,
+	type_id integer DEFAULT '0' NOT NULL,
+	processor_id integer DEFAULT '0' NOT NULL,
+	release_time integer DEFAULT '0' NOT NULL,
+	file_size integer DEFAULT '0' NOT NULL,
+	post_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (file_id)
+);
+
+--nextval('frs_file_pk_seq'::text)
+CREATE TRIGGER DEFAULT_FRS_FILE_ID BEFORE 
+    INSERT 
+    ON frs_file REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select frs_file_pk_seq.nextval into :new.file_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 50 (OID 18139756)
+--
+-- Name: frs_filetype_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE frs_filetype_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 214 (OID 18139774)
+--
+-- Name: frs_filetype Type: TABLE 
+--
+
+CREATE TABLE frs_filetype (
+	type_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (type_id)
+);
+
+--nextval('frs_filetype_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FRS_FILETYPE_ID BEFORE 
+    INSERT 
+    ON frs_filetype REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select frs_filetype_pk_seq.nextval into :new.type_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 52 (OID 18139804)
+--
+-- Name: frs_package_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE frs_package_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 215 (OID 18139822)
+--
+-- Name: frs_package Type: TABLE 
+--
+
+CREATE TABLE frs_package (
+	package_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	status_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (package_id)
+);
+
+--nextval('frs_package_pk_seq'::text)
+CREATE TRIGGER DEFAULT_FRS_PACKAGE_ID BEFORE 
+    INSERT 
+    ON frs_package REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select frs_package_pk_seq.nextval into :new.package_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 54 (OID 18139856)
+--
+-- Name: frs_processor_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE frs_processor_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 216 (OID 18139874)
+--
+-- Name: frs_processor Type: TABLE 
+--
+
+CREATE TABLE frs_processor (
+	processor_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (processor_id)
+);
+
+--nextval('frs_processor_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_FRS_PROCESSOR_ID BEFORE 
+    INSERT 
+    ON frs_processor REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select frs_processor_pk_seq.nextval into :new.processor_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 56 (OID 18139904)
+--
+-- Name: frs_release_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE frs_release_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 217 (OID 18139922)
+--
+-- Name: frs_release Type: TABLE 
+--
+
+CREATE TABLE frs_release (
+	release_id integer DEFAULT '0' NOT NULL,
+	package_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	notes varchar2(255),
+	changes varchar2(255),
+	status_id integer DEFAULT '0' NOT NULL,
+	preformatted integer DEFAULT '0' NOT NULL,
+	release_date integer DEFAULT '0' NOT NULL,
+	released_by integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (release_id)
+);
+
+--nextval('frs_release_pk_seq'::text)
+CREATE TRIGGER DEFAULT_FRS_RELEASE_ID BEFORE 
+    INSERT 
+    ON frs_release REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select frs_release_pk_seq.nextval into :new.release_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 58 (OID 18139964)
+--
+-- Name: frs_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE frs_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 218 (OID 18139982)
+--
+-- Name: frs_status Type: TABLE 
+--
+
+CREATE TABLE frs_status (
+	status_id integer DEFAULT '0' NULL,
+	name varchar2(255),
+	PRIMARY KEY (status_id)
+);
+
+--nextval('frs_status_pk_seq'::text)
+CREATE TRIGGER DEFAULT_FRS_STATUS_ID BEFORE 
+    INSERT 
+    ON frs_status REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select frs_status_pk_seq.nextval into :new.status_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 60 (OID 18140012)
+--
+-- Name: group_cvs_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE group_cvs_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 219 (OID 18140030)
+--
+-- Name: group_cvs_history Type: TABLE 
+--
+
+CREATE TABLE group_cvs_history (
+	id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	user_name character varying(80) DEFAULT '',
+	cvs_commits integer DEFAULT '0' NOT NULL,
+	cvs_commits_wk integer DEFAULT '0' NOT NULL,
+	cvs_adds integer DEFAULT '0' NOT NULL,
+	cvs_adds_wk integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--nextval('group_cvs_history_pk_seq'::text)
+CREATE TRIGGER DEFAULT_GROUP_CVS_HISTORY_ID BEFORE 
+    INSERT 
+    ON group_cvs_history REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select group_cvs_history_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 62 (OID 18140056)
+--
+-- Name: group_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE group_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 220 (OID 18140074)
+--
+-- Name: group_history Type: TABLE 
+--
+
+CREATE TABLE group_history (
+	group_history_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	field_name varchar2(255) DEFAULT '',
+	old_value varchar2(255) DEFAULT '',
+	mod_by integer DEFAULT '0' NOT NULL,
+	sf_date integer,
+	PRIMARY KEY (group_history_id)
+);
+
+--nextval('group_history_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_GROUP_HISTORY_ID BEFORE 
+    INSERT 
+    ON group_history REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select group_history_pk_seq.nextval into :new.group_history_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 64 (OID 18140112)
+--
+-- Name: group_type_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE group_type_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 221 (OID 18140130)
+--
+-- Name: group_type Type: TABLE 
+--
+
+CREATE TABLE group_type (
+	type_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (type_id)
+);
+
+--nextval('group_type_pk_seq'::text)
+CREATE TRIGGER DEFAULT_GROUP_TYPE_ID BEFORE 
+    INSERT 
+    ON group_type REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select group_type_pk_seq.nextval into :new.type_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 66 (OID 18140160)
+--
+-- Name: groups_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE groups_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 222 (OID 18140178)
+--
+-- Name: groups Type: TABLE 
+--
+
+CREATE TABLE groups (
+	group_id integer DEFAULT '0' NOT NULL,
+	group_name character varying(40),
+	homepage character varying(128),
+	is_public integer DEFAULT '0' NOT NULL,
+	status character(1) DEFAULT 'A' NOT NULL,
+	unix_group_name character varying(30) DEFAULT '',
+	unix_box character varying(20) DEFAULT 'shell1' NOT NULL,
+	http_domain character varying(80),
+	short_description character varying(255),
+	cvs_box character varying(20) DEFAULT 'cvs1' NOT NULL,
+	license character varying(16),
+	register_purpose varchar2(2000),
+	license_other varchar2(255),
+	register_time integer DEFAULT '0' NOT NULL,
+	use_bugs integer DEFAULT '1' NOT NULL,
+	rand_hash varchar2(255),
+	use_mail integer DEFAULT '1' NOT NULL,
+	use_survey integer DEFAULT '1' NOT NULL,
+	use_patch integer DEFAULT '1' NOT NULL,
+	use_forum integer DEFAULT '1' NOT NULL,
+	use_pm integer DEFAULT '1' NOT NULL,
+	use_cvs integer DEFAULT '1' NOT NULL,
+	use_news integer DEFAULT '1' NOT NULL,
+	use_support integer DEFAULT '1' NOT NULL,
+	new_bug_address varchar2(255) DEFAULT '',
+	new_patch_address varchar2(255) DEFAULT '',
+	new_support_address varchar2(255) DEFAULT '',
+	type integer DEFAULT '1' NOT NULL,
+	use_docman integer DEFAULT '1' NOT NULL,
+	send_all_bugs integer DEFAULT '0' NOT NULL,
+	send_all_patches integer DEFAULT '0' NOT NULL,
+	send_all_support integer DEFAULT '0' NOT NULL,
+	new_task_address varchar2(255) DEFAULT '',
+	send_all_tasks integer DEFAULT '0' NOT NULL,
+	use_bug_depend_box integer DEFAULT '1' NOT NULL,
+	use_pm_depend_box integer DEFAULT '1' NOT NULL,
+	PRIMARY KEY (group_id)
+);
+
+--nextval('groups_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_GROUP_ID BEFORE 
+    INSERT 
+    ON groups REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select groups_pk_seq.nextval into :new.group_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 223 (OID 18140269)
+--
+-- Name: intel_agreement Type: TABLE 
+--
+
+CREATE TABLE intel_agreement (
+	user_id integer DEFAULT '0' NOT NULL,
+	message varchar2(255),
+	is_approved integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (user_id)
+);
+
+--
+-- TOC Entry ID 68 (OID 18140301)
+--
+-- Name: mail_group_list_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE mail_group_list_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 224 (OID 18140319)
+--
+-- Name: mail_group_list Type: TABLE 
+--
+
+CREATE TABLE mail_group_list (
+	group_list_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	list_name varchar2(255),
+	is_public integer DEFAULT '0' NOT NULL,
+	password character varying(16),
+	list_admin integer DEFAULT '0' NOT NULL,
+	status integer DEFAULT '0' NOT NULL,
+	description varchar2(255),
+	PRIMARY KEY (group_list_id)
+);
+
+--nextval('mail_group_list_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_MAIL_GROUP_LIST_ID BEFORE 
+    INSERT 
+    ON mail_group_list REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select mail_group_list_pk_seq.nextval into :new.group_list_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 70 (OID 18140359)
+--
+-- Name: news_bytes_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE news_bytes_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 225 (OID 18140377)
+--
+-- Name: news_bytes Type: TABLE 
+--
+
+CREATE TABLE news_bytes (
+	id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	submitted_by integer DEFAULT '0' NOT NULL,
+	is_approved integer DEFAULT '0' NOT NULL,
+	sf_date integer DEFAULT '0' NOT NULL,
+	forum_id integer DEFAULT '0' NOT NULL,
+	summary varchar2(255),
+	details varchar2(255),
+	PRIMARY KEY (id)
+);
+
+--nextval('news_bytes_pk_seq'::text)
+CREATE TRIGGER DEFAULT_NEWS_BYTES_ID BEFORE 
+    INSERT 
+    ON news_bytes REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select news_bytes_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 72 (OID 18140419)
+--
+-- Name: patch_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE patch_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 226 (OID 18140437)
+--
+-- Name: patch Type: TABLE 
+--
+
+CREATE TABLE patch (
+	patch_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	patch_status_id integer DEFAULT '0' NOT NULL,
+	patch_category_id integer DEFAULT '0' NOT NULL,
+	submitted_by integer DEFAULT '0' NOT NULL,
+	assigned_to integer DEFAULT '0' NOT NULL,
+	open_date integer DEFAULT '0' NOT NULL,
+	summary varchar2(255),
+	code varchar2(255),
+	close_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (patch_id)
+);
+
+--nextval('patch_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_PATCH_ID BEFORE 
+    INSERT 
+    ON patch REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select patch_pk_seq.nextval into :new.patch_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 74 (OID 18140483)
+--
+-- Name: patch_category_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE patch_category_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 227 (OID 18140501)
+--
+-- Name: patch_category Type: TABLE 
+--
+
+CREATE TABLE patch_category (
+	patch_category_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	category_name varchar2(255) DEFAULT '',
+	PRIMARY KEY (patch_category_id)
+);
+
+--nextval('patch_category_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_PATCH_CATEGORY_ID BEFORE 
+    INSERT 
+    ON patch_category REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select patch_category_pk_seq.nextval into :new.patch_category_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 76 (OID 18140534)
+--
+-- Name: patch_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE patch_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 228 (OID 18140552)
+--
+-- Name: patch_history Type: TABLE 
+--
+
+CREATE TABLE patch_history (
+	patch_history_id integer DEFAULT '0' NOT NULL,
+	patch_id integer DEFAULT '0' NOT NULL,
+	field_name varchar2(255) DEFAULT '',
+	old_value varchar2(255) DEFAULT '',
+	mod_by integer DEFAULT '0' NOT NULL,
+	sf_date integer,
+	PRIMARY KEY (patch_history_id)
+);
+
+--nextval('patch_history_pk_seq'::text)
+CREATE TRIGGER DEFAULT_PATCH_HISTORY BEFORE 
+    INSERT 
+    ON patch_history REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select patch_history_pk_seq.nextval into :new.patch_history_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 78 (OID 18140590)
+--
+-- Name: patch_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE patch_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 229 (OID 18140608)
+--
+-- Name: patch_status Type: TABLE 
+--
+
+CREATE TABLE patch_status (
+	patch_status_id integer DEFAULT '0' NOT NULL,
+	status_name varchar2(255),
+	PRIMARY KEY (patch_status_id)
+);
+
+--nextval('patch_status_pk_seq'::text)
+CREATE TRIGGER DEFAULT_PATCH_STATUS BEFORE 
+    INSERT 
+    ON patch_status REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select patch_status_pk_seq.nextval into :new.patch_status_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 80 (OID 18140638)
+--
+-- Name: people_job_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_job_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 230 (OID 18140656)
+--
+-- Name: people_job Type: TABLE 
+--
+
+CREATE TABLE people_job (
+	job_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	created_by integer DEFAULT '0' NOT NULL,
+	title varchar2(255),
+	description varchar2(255),
+	sf_date integer DEFAULT '0' NOT NULL,
+	status_id integer DEFAULT '0' NOT NULL,
+	category_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (job_id)
+);
+
+--nextval('people_job_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_people_job BEFORE 
+    INSERT 
+    ON people_job REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_job_pk_seq.nextval into :new.job_id from dual;
+END;
+/
+
+
+--
+-- TOC Entry ID 82 (OID 18140697)
+--
+-- Name: people_job_category_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_job_category_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 231 (OID 18140715)
+--
+-- Name: people_job_category Type: TABLE 
+--
+
+CREATE TABLE people_job_category (
+	category_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	private_flag integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (category_id)
+);
+
+--nextval('people_job_category_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_people_job_category BEFORE 
+    INSERT 
+    ON people_job_category REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_job_category_pk_seq.nextval into :new.category_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 84 (OID 18140747)
+--
+-- Name: people_job_inventory_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_job_inventory_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 232 (OID 18140765)
+--
+-- Name: people_job_inventory Type: TABLE 
+--
+
+CREATE TABLE people_job_inventory (
+	job_inventory_id integer DEFAULT '0' NOT NULL,
+	job_id integer DEFAULT '0' NOT NULL,
+	skill_id integer DEFAULT '0' NOT NULL,
+	skill_level_id integer DEFAULT '0' NOT NULL,
+	skill_year_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (job_inventory_id)
+);
+
+--nextval('people_job_inventory_pk_seq'::text)
+CREATE TRIGGER DEFAULT_people_job_inventory BEFORE 
+    INSERT 
+    ON people_job_inventory REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_job_inventory_pk_seq.nextval into :new.job_inventory_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 86 (OID 18140787)
+--
+-- Name: people_job_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_job_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 233 (OID 18140805)
+--
+-- Name: people_job_status Type: TABLE 
+--
+
+CREATE TABLE people_job_status (
+	status_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (status_id)
+);
+
+--nextval('people_job_status_pk_seq'::text)
+CREATE TRIGGER DEFAULT_people_job_status BEFORE 
+    INSERT 
+    ON people_job_status REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_job_status_pk_seq.nextval into :new.status_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 88 (OID 18140835)
+--
+-- Name: people_skill_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_skill_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 234 (OID 18140853)
+--
+-- Name: people_skill Type: TABLE 
+--
+
+CREATE TABLE people_skill (
+	skill_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (skill_id)
+);
+
+--nextval('people_skill_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_people_skill BEFORE 
+    INSERT 
+    ON people_skill REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_skill_pk_seq.nextval into :new.skill_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 90 (OID 18140884)
+--
+-- Name: people_skill_inventory_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_skill_inventory_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 235 (OID 18140902)
+--
+-- Name: people_skill_inventory Type: TABLE 
+--
+
+CREATE TABLE people_skill_inventory (
+	skill_inventory_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	skill_id integer DEFAULT '0' NOT NULL,
+	skill_level_id integer DEFAULT '0' NOT NULL,
+	skill_year_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (skill_inventory_id)
+);
+
+--nextval('people_skill_inventory_pk_seq'::text)
+CREATE TRIGGER DEFAULT_people_inventory BEFORE 
+    INSERT 
+    ON people_skill_inventory REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_skill_inventory_pk_seq.nextval into :new.skill_inventory_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 92 (OID 18140924)
+--
+-- Name: people_skill_level_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_skill_level_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 236 (OID 18140942)
+--
+-- Name: people_skill_level Type: TABLE 
+--
+
+CREATE TABLE people_skill_level (
+	skill_level_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (skill_level_id)
+);
+
+--nextval('people_skill_level_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_people_skill_level BEFORE 
+    INSERT 
+    ON people_skill_level REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_skill_level_pk_seq.nextval into :new.skill_level_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 94 (OID 18140972)
+--
+-- Name: people_skill_year_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE people_skill_year_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 237 (OID 18140990)
+--
+-- Name: people_skill_year Type: TABLE 
+--
+
+CREATE TABLE people_skill_year (
+	skill_year_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	PRIMARY KEY (skill_year_id)
+);
+
+--nextval('people_skill_year_pk_seq'::text)
+CREATE TRIGGER DEFAULT_people_skill_year BEFORE 
+    INSERT 
+    ON people_skill_year REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select people_skill_year_pk_seq.nextval into :new.skill_year_id from dual;
+END;
+/
+
+
+--
+-- TOC Entry ID 96 (OID 18141020)
+--
+-- Name: project_assigned_to_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_assigned_to_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 238 (OID 18141038)
+--
+-- Name: project_assigned_to Type: TABLE 
+--
+
+CREATE TABLE project_assigned_to (
+	project_assigned_id integer DEFAULT '0' NOT NULL,
+	project_task_id integer DEFAULT '0' NOT NULL,
+	assigned_to_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_assigned_id)
+);
+
+--nextval('project_assigned_to_pk_seq'::text)
+CREATE TRIGGER DEFAULT_project_assigned_to BEFORE 
+    INSERT 
+    ON project_assigned_to REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_assigned_to_pk_seq.nextval into :new.project_assigned_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 239 (OID 18141056)
+--
+-- Name: project_counts_tmp Type: TABLE 
+--
+
+CREATE TABLE project_counts_tmp (
+	group_id integer,
+	type varchar2(255),
+	count double precision
+);
+
+--
+-- TOC Entry ID 240 (OID 18141083)
+--
+-- Name: project_counts_weekly_tmp Type: TABLE 
+--
+
+CREATE TABLE project_counts_weekly_tmp (
+	group_id integer,
+	type varchar2(255),
+	count double precision
+);
+
+--
+-- TOC Entry ID 98 (OID 18141110)
+--
+-- Name: project_dependencies_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_dependencies_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 241 (OID 18141128)
+--
+-- Name: project_dependencies Type: TABLE 
+--
+
+CREATE TABLE project_dependencies (
+	project_depend_id integer DEFAULT '0' NOT NULL,
+	project_task_id integer DEFAULT '0' NOT NULL,
+	is_dependent_on_task_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_depend_id)
+);
+
+--nextval('project_dependencies_pk_seq'::text)
+CREATE TRIGGER DEFAULT_project_dependencies BEFORE 
+    INSERT 
+    ON project_dependencies REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_dependencies_pk_seq.nextval into :new.project_depend_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 100 (OID 18141146)
+--
+-- Name: project_group_list_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_group_list_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 242 (OID 18141164)
+--
+-- Name: project_group_list Type: TABLE 
+--
+
+CREATE TABLE project_group_list (
+	group_project_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	project_name varchar2(255) DEFAULT '',
+	is_public integer DEFAULT '0' NOT NULL,
+	description varchar2(255),
+	PRIMARY KEY (group_project_id)
+);
+
+--nextval('project_group_list_pk_seq'::text)
+CREATE TRIGGER DEFAULT_project_group_list BEFORE 
+    INSERT 
+    ON project_group_list REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_group_list_pk_seq.nextval into :new.group_project_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 102 (OID 18141200)
+--
+-- Name: project_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 243 (OID 18141218)
+--
+-- Name: project_history Type: TABLE 
+--
+
+CREATE TABLE project_history (
+	project_history_id integer DEFAULT '0' NOT NULL,
+	project_task_id integer DEFAULT '0' NOT NULL,
+	field_name varchar2(255) DEFAULT '',
+	old_value varchar2(255) DEFAULT '',
+	mod_by integer DEFAULT '0' NOT NULL,
+	sf_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_history_id)
+);
+
+--nextval('project_history_pk_seq'::text)
+CREATE TRIGGER DEFAULT_project_history BEFORE 
+    INSERT 
+    ON project_history REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_history_pk_seq.nextval into :new.project_history_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 104 (OID 18141257)
+--
+-- Name: project_metric_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_metric_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 244 (OID 18141275)
+--
+-- Name: project_metric Type: TABLE 
+--
+
+CREATE TABLE project_metric (
+	ranking integer DEFAULT '0' NOT NULL,
+	percentile double precision,
+	group_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+--nextval('project_metric_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_project_metric BEFORE 
+    INSERT 
+    ON project_metric REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_metric_pk_seq.nextval into :new.ranking from dual;
+END;
+/
+
+--
+-- TOC Entry ID 106 (OID 18141292)
+--
+-- Name: project_metric_tmp1_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_metric_tmp1_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 245 (OID 18141310)
+--
+-- Name: project_metric_tmp1 Type: TABLE 
+--
+
+CREATE TABLE project_metric_tmp1 (
+	ranking integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	value double precision,
+	PRIMARY KEY (ranking)
+);
+
+--nextval('project_metric_tmp1_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_project_metric_tmp1 BEFORE 
+    INSERT 
+    ON project_metric_tmp1 REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_metric_tmp1_pk_seq.nextval into :new.ranking from dual;
+END;
+/
+
+--
+-- TOC Entry ID 108 (OID 18141327)
+--
+-- Name: project_metric_weekly_tm_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_metric_week_tm_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 246 (OID 18141346)
+--
+-- Name: project_metric_weekly_tmp1 Type: TABLE 
+--
+
+CREATE TABLE project_metric_weekly_tmp1 (
+	ranking integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	value double precision,
+	PRIMARY KEY (ranking)
+);
+
+--nextval('project_metric_week_tm_pk_seq'::text)
+CREATE TRIGGER DEFAULT_proj_metric_week_tmp1 BEFORE 
+    INSERT 
+    ON project_metric_weekly_tmp1 REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_metric_week_tm_pk_seq.nextval into :new.ranking from dual;
+END;
+/
+
+--
+-- TOC Entry ID 110 (OID 18141363)
+--
+-- Name: project_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 247 (OID 18141381)
+--
+-- Name: project_status Type: TABLE 
+--
+
+CREATE TABLE project_status (
+	status_id integer DEFAULT '0' NOT NULL,
+	status_name varchar2(255) DEFAULT '',
+	PRIMARY KEY (status_id)
+);
+
+--nextval('project_status_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_project_status BEFORE 
+    INSERT 
+    ON project_status REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_status_pk_seq.nextval into :new.status_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 112 (OID 18141412)
+--
+-- Name: project_task_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_task_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 248 (OID 18141430)
+--
+-- Name: project_task Type: TABLE 
+--
+
+CREATE TABLE project_task (
+	project_task_id integer DEFAULT '0' NOT NULL,
+	group_project_id integer DEFAULT '0' NOT NULL,
+	summary varchar2(255) DEFAULT '',
+	details varchar2(255) DEFAULT '',
+	percent_complete integer DEFAULT '0' NOT NULL,
+	priority integer DEFAULT '0' NOT NULL,
+	hours double precision DEFAULT '0.00' NOT NULL,
+	start_date integer DEFAULT '0' NOT NULL,
+	end_date integer DEFAULT '0' NOT NULL,
+	created_by integer DEFAULT '0' NOT NULL,
+	status_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_task_id)
+);
+
+--nextval('project_task_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_project_task BEFORE 
+    INSERT 
+    ON project_task REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_task_pk_seq.nextval into :new.project_task_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 114 (OID 18141479)
+--
+-- Name: project_weekly_metric_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE project_weekly_metric_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 249 (OID 18141497)
+--
+-- Name: project_weekly_metric Type: TABLE 
+--
+
+CREATE TABLE project_weekly_metric (
+	ranking integer DEFAULT '0' NOT NULL,
+	percentile double precision,
+	group_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+--nextval('project_weekly_metric_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_project_weekly_metric BEFORE 
+    INSERT 
+    ON project_weekly_metric REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select project_weekly_metric_pk_seq.nextval into :new.ranking from dual;
+END;
+/
+
+--
+-- TOC Entry ID 250 (OID 18141514)
+--
+-- Name: sf_session Type: TABLE 
+--
+
+CREATE TABLE sf_session (
+	user_id integer DEFAULT '0' NOT NULL,
+	session_hash character(32) DEFAULT '',
+	ip_addr character(15) DEFAULT '',
+	time integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (session_hash)
+);
+
+--
+-- TOC Entry ID 116 (OID 18141534)
+--
+-- Name: snippet_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE snippet_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 251 (OID 18141552)
+--
+-- Name: snippet Type: TABLE 
+--
+
+CREATE TABLE snippet (
+	snippet_id integer DEFAULT '0' NOT NULL,
+	created_by integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	description varchar2(255),
+	type integer DEFAULT '0' NOT NULL,
+	language integer DEFAULT '0' NOT NULL,
+	license varchar2(255) DEFAULT '',
+	category integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_id)
+);
+
+--nextval('snippet_pk_seq'::text)
+CREATE TRIGGER DEFAULT_snippet BEFORE 
+    INSERT 
+    ON snippet REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select snippet_pk_seq.nextval into :new.snippet_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 118 (OID 18141593)
+--
+-- Name: snippet_package_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE snippet_package_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 252 (OID 18141611)
+--
+-- Name: snippet_package Type: TABLE 
+--
+
+CREATE TABLE snippet_package (
+	snippet_package_id integer DEFAULT '0' NOT NULL,
+	created_by integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	description varchar2(255),
+	category integer DEFAULT '0' NOT NULL,
+	language integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_package_id)
+);
+
+--nextval('snippet_package_pk_seq'::text)
+CREATE TRIGGER DEFAULT_snippet_package BEFORE 
+    INSERT 
+    ON snippet_package REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select snippet_package_pk_seq.nextval into :new.snippet_package_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 120 (OID 18141648)
+--
+-- Name: snippet_package_item_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE snippet_package_item_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 253 (OID 18141666)
+--
+-- Name: snippet_package_item Type: TABLE 
+--
+
+CREATE TABLE snippet_package_item (
+	snippet_package_item_id integer DEFAULT '0' NOT NULL,
+	snippet_package_version_id integer DEFAULT '0' NOT NULL,
+	snippet_version_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_package_item_id)
+);
+
+--nextval('snippet_package_item_pk_seq'::text)
+CREATE TRIGGER DEFAULT_snippet_package_item BEFORE 
+    INSERT 
+    ON snippet_package_item REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select snippet_package_item_pk_seq.nextval into :new.snippet_package_item_id from dual;
+END;
+/
+
+
+--
+-- TOC Entry ID 122 (OID 18141684)
+--
+-- Name: snippet_package_version_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE snippet_package_version_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 254 (OID 18141702)
+--
+-- Name: snippet_package_version Type: TABLE 
+--
+
+CREATE TABLE snippet_package_version (
+	snippet_package_version_id integer DEFAULT '0' NOT NULL,
+	snippet_package_id integer DEFAULT '0' NOT NULL,
+	changes varchar2(255),
+	version varchar2(255),
+	submitted_by integer DEFAULT '0' NOT NULL,
+	sf_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_package_version_id)
+);
+
+--nextval('snippet_package_version_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_snippet_package_ver BEFORE 
+    INSERT 
+    ON snippet_package_version REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select snippet_package_version_pk_seq.nextval into :new.snippet_package_version_id from dual;
+END;
+/
+
+
+--
+-- TOC Entry ID 124 (OID 18141739)
+--
+-- Name: snippet_version_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE snippet_version_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 255 (OID 18141757)
+--
+-- Name: snippet_version Type: TABLE 
+--
+
+CREATE TABLE snippet_version (
+	snippet_version_id integer DEFAULT '0' NOT NULL,
+	snippet_id integer DEFAULT '0' NOT NULL,
+	changes varchar2(255),
+	version varchar2(255),
+	submitted_by integer DEFAULT '0' NOT NULL,
+	sf_date integer DEFAULT '0' NOT NULL,
+	code varchar2(255),
+	PRIMARY KEY (snippet_version_id)
+);
+
+--nextval('snippet_version_pk_seq'::text) 
+CREATE TRIGGER DEFAULT_snippet_version BEFORE 
+    INSERT 
+    ON snippet_version REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select snippet_version_pk_seq.nextval into :new.snippet_version_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 256 (OID 18141795)
+--
+-- Name: stats_agg_logo_by_day Type: TABLE 
+--
+
+CREATE TABLE stats_agg_logo_by_day (
+	day integer,
+	count integer
+);
+
+--
+-- TOC Entry ID 257 (OID 18141806)
+--
+-- Name: stats_agg_logo_by_group Type: TABLE 
+--
+
+CREATE TABLE stats_agg_logo_by_group (
+	day integer,
+	group_id integer,
+	count integer
+);
+
+--
+-- TOC Entry ID 258 (OID 18141818)
+--
+-- Name: stats_agg_pages_by_browser Type: TABLE 
+--
+
+CREATE TABLE stats_agg_pages_by_browser (
+	browser character varying(8),
+	count integer
+);
+
+--
+-- TOC Entry ID 259 (OID 18141829)
+--
+-- Name: stats_agg_pages_by_day Type: TABLE 
+--
+
+CREATE TABLE stats_agg_pages_by_day (
+	day integer DEFAULT '0' NOT NULL,
+	count integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 260 (OID 18141842)
+--
+-- Name: stats_agg_pages_by_day_old Type: TABLE 
+--
+
+CREATE TABLE stats_agg_pages_by_day_old (
+	day integer,
+	count integer
+);
+
+--
+-- TOC Entry ID 261 (OID 18141853)
+--
+-- Name: stats_agg_site_by_day Type: TABLE 
+--
+
+CREATE TABLE stats_agg_site_by_day (
+	day integer DEFAULT '0' NOT NULL,
+	count integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 262 (OID 18141866)
+--
+-- Name: stats_agg_site_by_group Type: TABLE 
+--
+
+CREATE TABLE stats_agg_site_by_group (
+	day integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	count integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 263 (OID 18141881)
+--
+-- Name: stats_agr_filerelease Type: TABLE 
+--
+
+CREATE TABLE stats_agr_filerelease (
+	filerelease_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 264 (OID 18141896)
+--
+-- Name: stats_agr_project Type: TABLE 
+--
+
+CREATE TABLE stats_agr_project (
+	group_id integer DEFAULT '0' NOT NULL,
+	group_ranking integer DEFAULT '0' NOT NULL,
+	group_metric double precision DEFAULT '0.00000' NOT NULL,
+	developers integer DEFAULT '0' NOT NULL,
+	file_releases integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL,
+	site_views integer DEFAULT '0' NOT NULL,
+	logo_views integer DEFAULT '0' NOT NULL,
+	msg_posted integer DEFAULT '0' NOT NULL,
+	msg_uniq_auth integer DEFAULT '0' NOT NULL,
+	bugs_opened integer DEFAULT '0' NOT NULL,
+	bugs_closed integer DEFAULT '0' NOT NULL,
+	support_opened integer DEFAULT '0' NOT NULL,
+	support_closed integer DEFAULT '0' NOT NULL,
+	patches_opened integer DEFAULT '0' NOT NULL,
+	patches_closed integer DEFAULT '0' NOT NULL,
+	tasks_opened integer DEFAULT '0' NOT NULL,
+	tasks_closed integer DEFAULT '0' NOT NULL,
+	help_requests integer DEFAULT '0' NOT NULL,
+	cvs_checkouts integer DEFAULT '0' NOT NULL,
+	cvs_commits integer DEFAULT '0' NOT NULL,
+	cvs_adds integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 265 (OID 18141949)
+--
+-- Name: stats_ftp_downloads Type: TABLE 
+--
+
+CREATE TABLE stats_ftp_downloads (
+	day integer DEFAULT '0' NOT NULL,
+	filerelease_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 266 (OID 18141966)
+--
+-- Name: stats_http_downloads Type: TABLE 
+--
+
+CREATE TABLE stats_http_downloads (
+	day integer DEFAULT '0' NOT NULL,
+	filerelease_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 267 (OID 18141983)
+--
+-- Name: stats_project Type: TABLE 
+--
+
+CREATE TABLE stats_project (
+	month integer DEFAULT '0' NOT NULL,
+	week integer DEFAULT '0' NOT NULL,
+	day integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	group_ranking integer DEFAULT '0' NOT NULL,
+	group_metric double precision DEFAULT '0.00000' NOT NULL,
+	developers integer DEFAULT '0' NOT NULL,
+	file_releases integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL,
+	site_views integer DEFAULT '0' NOT NULL,
+	subdomain_views integer DEFAULT '0' NOT NULL,
+	msg_posted integer DEFAULT '0' NOT NULL,
+	msg_uniq_auth integer DEFAULT '0' NOT NULL,
+	bugs_opened integer DEFAULT '0' NOT NULL,
+	bugs_closed integer DEFAULT '0' NOT NULL,
+	support_opened integer DEFAULT '0' NOT NULL,
+	support_closed integer DEFAULT '0' NOT NULL,
+	patches_opened integer DEFAULT '0' NOT NULL,
+	patches_closed integer DEFAULT '0' NOT NULL,
+	tasks_opened integer DEFAULT '0' NOT NULL,
+	tasks_closed integer DEFAULT '0' NOT NULL,
+	help_requests integer DEFAULT '0' NOT NULL,
+	cvs_checkouts integer DEFAULT '0' NOT NULL,
+	cvs_commits integer DEFAULT '0' NOT NULL,
+	cvs_adds integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 268 (OID 18142042)
+--
+-- Name: stats_project_tmp Type: TABLE 
+--
+
+CREATE TABLE stats_project_tmp (
+	month integer DEFAULT '0' NOT NULL,
+	week integer DEFAULT '0' NOT NULL,
+	day integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	group_ranking integer DEFAULT '0' NOT NULL,
+	group_metric double precision DEFAULT '0.00000' NOT NULL,
+	developers integer DEFAULT '0' NOT NULL,
+	file_releases integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL,
+	site_views integer DEFAULT '0' NOT NULL,
+	subdomain_views integer DEFAULT '0' NOT NULL,
+	msg_posted integer DEFAULT '0' NOT NULL,
+	msg_uniq_auth integer DEFAULT '0' NOT NULL,
+	bugs_opened integer DEFAULT '0' NOT NULL,
+	bugs_closed integer DEFAULT '0' NOT NULL,
+	support_opened integer DEFAULT '0' NOT NULL,
+	support_closed integer DEFAULT '0' NOT NULL,
+	patches_opened integer DEFAULT '0' NOT NULL,
+	patches_closed integer DEFAULT '0' NOT NULL,
+	tasks_opened integer DEFAULT '0' NOT NULL,
+	tasks_closed integer DEFAULT '0' NOT NULL,
+	help_requests integer DEFAULT '0' NOT NULL,
+	cvs_checkouts integer DEFAULT '0' NOT NULL,
+	cvs_commits integer DEFAULT '0' NOT NULL,
+	cvs_adds integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 269 (OID 18142101)
+--
+-- Name: stats_site Type: TABLE 
+--
+
+CREATE TABLE stats_site (
+	month integer DEFAULT '0' NOT NULL,
+	week integer DEFAULT '0' NOT NULL,
+	day integer DEFAULT '0' NOT NULL,
+	site_views integer DEFAULT '0' NOT NULL,
+	subdomain_views integer DEFAULT '0' NOT NULL,
+	downloads integer DEFAULT '0' NOT NULL,
+	uniq_users integer DEFAULT '0' NOT NULL,
+	sessions integer DEFAULT '0' NOT NULL,
+	total_users integer DEFAULT '0' NOT NULL,
+	new_users integer DEFAULT '0' NOT NULL,
+	new_projects integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 126 (OID 18142132)
+--
+-- Name: support_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE support_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 270 (OID 18142150)
+--
+-- Name: support Type: TABLE 
+--
+
+CREATE TABLE support (
+	support_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	support_status_id integer DEFAULT '0' NOT NULL,
+	support_category_id integer DEFAULT '0' NOT NULL,
+	priority integer DEFAULT '0' NOT NULL,
+	submitted_by integer DEFAULT '0' NOT NULL,
+	assigned_to integer DEFAULT '0' NOT NULL,
+	open_date integer DEFAULT '0' NOT NULL,
+	summary varchar2(255),
+	close_date integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (support_id)
+);
+
+--nextval('support_pk_seq'::text)
+CREATE TRIGGER DEFAULT_support BEFORE 
+    INSERT 
+    ON support REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select support_pk_seq.nextval into :new.support_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 128 (OID 18142196)
+--
+-- Name: support_canned_responses_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE support_canned_resp_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 271 (OID 18142214)
+--
+-- Name: support_canned_responses Type: TABLE 
+--
+
+CREATE TABLE support_canned_responses (
+	support_canned_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	title varchar2(255),
+	body varchar2(255),
+	PRIMARY KEY (support_canned_id)
+);
+
+CREATE TRIGGER DEFAULT_support_canned_resp BEFORE 
+    INSERT 
+    ON support_canned_responses REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select support_canned_resp_pk_seq.nextval into :new.support_canned_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 130 (OID 18142247)
+--
+-- Name: support_category_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE support_category_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 272 (OID 18142265)
+--
+-- Name: support_category Type: TABLE 
+--
+
+CREATE TABLE support_category (
+	support_category_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	category_name varchar2(255) DEFAULT '',
+	PRIMARY KEY (support_category_id)
+);
+
+CREATE TRIGGER DEFAULT_support_category BEFORE 
+    INSERT 
+    ON support_category REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select support_category_pk_seq.nextval into :new.support_category_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 132 (OID 18142298)
+--
+-- Name: support_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE support_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 273 (OID 18142316)
+--
+-- Name: support_history Type: TABLE 
+--
+
+CREATE TABLE support_history (
+	support_history_id integer DEFAULT '0' NOT NULL,
+	support_id integer DEFAULT '0' NOT NULL,
+	field_name varchar2(255) DEFAULT '',
+	old_value varchar2(255) DEFAULT '',
+	mod_by integer DEFAULT '0' NOT NULL,
+	sf_date integer,
+	PRIMARY KEY (support_history_id)
+);
+
+CREATE TRIGGER DEFAULT_support_history BEFORE 
+    INSERT 
+    ON support_history REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select support_history_pk_seq.nextval into :new.support_history_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 134 (OID 18142354)
+--
+-- Name: support_messages_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE support_messages_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 274 (OID 18142372)
+--
+-- Name: support_messages Type: TABLE 
+--
+
+CREATE TABLE support_messages (
+	support_message_id integer DEFAULT '0' NOT NULL,
+	support_id integer DEFAULT '0' NOT NULL,
+	from_email varchar2(255),
+	sf_date integer DEFAULT '0' NOT NULL,
+	body varchar2(255),
+	PRIMARY KEY (support_message_id)
+);
+
+CREATE TRIGGER DEFAULT_support_messages BEFORE 
+    INSERT 
+    ON support_messages REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select support_messages_pk_seq.nextval into :new.support_message_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 136 (OID 18142407)
+--
+-- Name: support_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE support_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 275 (OID 18142425)
+--
+-- Name: support_status Type: TABLE 
+--
+
+CREATE TABLE support_status (
+	support_status_id integer DEFAULT '0' NOT NULL,
+	status_name varchar2(255),
+	PRIMARY KEY (support_status_id)
+);
+
+CREATE TRIGGER DEFAULT_support_status BEFORE 
+    INSERT 
+    ON support_status REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select support_status_pk_seq.nextval into :new.support_status_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 138 (OID 18142455)
+--
+-- Name: supported_languages_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE supported_languages_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 276 (OID 18142473)
+--
+-- Name: supported_languages Type: TABLE 
+--
+
+CREATE TABLE supported_languages (
+	language_id integer DEFAULT '0' NOT NULL,
+	name varchar2(255),
+	filename varchar2(255),
+	classname varchar2(255),
+	language_code character(2),
+	PRIMARY KEY (language_id)
+);
+
+CREATE TRIGGER DEFAULT_supported_languages BEFORE 
+    INSERT 
+    ON supported_languages REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select supported_languages_pk_seq.nextval into :new.language_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 140 (OID 18142506)
+--
+-- Name: survey_question_types_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE survey_question_types_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 277 (OID 18142524)
+--
+-- Name: survey_question_types Type: TABLE 
+--
+
+CREATE TABLE survey_question_types (
+	id integer DEFAULT '0' NOT NULL,
+	type varchar2(255) DEFAULT '',
+	PRIMARY KEY (id)
+);
+
+CREATE TRIGGER DEFAULT_survey_question_types BEFORE 
+    INSERT 
+    ON survey_question_types REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select survey_question_types_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 142 (OID 18142555)
+--
+-- Name: survey_questions_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE survey_questions_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 278 (OID 18142573)
+--
+-- Name: survey_questions Type: TABLE 
+--
+
+CREATE TABLE survey_questions (
+	question_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	question varchar2(255) DEFAULT '',
+	question_type integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (question_id)
+);
+
+CREATE TRIGGER DEFAULT_survey_question BEFORE 
+    INSERT 
+    ON survey_questions REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select survey_questions_pk_seq.nextval into :new.question_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 279 (OID 18142608)
+--
+-- Name: survey_rating_aggregate Type: TABLE 
+--
+
+CREATE TABLE survey_rating_aggregate (
+	type integer DEFAULT '0' NOT NULL,
+	id integer DEFAULT '0' NOT NULL,
+	response double precision DEFAULT '0' NOT NULL,
+	count integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 280 (OID 18142625)
+--
+-- Name: survey_rating_response Type: TABLE 
+--
+
+CREATE TABLE survey_rating_response (
+	user_id integer DEFAULT '0' NOT NULL,
+	type integer DEFAULT '0' NOT NULL,
+	id integer DEFAULT '0' NOT NULL,
+	response integer DEFAULT '0' NOT NULL,
+	sf_date integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 281 (OID 18142644)
+--
+-- Name: survey_responses Type: TABLE 
+--
+
+CREATE TABLE survey_responses (
+	user_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	survey_id integer DEFAULT '0' NOT NULL,
+	question_id integer DEFAULT '0' NOT NULL,
+	response varchar2(255) DEFAULT '',
+	sf_date integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 144 (OID 18142680)
+--
+-- Name: surveys_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE surveys_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 282 (OID 18142698)
+--
+-- Name: surveys Type: TABLE 
+--
+
+CREATE TABLE surveys (
+	survey_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	survey_title varchar2(255) DEFAULT '',
+	survey_questions varchar2(255) DEFAULT '',
+	is_active integer DEFAULT '1' NOT NULL,
+	PRIMARY KEY (survey_id)
+);
+
+
+CREATE TRIGGER DEFAULT_surveys BEFORE 
+    INSERT 
+    ON surveys REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select surveys_pk_seq.nextval into :new.survey_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 146 (OID 18142735)
+--
+-- Name: system_history_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE system_history_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 148 (OID 18142787)
+--
+-- Name: system_machines_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE system_machines_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 150 (OID 18142836)
+--
+-- Name: system_news_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE system_news_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 152 (OID 18142895)
+--
+-- Name: system_services_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE system_services_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 154 (OID 18142944)
+--
+-- Name: system_status_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE system_status_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 283 (OID 18142992)
+--
+-- Name: theme_prefs Type: TABLE 
+--
+
+CREATE TABLE theme_prefs (
+	user_id integer DEFAULT '0' NOT NULL,
+	user_theme integer DEFAULT '0' NOT NULL,
+	body_font character(80) DEFAULT '',
+	body_size character(5) DEFAULT '',
+	titlebar_font character(80) DEFAULT '',
+	titlebar_size character(5) DEFAULT '',
+	color_titlebar_back character(7) DEFAULT '',
+	color_ltback1 character(7) DEFAULT '',
+	PRIMARY KEY (user_id)
+);
+
+--
+-- TOC Entry ID 156 (OID 18143020)
+--
+-- Name: themes_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE themes_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 284 (OID 18143038)
+--
+-- Name: themes Type: TABLE 
+--
+
+CREATE TABLE themes (
+	theme_id integer DEFAULT '0' NOT NULL,
+	dirname character varying(80),
+	fullname character varying(80),
+	PRIMARY KEY (theme_id)
+);
+
+CREATE TRIGGER DEFAULT_themes BEFORE 
+    INSERT 
+    ON themes REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select themes_pk_seq.nextval into :new.theme_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 285 (OID 18143054)
+--
+-- Name: tmp_projs_releases_tmp Type: TABLE 
+--
+
+CREATE TABLE tmp_projs_releases_tmp (
+	year integer DEFAULT '0' NOT NULL,
+	month integer DEFAULT '0' NOT NULL,
+	total_proj integer DEFAULT '0' NOT NULL,
+	total_releases integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 286 (OID 18143071)
+--
+-- Name: top_group Type: TABLE 
+--
+
+CREATE TABLE top_group (
+	group_id integer DEFAULT '0' NOT NULL,
+	group_name character varying(40),
+	downloads_all integer DEFAULT '0' NOT NULL,
+	rank_downloads_all integer DEFAULT '0' NOT NULL,
+	rank_downloads_all_old integer DEFAULT '0' NOT NULL,
+	downloads_week integer DEFAULT '0' NOT NULL,
+	rank_downloads_week integer DEFAULT '0' NOT NULL,
+	rank_downloads_week_old integer DEFAULT '0' NOT NULL,
+	userrank integer DEFAULT '0' NOT NULL,
+	rank_userrank integer DEFAULT '0' NOT NULL,
+	rank_userrank_old integer DEFAULT '0' NOT NULL,
+	forumposts_week integer DEFAULT '0' NOT NULL,
+	rank_forumposts_week integer DEFAULT '0' NOT NULL,
+	rank_forumposts_week_old integer DEFAULT '0' NOT NULL,
+	pageviews_proj integer DEFAULT '0' NOT NULL,
+	rank_pageviews_proj integer DEFAULT '0' NOT NULL,
+	rank_pageviews_proj_old integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 158 (OID 18143113)
+--
+-- Name: trove_cat_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE trove_cat_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 287 (OID 18143131)
+--
+-- Name: trove_cat Type: TABLE 
+--
+
+CREATE TABLE trove_cat (
+	trove_cat_id integer DEFAULT '0' NOT NULL,
+	version integer DEFAULT '0' NOT NULL,
+	parent integer DEFAULT '0' NOT NULL,
+	root_parent integer DEFAULT '0' NOT NULL,
+	shortname character varying(80),
+	fullname character varying(80),
+	description character varying(255),
+	count_subcat integer DEFAULT '0' NOT NULL,
+	count_subproj integer DEFAULT '0' NOT NULL,
+	fullpath varchar2(255) DEFAULT '',
+	fullpath_ids varchar2(255),
+	PRIMARY KEY (trove_cat_id)
+);
+
+CREATE TRIGGER DEFAULT_trove_cat BEFORE 
+    INSERT 
+    ON trove_cat REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select trove_cat_pk_seq.nextval into :new.trove_cat_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 160 (OID 18143176)
+--
+-- Name: trove_group_link_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE trove_group_link_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 288 (OID 18143194)
+--
+-- Name: trove_group_link Type: TABLE 
+--
+
+CREATE TABLE trove_group_link (
+	trove_group_id integer DEFAULT '0' NOT NULL,
+	trove_cat_id integer DEFAULT '0' NOT NULL,
+	trove_cat_version integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	trove_cat_root integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (trove_group_id)
+);
+
+CREATE TRIGGER DEFAULT_trove_group_link BEFORE 
+    INSERT 
+    ON trove_group_link REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select trove_group_link_pk_seq.nextval into :new.trove_group_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 162 (OID 18143216)
+--
+-- Name: trove_treesums_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE trove_treesums_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 289 (OID 18143234)
+--
+-- Name: trove_treesums Type: TABLE 
+--
+
+CREATE TABLE trove_treesums (
+	trove_treesums_id integer DEFAULT '0' NOT NULL,
+	trove_cat_id integer DEFAULT '0' NOT NULL,
+	limit_1 integer DEFAULT '0' NOT NULL,
+	subprojects integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (trove_treesums_id)
+);
+
+CREATE TRIGGER DEFAULT_trove_treesums BEFORE 
+    INSERT 
+    ON trove_treesums REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select trove_treesums_pk_seq.nextval into :new.trove_treesums_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 164 (OID 18143286)
+--
+-- Name: user_bookmarks_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE user_bookmarks_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 290 (OID 18143304)
+--
+-- Name: user_bookmarks Type: TABLE 
+--
+
+CREATE TABLE user_bookmarks (
+	bookmark_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	bookmark_url varchar2(255),
+	bookmark_title varchar2(255),
+	PRIMARY KEY (bookmark_id)
+);
+
+CREATE TRIGGER DEFAULT_user_bookmarks BEFORE 
+    INSERT 
+    ON user_bookmarks REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select user_bookmarks_pk_seq.nextval into :new.bookmark_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 166 (OID 18143337)
+--
+-- Name: user_diary_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE user_diary_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 291 (OID 18143355)
+--
+-- Name: user_diary Type: TABLE 
+--
+
+CREATE TABLE user_diary (
+	id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	date_posted integer DEFAULT '0' NOT NULL,
+	summary varchar2(255),
+	details varchar2(255),
+	is_public integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+CREATE TRIGGER DEFAULT_user_diary BEFORE 
+    INSERT 
+    ON user_diary REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select user_diary_pk_seq.nextval into :new.id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 168 (OID 18143392)
+--
+-- Name: user_diary_monitor_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE user_diary_monitor_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 292 (OID 18143410)
+--
+-- Name: user_diary_monitor Type: TABLE 
+--
+
+CREATE TABLE user_diary_monitor (
+	monitor_id integer DEFAULT '0' NOT NULL,
+	monitored_user integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (monitor_id)
+);
+
+CREATE TRIGGER DEFAULT_user_diary_monitor BEFORE 
+    INSERT 
+    ON user_diary_monitor REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select user_diary_monitor_pk_seq.nextval into :new.monitor_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 170 (OID 18143428)
+--
+-- Name: user_group_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE user_group_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 293 (OID 18143446)
+--
+-- Name: user_group Type: TABLE 
+--
+
+CREATE TABLE user_group (
+	user_group_id integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	admin_flags character(16) DEFAULT '',
+	bug_flags integer DEFAULT '0' NOT NULL,
+	forum_flags integer DEFAULT '0' NOT NULL,
+	project_flags integer DEFAULT '2' NOT NULL,
+	patch_flags integer DEFAULT '1' NOT NULL,
+	support_flags integer DEFAULT '1' NOT NULL,
+	doc_flags integer DEFAULT '0' NOT NULL,
+	cvs_flags integer DEFAULT '1' NOT NULL,
+	member_role integer DEFAULT '100' NOT NULL,
+	release_flags integer DEFAULT '0' NOT NULL,
+	PRIMARY KEY (user_group_id)
+);
+
+CREATE TRIGGER DEFAULT_user_group BEFORE 
+    INSERT 
+    ON user_group REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select user_group_pk_seq.nextval into :new.user_group_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 172 (OID 18143484)
+--
+-- Name: user_metric_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE user_metric_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 294 (OID 18143502)
+--
+-- Name: user_metric Type: TABLE 
+--
+
+CREATE TABLE user_metric (
+	ranking integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	times_ranked integer DEFAULT '0' NOT NULL,
+	avg_raters_importance double precision DEFAULT '0.00000000' NOT NULL,
+	avg_rating double precision DEFAULT '0.00000000' NOT NULL,
+	metric double precision DEFAULT '0.00000000' NOT NULL,
+	percentile double precision DEFAULT '0.00000000' NOT NULL,
+	importance_factor double precision DEFAULT '0.00000000' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+CREATE TRIGGER DEFAULT_user_metric BEFORE 
+    INSERT 
+    ON user_metric REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select user_metric_pk_seq.nextval into :new.ranking from dual;
+END;
+/
+
+--
+-- TOC Entry ID 174 (OID 18143530)
+--
+-- Name: user_metric0_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE user_metric0_pk_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 295 (OID 18143548)
+--
+-- Name: user_metric0 Type: TABLE 
+--
+
+CREATE TABLE user_metric0 (
+	ranking integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	times_ranked integer DEFAULT '0' NOT NULL,
+	avg_raters_importance double precision DEFAULT '0.00000000' NOT NULL,
+	avg_rating double precision DEFAULT '0.00000000' NOT NULL,
+	metric double precision DEFAULT '0.00000000' NOT NULL,
+	percentile double precision DEFAULT '0.00000000' NOT NULL,
+	importance_factor double precision DEFAULT '0.00000000' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+CREATE TRIGGER DEFAULT_user_metric0 BEFORE 
+    INSERT 
+    ON user_metric0 REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select user_metric0_pk_seq.nextval into :new.ranking from dual;
+END;
+/
+
+--
+-- TOC Entry ID 296 (OID 18143576)
+--
+-- Name: user_preferences Type: TABLE 
+--
+
+CREATE TABLE user_preferences (
+	user_id integer DEFAULT '0' NOT NULL,
+	preference_name character varying(20),
+	preference_value character varying(20),
+	set_date integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 297 (OID 18143591)
+--
+-- Name: user_ratings Type: TABLE 
+--
+
+CREATE TABLE user_ratings (
+	rated_by integer DEFAULT '0' NOT NULL,
+	user_id integer DEFAULT '0' NOT NULL,
+	rate_field integer DEFAULT '0' NOT NULL,
+	rating integer DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 176 (OID 18143608)
+--
+-- Name: users_pk_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE users_pk_seq start with 100 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 298 (OID 18143626)
+--
+-- Name: users Type: TABLE 
+--
+
+CREATE TABLE users (
+	user_id integer DEFAULT '0' NOT NULL,
+	user_name varchar2(255) DEFAULT '',
+	email varchar2(255) DEFAULT '',
+	user_pw character varying(32) DEFAULT '',
+	realname character varying(32) DEFAULT '',
+	status character(1) DEFAULT 'A' NOT NULL,
+	shell character varying(20) DEFAULT '/bin/bash' NOT NULL,
+	unix_pw character varying(40) DEFAULT '',
+	unix_status character(1) DEFAULT 'N' NOT NULL,
+	unix_uid integer DEFAULT '0' NOT NULL,
+	unix_box character varying(10) DEFAULT 'shell1' NOT NULL,
+	add_date integer DEFAULT '0' NOT NULL,
+	confirm_hash character varying(32),
+	mail_siteupdates integer DEFAULT '0' NOT NULL,
+	mail_va integer DEFAULT '0' NOT NULL,
+	authorized_keys varchar2(255),
+	email_new varchar2(255),
+	people_view_skills integer DEFAULT '0' NOT NULL,
+	people_resume varchar2(255) DEFAULT '',
+	timezone character varying(64) DEFAULT 'GMT',
+	language integer DEFAULT '1' NOT NULL,
+	PRIMARY KEY (user_id)
+);
+
+CREATE TRIGGER DEFAULT_users BEFORE 
+    INSERT 
+    ON users REFERENCING OLD AS old NEW AS new 
+    FOR EACH ROW 
+BEGIN
+  select users_pk_seq.nextval into :new.user_id from dual;
+END;
+/
+
+--
+-- TOC Entry ID 178 (OID 27311232)
+--
+-- Name: unix_uid_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE unix_uid_seq start with 600 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 180 (OID 27311250)
+--
+-- Name: forum_thread_seq Type: SEQUENCE 
+--
+
+CREATE SEQUENCE forum_thread_seq start with 1 increment by 1 maxvalue 2147483647 minvalue 1 ;
+
+--
+-- TOC Entry ID 299 (OID 27311451)
+--
+-- Name: trove_agg Type: TABLE 
+--
+
+CREATE TABLE trove_agg (
+	trove_cat_id integer,
+	group_id integer,
+	group_name character varying(40),
+	unix_group_name character varying(30),
+	status character(1),
+	register_time integer,
+	short_description character varying(255),
+	percentile double precision,
+	ranking integer
+);
+
+--
+-- TOC Entry ID 302 (OID 30136736)
+--
+-- Name: activity_log Type: TABLE Owner: www
+--
+
+CREATE TABLE activity_log (
+	day integer DEFAULT '0' NOT NULL,
+	hour integer DEFAULT '0' NOT NULL,
+	group_id integer DEFAULT '0' NOT NULL,
+	browser character varying(8) DEFAULT 'OTHER' NOT NULL,
+	ver double precision DEFAULT '0.00' NOT NULL,
+	platform character varying(8) DEFAULT 'OTHER' NOT NULL,
+	time integer DEFAULT '0' NOT NULL,
+	page varchar2(255),
+	type integer DEFAULT '0' NOT NULL
+);
+
+--\connect - tperdue
+--
+-- TOC Entry ID 316 (OID 18138445)
+--
+-- Name: bug_group_id Type: INDEX 
+--
+
+CREATE  INDEX bug_group_id on bug  ( group_id );
+
+--
+-- TOC Entry ID 466 (OID 18138445)
+--
+-- Name: bug_groupid_statusid Type: INDEX 
+--
+
+CREATE  INDEX bug_groupid_statusid on bug  ( group_id , status_id );
+
+--
+-- TOC Entry ID 467 (OID 18138445)
+--
+-- Name: bug_groupid_assignedto_statusid Type: INDEX 
+--
+
+CREATE  INDEX bug_groupid_assngto_stsid on bug  ( group_id , assigned_to , status_id );
+
+--
+-- TOC Entry ID 317 (OID 18138513)
+--
+-- Name: bug_bug_dependencies_bug_id Type: INDEX 
+--
+
+CREATE  INDEX bug_bug_dependencies_bug_id on bug_bug_dependencies  ( bug_id );
+
+--
+-- TOC Entry ID 318 (OID 18138513)
+--
+-- Name: bug_bug_is_dependent_on_task_id Type: INDEX 
+--
+
+CREATE  INDEX bug_bug_is_dpnd_on_tsk_id on bug_bug_dependencies  ( is_dependent_on_bug_id );
+
+--
+-- TOC Entry ID 319 (OID 18138549)
+--
+-- Name: bug_canned_response_group_id Type: INDEX 
+--
+
+CREATE  INDEX bug_canned_response_group_id on bug_canned_responses  ( group_id );
+
+--
+-- TOC Entry ID 320 (OID 18138600)
+--
+-- Name: bug_category_group_id Type: INDEX 
+--
+
+CREATE  INDEX bug_category_group_id on bug_category  ( group_id );
+
+--
+-- TOC Entry ID 321 (OID 18138705)
+--
+-- Name: bug_group_group_id Type: INDEX 
+--
+
+CREATE  INDEX bug_group_group_id on bug_group  ( group_id );
+
+--
+-- TOC Entry ID 322 (OID 18138756)
+--
+-- Name: bug_history_bug_id Type: INDEX 
+--
+
+CREATE  INDEX bug_history_bug_id on bug_history  ( bug_id );
+
+--
+-- TOC Entry ID 323 (OID 18138909)
+--
+-- Name: bug_task_dependencies_bug_id Type: INDEX 
+--
+
+CREATE  INDEX bug_task_dependencies_bug_id on bug_task_dependencies  ( bug_id );
+
+--
+-- TOC Entry ID 324 (OID 18138909)
+--
+-- Name: bug_task_is_dpndnt_on_tsk_i Type: INDEX 
+--
+
+CREATE  INDEX bug_task_is_dpndnt_on_tsk_i on bug_task_dependencies  ( is_dependent_on_task_id );
+
+--
+-- TOC Entry ID 325 (OID 18138995)
+--
+-- Name: db_images_group Type: INDEX 
+--
+
+CREATE  INDEX db_images_group on db_images  ( group_id );
+
+--
+-- TOC Entry ID 326 (OID 18139058)
+--
+-- Name: doc_group_doc_group Type: INDEX 
+--
+
+CREATE  INDEX doc_group_doc_group on doc_data  ( doc_group );
+
+--
+-- TOC Entry ID 327 (OID 18139122)
+--
+-- Name: doc_groups_group Type: INDEX 
+--
+
+CREATE  INDEX doc_groups_group on doc_groups  ( group_id );
+
+--
+-- TOC Entry ID 328 (OID 18139192)
+--
+-- Name: filemodule_monitor_id Type: INDEX 
+--
+
+CREATE  INDEX filemodule_monitor_id on filemodule_monitor  ( filemodule_id );
+
+--
+-- TOC Entry ID 329 (OID 18139228)
+--
+-- Name: forum_forumid_msgid Type: INDEX 
+--
+
+CREATE  INDEX forum_forumid_msgid on forum  ( group_forum_id , msg_id );
+
+--
+-- TOC Entry ID 330 (OID 18139228)
+--
+-- Name: forum_group_forum_id Type: INDEX 
+--
+
+CREATE  INDEX forum_group_forum_id on forum  ( group_forum_id );
+
+--
+-- TOC Entry ID 331 (OID 18139228)
+--
+-- Name: forum_forumid_isfollowupto Type: INDEX 
+--
+
+CREATE  INDEX forum_forumid_isfollowupto on forum  ( group_forum_id , is_followup_to );
+
+--
+-- TOC Entry ID 332 (OID 18139228)
+--
+-- Name: forum_forumid_threadid_mostrece Type: INDEX 
+--
+
+CREATE  INDEX forum_formid_thrdid_mstrc on forum  ( group_forum_id , thread_id , most_recent_date );
+
+--
+-- TOC Entry ID 333 (OID 18139228)
+--
+-- Name: forum_threadid_isfollowupto Type: INDEX 
+--
+
+CREATE  INDEX forum_threadid_isfollowupto on forum  ( thread_id , is_followup_to );
+
+--
+-- TOC Entry ID 334 (OID 18139228)
+--
+-- Name: forum_forumid_isfollto_mostrece Type: INDEX 
+--
+
+CREATE  INDEX forum_forumid_isfollto_mstrc on forum  ( group_forum_id , is_followup_to , most_recent_date );
+
+--
+-- TOC Entry ID 335 (OID 18139309)
+--
+-- Name: forum_group_list_group_id Type: INDEX 
+--
+
+CREATE  INDEX forum_group_list_group_id on forum_group_list  ( group_id );
+
+--
+-- TOC Entry ID 336 (OID 18139366)
+--
+-- Name: forum_monitor_combo_id Type: INDEX 
+--
+
+CREATE  INDEX forum_monitor_combo_id on forum_monitored_forums  ( forum_id , user_id );
+
+--
+-- TOC Entry ID 337 (OID 18139366)
+--
+-- Name: forum_monitor_thread_id Type: INDEX 
+--
+
+CREATE  INDEX forum_monitor_thread_id on forum_monitored_forums  ( forum_id );
+
+--
+-- TOC Entry ID 338 (OID 18139510)
+--
+-- Name: foundry_news_foundry_approved_d Type: INDEX 
+--
+
+CREATE  INDEX foundry_news_fndry_apprvd_d on foundry_news  ( foundry_id , is_approved , approve_date );
+
+--
+-- TOC Entry ID 339 (OID 18139510)
+--
+-- Name: foundry_news_foundry_approved Type: INDEX 
+--
+
+CREATE  INDEX foundry_news_foundry_approved on foundry_news  ( foundry_id , is_approved );
+
+--
+-- TOC Entry ID 340 (OID 18139510)
+--
+-- Name: foundry_news_foundry Type: INDEX 
+--
+
+CREATE  INDEX foundry_news_foundry on foundry_news  ( foundry_id );
+
+--
+-- TOC Entry ID 463 (OID 18139510)
+--
+-- Name: foundrynews_foundry_dt_apprv Type: INDEX 
+--
+
+CREATE  INDEX foundrynews_foundry_dt_apprv on foundry_news  ( foundry_id , approve_date , is_approved );
+
+--
+-- TOC Entry ID 341 (OID 18139550)
+--
+-- Name: foundry_project_group_rank Type: INDEX 
+--
+
+CREATE  INDEX foundry_project_group_rank on foundry_preferred_projects  ( group_id , rank );
+
+--
+-- TOC Entry ID 342 (OID 18139550)
+--
+-- Name: foundry_project_group Type: INDEX 
+--
+
+CREATE  INDEX foundry_project_group on foundry_preferred_projects  ( group_id );
+
+--
+-- TOC Entry ID 343 (OID 18139588)
+--
+-- Name: foundry_projects_foundry Type: INDEX 
+--
+
+CREATE  INDEX foundry_projects_foundry on foundry_projects  ( foundry_id );
+
+--
+-- TOC Entry ID 344 (OID 18139606)
+--
+-- Name: downloads_http_idx Type: INDEX 
+--
+
+CREATE  INDEX downloads_http_idx on frs_dlstats_agg  ( downloads_http );
+
+--
+-- TOC Entry ID 345 (OID 18139606)
+--
+-- Name: downloads_ftp_idx Type: INDEX 
+--
+
+CREATE  INDEX downloads_ftp_idx on frs_dlstats_agg  ( downloads_ftp );
+
+--
+-- TOC Entry ID 346 (OID 18139606)
+--
+-- Name: file_id_idx Type: INDEX 
+--
+
+CREATE  INDEX file_id_idx on frs_dlstats_agg  ( file_id );
+
+--
+-- TOC Entry ID 347 (OID 18139606)
+--
+-- Name: day_idx Type: INDEX 
+--
+
+CREATE  INDEX day_idx on frs_dlstats_agg  ( day );
+
+--
+-- TOC Entry ID 348 (OID 18139623)
+--
+-- Name: dlstats_file_down Type: INDEX 
+--
+
+CREATE  INDEX dlstats_file_down on frs_dlstats_file_agg  ( downloads );
+
+--
+-- TOC Entry ID 349 (OID 18139623)
+--
+-- Name: dlstats_file_file_id Type: INDEX 
+--
+
+CREATE  INDEX dlstats_file_file_id on frs_dlstats_file_agg  ( file_id );
+
+--
+-- TOC Entry ID 350 (OID 18139623)
+--
+-- Name: dlstats_file_day Type: INDEX 
+--
+
+CREATE  INDEX dlstats_file_day on frs_dlstats_file_agg  ( day );
+
+--
+-- TOC Entry ID 351 (OID 18139638)
+--
+-- Name: stats_agr_tmp_fid Type: INDEX 
+--
+
+-- Removed because is not needed because is created in table definition
+-- CREATE  INDEX stats_agr_tmp_fid on frs_dlstats_filetotal_agg  ( file_id );
+
+--
+-- TOC Entry ID 352 (OID 18139654)
+--
+-- Name: frs_dlstats_filetotal_agg_old_f Type: INDEX 
+--
+
+CREATE  INDEX frs_dlstats_filettl_agg_old_f on frs_dlstats_filetotal_agg_old  ( file_id );
+
+--
+-- TOC Entry ID 303 (OID 18139667)
+--
+-- Name: frsdlstatsgroupagg_day_dls Type: INDEX 
+--
+
+CREATE  INDEX frsdlstatsgroupagg_day_dls on frs_dlstats_group_agg  ( day , downloads );
+
+--
+-- TOC Entry ID 353 (OID 18139667)
+--
+-- Name: group_id_idx Type: INDEX 
+--
+
+CREATE  INDEX group_id_idx on frs_dlstats_group_agg  ( group_id );
+
+--
+-- TOC Entry ID 355 (OID 18139667)
+--
+-- Name: frs_dlstats_group_agg_day Type: INDEX 
+--
+
+CREATE  INDEX frs_dlstats_group_agg_day on frs_dlstats_group_agg  ( day );
+
+--
+-- TOC Entry ID 356 (OID 18139682)
+--
+-- Name: stats_agr_tmp_gid Type: INDEX 
+--
+
+CREATE  INDEX stats_agr_tmp_gid on frs_dlstats_grouptotal_agg  ( group_id );
+
+--
+-- TOC Entry ID 357 (OID 18139714)
+--
+-- Name: frs_file_name Type: INDEX 
+--
+
+CREATE  INDEX frs_file_name on frs_file  ( filename );
+
+--
+-- TOC Entry ID 358 (OID 18139714)
+--
+-- Name: frs_file_date Type: INDEX 
+--
+
+CREATE  INDEX frs_file_date on frs_file  ( post_date );
+
+--
+-- TOC Entry ID 359 (OID 18139714)
+--
+-- Name: frs_file_processor Type: INDEX 
+--
+
+CREATE  INDEX frs_file_processor on frs_file  ( processor_id );
+
+--
+-- TOC Entry ID 360 (OID 18139714)
+--
+-- Name: frs_file_release_id Type: INDEX 
+--
+
+CREATE  INDEX frs_file_release_id on frs_file  ( release_id );
+
+--
+-- TOC Entry ID 361 (OID 18139714)
+--
+-- Name: frs_file_type Type: INDEX 
+--
+
+CREATE  INDEX frs_file_type on frs_file  ( type_id );
+
+--
+-- TOC Entry ID 362 (OID 18139822)
+--
+-- Name: package_group_id Type: INDEX 
+--
+
+CREATE  INDEX package_group_id on frs_package  ( group_id );
+
+--
+-- TOC Entry ID 363 (OID 18139922)
+--
+-- Name: frs_release_package Type: INDEX 
+--
+
+CREATE  INDEX frs_release_package on frs_release  ( package_id );
+
+--
+-- TOC Entry ID 364 (OID 18139922)
+--
+-- Name: frs_release_date Type: INDEX 
+--
+
+CREATE  INDEX frs_release_date on frs_release  ( release_date );
+
+--
+-- TOC Entry ID 365 (OID 18139922)
+--
+-- Name: frs_release_by Type: INDEX 
+--
+
+CREATE  INDEX frs_release_by on frs_release  ( released_by );
+
+--
+-- TOC Entry ID 366 (OID 18140030)
+--
+-- Name: group_cvs_history_group_id Type: INDEX 
+--
+
+CREATE  INDEX group_cvs_history_group_id on group_cvs_history  ( group_id );
+
+--
+-- TOC Entry ID 367 (OID 18140030)
+--
+-- Name: user_name_idx Type: INDEX 
+--
+
+CREATE  INDEX user_name_idx on group_cvs_history  ( user_name  );
+
+--
+-- TOC Entry ID 368 (OID 18140074)
+--
+-- Name: group_history_group_id Type: INDEX 
+--
+
+CREATE  INDEX group_history_group_id on group_history  ( group_id );
+
+--
+-- TOC Entry ID 369 (OID 18140178)
+--
+-- Name: groups_unix Type: INDEX 
+--
+
+CREATE  INDEX groups_unix on groups  ( unix_group_name  );
+
+--
+-- TOC Entry ID 370 (OID 18140178)
+--
+-- Name: groups_type Type: INDEX 
+--
+
+CREATE  INDEX groups_type on groups  ( type );
+
+--
+-- TOC Entry ID 371 (OID 18140178)
+--
+-- Name: groups_public Type: INDEX 
+--
+
+CREATE  INDEX groups_public on groups  ( is_public );
+
+--
+-- TOC Entry ID 372 (OID 18140178)
+--
+-- Name: groups_status Type: INDEX 
+--
+
+CREATE  INDEX groups_status on groups  ( status  );
+
+--
+-- TOC Entry ID 373 (OID 18140319)
+--
+-- Name: mail_group_list_group Type: INDEX 
+--
+
+CREATE  INDEX mail_group_list_group on mail_group_list  ( group_id );
+
+--
+-- TOC Entry ID 374 (OID 18140377)
+--
+-- Name: news_bytes_group Type: INDEX 
+--
+
+CREATE  INDEX news_bytes_group on news_bytes  ( group_id );
+
+--
+-- TOC Entry ID 375 (OID 18140377)
+--
+-- Name: news_bytes_approved Type: INDEX 
+--
+
+CREATE  INDEX news_bytes_approved on news_bytes  ( is_approved );
+
+--
+-- TOC Entry ID 376 (OID 18140377)
+--
+-- Name: news_bytes_forum Type: INDEX 
+--
+
+CREATE  INDEX news_bytes_forum on news_bytes  ( forum_id );
+
+--
+-- TOC Entry ID 464 (OID 18140377)
+--
+-- Name: news_group_date Type: INDEX 
+--
+
+CREATE  INDEX news_group_date on news_bytes  ( group_id , sf_date );
+
+--
+-- TOC Entry ID 465 (OID 18140377)
+--
+-- Name: news_approved_date Type: INDEX 
+--
+
+CREATE  INDEX news_approved_date on news_bytes  ( is_approved , sf_date );
+
+--
+-- TOC Entry ID 377 (OID 18140437)
+--
+-- Name: patch_group_id Type: INDEX 
+--
+
+CREATE  INDEX patch_group_id on patch  ( group_id );
+
+--
+-- TOC Entry ID 451 (OID 18140437)
+--
+-- Name: patch_groupid_assignedto_status Type: INDEX 
+--
+
+CREATE  INDEX patch_groupid_assgndto_sts on patch  ( group_id , assigned_to , patch_status_id );
+
+--
+-- TOC Entry ID 452 (OID 18140437)
+--
+-- Name: patch_groupid_assignedto Type: INDEX 
+--
+
+CREATE  INDEX patch_groupid_assignedto on patch  ( group_id , assigned_to );
+
+--
+-- TOC Entry ID 453 (OID 18140437)
+--
+-- Name: patch_groupid_status Type: INDEX 
+--
+
+CREATE  INDEX patch_groupid_status on patch  ( group_id , patch_status_id );
+
+--
+-- TOC Entry ID 378 (OID 18140501)
+--
+-- Name: patch_group_group_id Type: INDEX 
+--
+
+CREATE  INDEX patch_group_group_id on patch_category  ( group_id );
+
+--
+-- TOC Entry ID 379 (OID 18140552)
+--
+-- Name: patch_history_patch_id Type: INDEX 
+--
+
+CREATE  INDEX patch_history_patch_id on patch_history  ( patch_id );
+
+--
+-- TOC Entry ID 461 (OID 18140656)
+--
+-- Name: people_job_group_id Type: INDEX 
+--
+
+CREATE  INDEX people_job_group_id on people_job  ( group_id );
+
+--
+-- TOC Entry ID 380 (OID 18141038)
+--
+-- Name: project_assgnd_to_assgnd_to Type: INDEX 
+--
+
+CREATE  INDEX project_assgnd_to_assgnd_to on project_assigned_to  ( assigned_to_id );
+
+--
+-- TOC Entry ID 381 (OID 18141038)
+--
+-- Name: project_assigned_to_task_id Type: INDEX 
+--
+
+CREATE  INDEX project_assigned_to_task_id on project_assigned_to  ( project_task_id );
+
+--
+-- TOC Entry ID 382 (OID 18141128)
+--
+-- Name: project_is_depndnt_on_tsk_id Type: INDEX 
+--
+
+CREATE  INDEX project_is_depndnt_on_tsk_id on project_dependencies  ( is_dependent_on_task_id );
+
+--
+-- TOC Entry ID 383 (OID 18141128)
+--
+-- Name: project_dependencies_task_id Type: INDEX 
+--
+
+CREATE  INDEX project_dependencies_task_id on project_dependencies  ( project_task_id );
+
+--
+-- TOC Entry ID 384 (OID 18141164)
+--
+-- Name: project_group_list_group_id Type: INDEX 
+--
+
+CREATE  INDEX project_group_list_group_id on project_group_list  ( group_id );
+
+--
+-- TOC Entry ID 385 (OID 18141218)
+--
+-- Name: project_history_task_id Type: INDEX 
+--
+
+CREATE  INDEX project_history_task_id on project_history  ( project_task_id );
+
+--
+-- TOC Entry ID 386 (OID 18141275)
+--
+-- Name: project_metric_group Type: INDEX 
+--
+
+CREATE  INDEX project_metric_group on project_metric  ( group_id );
+
+--
+-- TOC Entry ID 387 (OID 18141430)
+--
+-- Name: project_task_group_project_id Type: INDEX 
+--
+
+CREATE  INDEX project_task_group_project_id on project_task  ( group_project_id );
+
+--
+-- TOC Entry ID 454 (OID 18141430)
+--
+-- Name: projecttask_projid_status Type: INDEX 
+--
+
+CREATE  INDEX projecttask_projid_status on project_task  ( group_project_id , status_id );
+
+--
+-- TOC Entry ID 354 (OID 18141497)
+--
+-- Name: projectweeklymetric_ranking Type: INDEX 
+--
+
+-- Removed because is not needed because is created in table definition
+-- CREATE  INDEX projectweeklymetric_ranking on project_weekly_metric  ( ranking );
+
+--
+-- TOC Entry ID 388 (OID 18141497)
+--
+-- Name: project_metric_weekly_group Type: INDEX 
+--
+
+CREATE  INDEX project_metric_weekly_group on project_weekly_metric  ( group_id );
+
+--
+-- TOC Entry ID 389 (OID 18141514)
+--
+-- Name: sf_session_user_id Type: INDEX 
+--
+
+CREATE  INDEX sf_session_user_id on sf_session  ( user_id );
+
+--
+-- TOC Entry ID 390 (OID 18141514)
+--
+-- Name: sf_session_time Type: INDEX 
+--
+
+CREATE  INDEX sf_session_time on sf_session  ( time );
+
+--
+-- TOC Entry ID 391 (OID 18141552)
+--
+-- Name: snippet_language Type: INDEX 
+--
+
+CREATE  INDEX snippet_language on snippet  ( language );
+
+--
+-- TOC Entry ID 392 (OID 18141552)
+--
+-- Name: snippet_category Type: INDEX 
+--
+
+CREATE  INDEX snippet_category on snippet  ( category );
+
+--
+-- TOC Entry ID 393 (OID 18141611)
+--
+-- Name: snippet_package_language Type: INDEX 
+--
+
+CREATE  INDEX snippet_package_language on snippet_package  ( language );
+
+--
+-- TOC Entry ID 394 (OID 18141611)
+--
+-- Name: snippet_package_category Type: INDEX 
+--
+
+CREATE  INDEX snippet_package_category on snippet_package  ( category );
+
+--
+-- TOC Entry ID 395 (OID 18141666)
+--
+-- Name: snippet_package_item_pkg_ver Type: INDEX 
+--
+
+CREATE  INDEX snippet_package_item_pkg_ver on snippet_package_item  ( snippet_package_version_id );
+
+--
+-- TOC Entry ID 396 (OID 18141702)
+--
+-- Name: snippet_package_version_pkg_id Type: INDEX 
+--
+
+CREATE  INDEX snippet_package_version_pkg_id on snippet_package_version  ( snippet_package_id );
+
+--
+-- TOC Entry ID 397 (OID 18141757)
+--
+-- Name: snippet_version_snippet_id Type: INDEX 
+--
+
+CREATE  INDEX snippet_version_snippet_id on snippet_version  ( snippet_id );
+
+--
+-- TOC Entry ID 398 (OID 18141829)
+--
+-- Name: pages_by_day_day Type: INDEX 
+--
+
+CREATE  INDEX pages_by_day_day on stats_agg_pages_by_day  ( day );
+
+--
+-- TOC Entry ID 399 (OID 18141881)
+--
+-- Name: stats_agr_filerelease_group_id Type: INDEX 
+--
+
+CREATE  INDEX stats_agr_filerelease_group_id on stats_agr_filerelease  ( group_id );
+
+--
+-- TOC Entry ID 400 (OID 18141881)
+--
+-- Name: stats_agr_filerelease_filerelea Type: INDEX 
+--
+
+CREATE  INDEX stats_agr_filerelease_flrl on stats_agr_filerelease  ( filerelease_id );
+
+--
+-- TOC Entry ID 401 (OID 18141896)
+--
+-- Name: project_agr_log_group Type: INDEX 
+--
+
+CREATE  INDEX project_agr_log_group on stats_agr_project  ( group_id );
+
+--
+-- TOC Entry ID 402 (OID 18141949)
+--
+-- Name: ftpdl_group_id Type: INDEX 
+--
+
+CREATE  INDEX ftpdl_group_id on stats_ftp_downloads  ( group_id );
+
+--
+-- TOC Entry ID 403 (OID 18141949)
+--
+-- Name: ftpdl_fid Type: INDEX 
+--
+
+CREATE  INDEX ftpdl_fid on stats_ftp_downloads  ( filerelease_id );
+
+--
+-- TOC Entry ID 404 (OID 18141949)
+--
+-- Name: ftpdl_day Type: INDEX 
+--
+
+CREATE  INDEX ftpdl_day on stats_ftp_downloads  ( day );
+
+--
+-- TOC Entry ID 405 (OID 18141966)
+--
+-- Name: httpdl_group_id Type: INDEX 
+--
+
+CREATE  INDEX httpdl_group_id on stats_http_downloads  ( group_id );
+
+--
+-- TOC Entry ID 406 (OID 18141966)
+--
+-- Name: httpdl_fid Type: INDEX 
+--
+
+CREATE  INDEX httpdl_fid on stats_http_downloads  ( filerelease_id );
+
+--
+-- TOC Entry ID 407 (OID 18141966)
+--
+-- Name: httpdl_day Type: INDEX 
+--
+
+CREATE  INDEX httpdl_day on stats_http_downloads  ( day );
+
+--
+-- TOC Entry ID 408 (OID 18141983)
+--
+-- Name: archive_project_monthday Type: INDEX 
+--
+
+CREATE  INDEX archive_project_monthday on stats_project  ( month , day );
+
+--
+-- TOC Entry ID 409 (OID 18141983)
+--
+-- Name: project_log_group Type: INDEX 
+--
+
+CREATE  INDEX project_log_group on stats_project  ( group_id );
+
+--
+-- TOC Entry ID 410 (OID 18141983)
+--
+-- Name: archive_project_week Type: INDEX 
+--
+
+CREATE  INDEX archive_project_week on stats_project  ( week );
+
+--
+-- TOC Entry ID 411 (OID 18141983)
+--
+-- Name: archive_project_day Type: INDEX 
+--
+
+CREATE  INDEX archive_project_day on stats_project  ( day );
+
+--
+-- TOC Entry ID 412 (OID 18141983)
+--
+-- Name: archive_project_month Type: INDEX 
+--
+
+CREATE  INDEX archive_project_month on stats_project  ( month );
+
+--
+-- TOC Entry ID 413 (OID 18142042)
+--
+-- Name: stats_project_tmp_group_id Type: INDEX 
+--
+
+CREATE  INDEX stats_project_tmp_group_id on stats_project_tmp  ( group_id );
+
+--
+-- TOC Entry ID 414 (OID 18142042)
+--
+-- Name: project_stats_week Type: INDEX 
+--
+
+CREATE  INDEX project_stats_week on stats_project_tmp  ( week );
+
+--
+-- TOC Entry ID 415 (OID 18142042)
+--
+-- Name: project_stats_month Type: INDEX 
+--
+
+CREATE  INDEX project_stats_month on stats_project_tmp  ( month );
+
+--
+-- TOC Entry ID 416 (OID 18142042)
+--
+-- Name: project_stats_day Type: INDEX 
+--
+
+CREATE  INDEX project_stats_day on stats_project_tmp  ( day );
+
+--
+-- TOC Entry ID 417 (OID 18142101)
+--
+-- Name: stats_site_monthday Type: INDEX 
+--
+
+CREATE  INDEX stats_site_monthday on stats_site  ( month , day );
+
+--
+-- TOC Entry ID 418 (OID 18142101)
+--
+-- Name: stats_site_week Type: INDEX 
+--
+
+CREATE  INDEX stats_site_week on stats_site  ( week );
+
+--
+-- TOC Entry ID 419 (OID 18142101)
+--
+-- Name: stats_site_day Type: INDEX 
+--
+
+CREATE  INDEX stats_site_day on stats_site  ( day );
+
+--
+-- TOC Entry ID 420 (OID 18142101)
+--
+-- Name: stats_site_month Type: INDEX 
+--
+
+CREATE  INDEX stats_site_month on stats_site  ( month );
+
+--
+-- TOC Entry ID 421 (OID 18142150)
+--
+-- Name: support_group_id Type: INDEX 
+--
+
+CREATE  INDEX support_group_id on support  ( group_id );
+
+--
+-- TOC Entry ID 448 (OID 18142150)
+--
+-- Name: support_groupid_assignedto Type: INDEX 
+--
+
+CREATE  INDEX support_groupid_assignedto on support  ( group_id , assigned_to );
+
+--
+-- TOC Entry ID 449 (OID 18142150)
+--
+-- Name: support_groupid_assignedto_stat Type: INDEX 
+--
+
+CREATE  INDEX support_groupid_assgndto_stt on support  ( group_id , assigned_to , support_status_id );
+
+--
+-- TOC Entry ID 450 (OID 18142150)
+--
+-- Name: support_groupid_status Type: INDEX 
+--
+
+CREATE  INDEX support_groupid_status on support  ( group_id , support_status_id );
+
+--
+-- TOC Entry ID 422 (OID 18142214)
+--
+-- Name: support_canned_response_group_i Type: INDEX 
+--
+
+CREATE  INDEX support_canned_rspns_grp_i on support_canned_responses  ( group_id );
+
+--
+-- TOC Entry ID 423 (OID 18142265)
+--
+-- Name: support_group_group_id Type: INDEX 
+--
+
+CREATE  INDEX support_group_group_id on support_category  ( group_id );
+
+--
+-- TOC Entry ID 424 (OID 18142316)
+--
+-- Name: support_history_support_id Type: INDEX 
+--
+
+CREATE  INDEX support_history_support_id on support_history  ( support_id );
+
+--
+-- TOC Entry ID 425 (OID 18142372)
+--
+-- Name: support_messages_support_id Type: INDEX 
+--
+
+CREATE  INDEX support_messages_support_id on support_messages  ( support_id );
+
+--
+-- TOC Entry ID 426 (OID 18142473)
+--
+-- Name: supported_languages_code Type: INDEX 
+--
+
+CREATE  INDEX supported_languages_code on supported_languages  ( language_code  );
+
+--
+-- TOC Entry ID 427 (OID 18142573)
+--
+-- Name: survey_questions_group Type: INDEX 
+--
+
+CREATE  INDEX survey_questions_group on survey_questions  ( group_id );
+
+--
+-- TOC Entry ID 428 (OID 18142608)
+--
+-- Name: survey_rating_aggregate_type_id Type: INDEX 
+--
+
+CREATE  INDEX survey_rating_aggrgt_typ_id on survey_rating_aggregate  ( type , id );
+
+--
+-- TOC Entry ID 429 (OID 18142625)
+--
+-- Name: survey_rating_responses_user_ty Type: INDEX 
+--
+
+CREATE  INDEX survey_rating_rspns_usr_ty on survey_rating_response  ( user_id , type , id );
+
+--
+-- TOC Entry ID 430 (OID 18142625)
+--
+-- Name: survey_rating_responses_type_id Type: INDEX 
+--
+
+CREATE  INDEX survey_rating_rspns_typ_id on survey_rating_response  ( type , id );
+
+--
+-- TOC Entry ID 431 (OID 18142644)
+--
+-- Name: survey_responses_group_id Type: INDEX 
+--
+
+CREATE  INDEX survey_responses_group_id on survey_responses  ( group_id );
+
+--
+-- TOC Entry ID 432 (OID 18142644)
+--
+-- Name: survey_responses_user_survey_qu Type: INDEX 
+--
+
+CREATE  INDEX survey_rspns_usr_srvy_qu on survey_responses  ( user_id , survey_id , question_id );
+
+--
+-- TOC Entry ID 433 (OID 18142644)
+--
+-- Name: survey_responses_user_survey Type: INDEX 
+--
+
+CREATE  INDEX survey_responses_user_survey on survey_responses  ( user_id , survey_id );
+
+--
+-- TOC Entry ID 434 (OID 18142644)
+--
+-- Name: survey_responses_survey_questio Type: INDEX 
+--
+
+CREATE  INDEX survey_rspns_srvy_quest on survey_responses  ( survey_id , question_id );
+
+--
+-- TOC Entry ID 435 (OID 18142698)
+--
+-- Name: surveys_group Type: INDEX 
+--
+
+CREATE  INDEX surveys_group on surveys  ( group_id );
+
+--
+-- TOC Entry ID 436 (OID 18143071)
+--
+-- Name: rank_forumposts_week_idx Type: INDEX 
+--
+
+CREATE  INDEX rank_forumposts_week_idx on top_group  ( rank_forumposts_week );
+
+--
+-- TOC Entry ID 437 (OID 18143071)
+--
+-- Name: rank_downloads_week_idx Type: INDEX 
+--
+
+CREATE  INDEX rank_downloads_week_idx on top_group  ( rank_downloads_week );
+
+--
+-- TOC Entry ID 438 (OID 18143071)
+--
+-- Name: pageviews_proj_idx Type: INDEX 
+--
+
+CREATE  INDEX pageviews_proj_idx on top_group  ( pageviews_proj );
+
+--
+-- TOC Entry ID 439 (OID 18143071)
+--
+-- Name: rank_userrank_idx Type: INDEX 
+--
+
+CREATE  INDEX rank_userrank_idx on top_group  ( rank_userrank );
+
+--
+-- TOC Entry ID 440 (OID 18143071)
+--
+-- Name: rank_downloads_all_idx Type: INDEX 
+--
+
+CREATE  INDEX rank_downloads_all_idx on top_group  ( rank_downloads_all );
+
+--
+-- TOC Entry ID 441 (OID 18143131)
+--
+-- Name: parent_idx Type: INDEX 
+--
+
+CREATE  INDEX parent_idx on trove_cat  ( parent );
+
+--
+-- TOC Entry ID 442 (OID 18143131)
+--
+-- Name: root_parent_idx Type: INDEX 
+--
+
+CREATE  INDEX root_parent_idx on trove_cat  ( root_parent );
+
+--
+-- TOC Entry ID 443 (OID 18143131)
+--
+-- Name: version_idx Type: INDEX 
+--
+
+CREATE  INDEX version_idx on trove_cat  ( version );
+
+--
+-- TOC Entry ID 444 (OID 18143194)
+--
+-- Name: trove_group_link_group_id Type: INDEX 
+--
+
+CREATE  INDEX trove_group_link_group_id on trove_group_link  ( group_id );
+
+--
+-- TOC Entry ID 445 (OID 18143194)
+--
+-- Name: trove_group_link_cat_id Type: INDEX 
+--
+
+CREATE  INDEX trove_group_link_cat_id on trove_group_link  ( trove_cat_id );
+
+--
+-- TOC Entry ID 446 (OID 18143304)
+--
+-- Name: user_bookmark_user_id Type: INDEX 
+--
+
+CREATE  INDEX user_bookmark_user_id on user_bookmarks  ( user_id );
+
+--
+-- TOC Entry ID 304 (OID 18143355)
+--
+-- Name: user_diary_user Type: INDEX 
+--
+
+CREATE  INDEX user_diary_user on user_diary  ( user_id );
+
+--
+-- TOC Entry ID 305 (OID 18143355)
+--
+-- Name: user_diary_user_date Type: INDEX 
+--
+
+CREATE  INDEX user_diary_user_date on user_diary  ( user_id , date_posted );
+
+--
+-- TOC Entry ID 306 (OID 18143355)
+--
+-- Name: user_diary_date Type: INDEX 
+--
+
+CREATE  INDEX user_diary_date on user_diary  ( date_posted );
+
+--
+-- TOC Entry ID 307 (OID 18143410)
+--
+-- Name: user_diary_monitor_user Type: INDEX 
+--
+
+CREATE  INDEX user_diary_monitor_user on user_diary_monitor  ( user_id );
+
+--
+-- TOC Entry ID 308 (OID 18143410)
+--
+-- Name: user_diary_monitor_monitored_us Type: INDEX 
+--
+
+CREATE  INDEX user_diary_monitor_mntrd_us on user_diary_monitor  ( monitored_user );
+
+--
+-- TOC Entry ID 309 (OID 18143446)
+--
+-- Name: user_group_group_id Type: INDEX 
+--
+
+CREATE  INDEX user_group_group_id on user_group  ( group_id );
+
+--
+-- TOC Entry ID 310 (OID 18143446)
+--
+-- Name: bug_flags_idx Type: INDEX 
+--
+
+CREATE  INDEX bug_flags_idx on user_group  ( bug_flags );
+
+--
+-- TOC Entry ID 311 (OID 18143446)
+--
+-- Name: project_flags_idx Type: INDEX 
+--
+
+CREATE  INDEX project_flags_idx on user_group  ( project_flags );
+
+--
+-- TOC Entry ID 312 (OID 18143446)
+--
+-- Name: user_group_user_id Type: INDEX 
+--
+
+CREATE  INDEX user_group_user_id on user_group  ( user_id );
+
+--
+-- TOC Entry ID 313 (OID 18143446)
+--
+-- Name: admin_flags_idx Type: INDEX 
+--
+
+CREATE  INDEX admin_flags_idx on user_group  ( admin_flags  );
+
+--
+-- TOC Entry ID 314 (OID 18143446)
+--
+-- Name: forum_flags_idx Type: INDEX 
+--
+
+CREATE  INDEX forum_flags_idx on user_group  ( forum_flags );
+
+--
+-- TOC Entry ID 315 (OID 18143548)
+--
+-- Name: user_metric0_user_id Type: INDEX 
+--
+
+CREATE  INDEX user_metric0_user_id on user_metric0  ( user_id );
+
+--
+-- TOC Entry ID 455 (OID 18143576)
+--
+-- Name: user_pref_user_id Type: INDEX 
+--
+
+CREATE  INDEX user_pref_user_id on user_preferences  ( user_id );
+
+--
+-- TOC Entry ID 456 (OID 18143591)
+--
+-- Name: user_ratings_rated_by Type: INDEX 
+--
+
+CREATE  INDEX user_ratings_rated_by on user_ratings  ( rated_by );
+
+--
+-- TOC Entry ID 457 (OID 18143591)
+--
+-- Name: user_ratings_user_id Type: INDEX 
+--
+
+CREATE  INDEX user_ratings_user_id on user_ratings  ( user_id );
+
+--
+-- TOC Entry ID 447 (OID 18143626)
+--
+-- Name: users_status Type: INDEX 
+--
+
+CREATE  INDEX users_status on users  ( status  );
+
+--
+-- TOC Entry ID 458 (OID 18143626)
+--
+-- Name: user_user Type: INDEX 
+--
+
+-- Removed because is not needed because is created in table definition
+-- CREATE  INDEX user_user on users  ( status  );
+
+--
+-- TOC Entry ID 459 (OID 18143626)
+--
+-- Name: idx_users_username Type: INDEX 
+--
+
+CREATE  INDEX idx_users_username on users  ( user_name );
+
+--
+-- TOC Entry ID 462 (OID 18143626)
+--
+-- Name: users_user_pw Type: INDEX 
+--
+
+CREATE  INDEX users_user_pw on users  ( user_pw  );
+
+--
+-- TOC Entry ID 460 (OID 27311451)
+--
+-- Name: troveagg_trovecatid Type: INDEX 
+--
+
+CREATE  INDEX troveagg_trovecatid on trove_agg  ( trove_cat_id );
+
+--
+-- TOC Entry ID 536 (OID 27311269)
+--
+-- Name: RI_ConstraintTrigger_27311268 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER user_group_user_id_fk AFTER INSERT OR UPdate ON user_group  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('user_group_user_id_fk', 'user_group', 'users', 'FULL', 'user_id', 'user_id');
+
+--
+-- TOC Entry ID 537 (OID 27311271)
+--
+-- Name: RI_ConstraintTrigger_27311270 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER user_group_user_id_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('user_group_user_id_fk', 'user_group', 'users', 'FULL', 'user_id', 'user_id');
+
+--
+-- TOC Entry ID 538 (OID 27311273)
+--
+-- Name: RI_ConstraintTrigger_27311272 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER user_group_user_id_fk AFTER UPdate ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('user_group_user_id_fk', 'user_group', 'users', 'FULL', 'user_id', 'user_id');
+
+--
+-- TOC Entry ID 535 (OID 27311275)
+--
+-- Name: RI_ConstraintTrigger_27311274 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER user_group_group_id_fk AFTER INSERT OR UPDATE ON user_group  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('user_group_group_id_fk', 'user_group', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 506 (OID 27311277)
+--
+-- Name: RI_ConstraintTrigger_27311276 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER user_group_group_id_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('user_group_group_id_fk', 'user_group', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 505 (OID 27311279)
+--
+-- Name: RI_ConstraintTrigger_27311278 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER user_group_group_id_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('user_group_group_id_fk', 'user_group', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 487 (OID 27311281)
+--
+-- Name: RI_ConstraintTrigger_27311280 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_posted_by_fk AFTER INSERT OR UPDATE ON forum  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('forum_posted_by_fk', 'forum', 'users', 'FULL', 'posted_by', 'user_id');
+
+--
+-- TOC Entry ID 539 (OID 27311283)
+--
+-- Name: RI_ConstraintTrigger_27311282 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_posted_by_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('forum_posted_by_fk', 'forum', 'users', 'FULL', 'posted_by', 'user_id');
+
+--
+-- TOC Entry ID 540 (OID 27311285)
+--
+-- Name: RI_ConstraintTrigger_27311284 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_posted_by_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('forum_posted_by_fk', 'forum', 'users', 'FULL', 'posted_by', 'user_id');
+
+--
+-- TOC Entry ID 486 (OID 27311287)
+--
+-- Name: RI_ConstraintTrigger_27311286 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_forum_id_fk AFTER INSERT OR UPDATE ON forum  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('forum_group_forum_id_fk', 'forum', 'forum_group_list', 'FULL', 'group_forum_id', 'group_forum_id');
+
+--
+-- TOC Entry ID 492 (OID 27311289)
+--
+-- Name: RI_ConstraintTrigger_27311288 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_forum_id_fk AFTER DELETE ON forum_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('forum_group_forum_id_fk', 'forum', 'forum_group_list', 'FULL', 'group_forum_id', 'group_forum_id');
+
+--
+-- TOC Entry ID 491 (OID 27311291)
+--
+-- Name: RI_ConstraintTrigger_27311290 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_forum_id_fk AFTER UPDATE ON forum_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('forum_group_forum_id_fk', 'forum', 'forum_group_list', 'FULL', 'group_forum_id', 'group_forum_id');
+
+--
+-- TOC Entry ID 490 (OID 27311293)
+--
+-- Name: RI_ConstraintTrigger_27311292 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_list_group_id_fk AFTER INSERT OR UPDATE ON forum_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('forum_group_list_group_id_fk', 'forum_group_list', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 504 (OID 27311295)
+--
+-- Name: RI_ConstraintTrigger_27311294 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_list_group_id_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('forum_group_list_group_id_fk', 'forum_group_list', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 503 (OID 27311297)
+--
+-- Name: RI_ConstraintTrigger_27311296 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_list_group_id_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('forum_group_list_group_id_fk', 'forum_group_list', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 479 (OID 27311299)
+--
+-- Name: RI_ConstraintTrigger_27311298 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_group_group_fk AFTER INSERT OR UPDATE ON bug_group  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_group_group_fk', 'bug_group', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 502 (OID 27311301)
+--
+-- Name: RI_ConstraintTrigger_27311300 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_group_group_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_group_group_fk', 'bug_group', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 501 (OID 27311303)
+--
+-- Name: RI_ConstraintTrigger_27311302 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_group_group_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_group_group_fk', 'bug_group', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 476 (OID 27311305)
+--
+-- Name: RI_ConstraintTrigger_27311304 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_category_group_fk AFTER INSERT OR UPDATE ON bug_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_category_group_fk', 'bug_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 500 (OID 27311307)
+--
+-- Name: RI_ConstraintTrigger_27311306 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_category_group_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_category_group_fk', 'bug_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 499 (OID 27311309)
+--
+-- Name: RI_ConstraintTrigger_27311308 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_category_group_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_category_group_fk', 'bug_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 473 (OID 27311311)
+--
+-- Name: RI_ConstraintTrigger_27311310 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_submitted_by_fk AFTER INSERT OR UPDATE ON bug  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_submitted_by_fk', 'bug', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 541 (OID 27311313)
+--
+-- Name: RI_ConstraintTrigger_27311312 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_submitted_by_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_submitted_by_fk', 'bug', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 542 (OID 27311315)
+--
+-- Name: RI_ConstraintTrigger_27311314 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_submitted_by_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_submitted_by_fk', 'bug', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 472 (OID 27311317)
+--
+-- Name: RI_ConstraintTrigger_27311316 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_assigned_to_fk AFTER INSERT OR UPDATE ON bug  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_assigned_to_fk', 'bug', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 543 (OID 27311319)
+--
+-- Name: RI_ConstraintTrigger_27311318 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_assigned_to_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_assigned_to_fk', 'bug', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 544 (OID 27311321)
+--
+-- Name: RI_ConstraintTrigger_27311320 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_assigned_to_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_assigned_to_fk', 'bug', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 471 (OID 27311323)
+--
+-- Name: RI_ConstraintTrigger_27311322 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_status_fk AFTER INSERT OR UPDATE ON bug  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_status_fk', 'bug', 'bug_status', 'FULL', 'status_id', 'status_id');
+
+--
+-- TOC Entry ID 483 (OID 27311325)
+--
+-- Name: RI_ConstraintTrigger_27311324 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_status_fk AFTER DELETE ON bug_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_status_fk', 'bug', 'bug_status', 'FULL', 'status_id', 'status_id');
+
+--
+-- TOC Entry ID 482 (OID 27311327)
+--
+-- Name: RI_ConstraintTrigger_27311326 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_status_fk AFTER UPDATE ON bug_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_status_fk', 'bug', 'bug_status', 'FULL', 'status_id', 'status_id');
+
+--
+-- TOC Entry ID 470 (OID 27311329)
+--
+-- Name: RI_ConstraintTrigger_27311328 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_category_fk AFTER INSERT OR UPDATE ON bug  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_category_fk', 'bug', 'bug_category', 'FULL', 'category_id', 'bug_category_id');
+
+--
+-- TOC Entry ID 475 (OID 27311331)
+--
+-- Name: RI_ConstraintTrigger_27311330 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_category_fk AFTER DELETE ON bug_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_category_fk', 'bug', 'bug_category', 'FULL', 'category_id', 'bug_category_id');
+
+--
+-- TOC Entry ID 474 (OID 27311333)
+--
+-- Name: RI_ConstraintTrigger_27311332 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_category_fk AFTER UPDATE ON bug_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_category_fk', 'bug', 'bug_category', 'FULL', 'category_id', 'bug_category_id');
+
+--
+-- TOC Entry ID 469 (OID 27311335)
+--
+-- Name: RI_ConstraintTrigger_27311334 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_resolution_fk AFTER INSERT OR UPDATE ON bug  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_resolution_fk', 'bug', 'bug_resolution', 'FULL', 'resolution_id', 'resolution_id');
+
+--
+-- TOC Entry ID 481 (OID 27311337)
+--
+-- Name: RI_ConstraintTrigger_27311336 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_resolution_fk AFTER DELETE ON bug_resolution  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_resolution_fk', 'bug', 'bug_resolution', 'FULL', 'resolution_id', 'resolution_id');
+
+--
+-- TOC Entry ID 480 (OID 27311339)
+--
+-- Name: RI_ConstraintTrigger_27311338 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_resolution_fk AFTER UPDATE ON bug_resolution  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_resolution_fk', 'bug', 'bug_resolution', 'FULL', 'resolution_id', 'resolution_id');
+
+--
+-- TOC Entry ID 468 (OID 27311341)
+--
+-- Name: RI_ConstraintTrigger_27311340 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_group_fk AFTER INSERT OR UPDATE ON bug  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('bug_group_fk', 'bug', 'bug_group', 'FULL', 'bug_group_id', 'bug_group_id');
+
+--
+-- TOC Entry ID 478 (OID 27311343)
+--
+-- Name: RI_ConstraintTrigger_27311342 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_group_fk AFTER DELETE ON bug_group  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('bug_group_fk', 'bug', 'bug_group', 'FULL', 'bug_group_id', 'bug_group_id');
+
+--
+-- TOC Entry ID 477 (OID 27311345)
+--
+-- Name: RI_ConstraintTrigger_27311344 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER bug_group_fk AFTER UPDATE ON bug_group  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('bug_group_fk', 'bug', 'bug_group', 'FULL', 'bug_group_id', 'bug_group_id');
+
+--
+-- TOC Entry ID 485 (OID 27311347)
+--
+-- Name: RI_ConstraintTrigger_27311346 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_posted_by_fk AFTER INSERT OR UPDATE ON forum  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('forum_posted_by_fk', 'forum', 'users', 'FULL', 'posted_by', 'user_id');
+
+--
+-- TOC Entry ID 545 (OID 27311349)
+--
+-- Name: RI_ConstraintTrigger_27311348 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_posted_by_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('forum_posted_by_fk', 'forum', 'users', 'FULL', 'posted_by', 'user_id');
+
+--
+-- TOC Entry ID 546 (OID 27311351)
+--
+-- Name: RI_ConstraintTrigger_27311350 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_posted_by_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('forum_posted_by_fk', 'forum', 'users', 'FULL', 'posted_by', 'user_id');
+
+--
+-- TOC Entry ID 484 (OID 27311353)
+--
+-- Name: RI_ConstraintTrigger_27311352 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_forum_id_fk AFTER INSERT OR UPDATE ON forum  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('forum_group_forum_id_fk', 'forum', 'forum_group_list', 'FULL', 'group_forum_id', 'group_forum_id');
+
+--
+-- TOC Entry ID 489 (OID 27311355)
+--
+-- Name: RI_ConstraintTrigger_27311354 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_forum_id_fk AFTER DELETE ON forum_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('forum_group_forum_id_fk', 'forum', 'forum_group_list', 'FULL', 'group_forum_id', 'group_forum_id');
+
+--
+-- TOC Entry ID 488 (OID 27311357)
+--
+-- Name: RI_ConstraintTrigger_27311356 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER forum_group_forum_id_fk AFTER UPDATE ON forum_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('forum_group_forum_id_fk', 'forum', 'forum_group_list', 'FULL', 'group_forum_id', 'group_forum_id');
+
+--
+-- TOC Entry ID 518 (OID 27311359)
+--
+-- Name: RI_ConstraintTrigger_27311358 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_group_list_group_id_fk AFTER INSERT OR UPDATE ON project_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('project_group_list_group_id_fk', 'project_group_list', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 498 (OID 27311361)
+--
+-- Name: RI_ConstraintTrigger_27311360 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_group_list_group_id_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('project_group_list_group_id_fk', 'project_group_list', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 497 (OID 27311363)
+--
+-- Name: RI_ConstraintTrigger_27311362 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_group_list_group_id_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('project_group_list_group_id_fk', 'project_group_list', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 523 (OID 27311365)
+--
+-- Name: RI_ConstraintTrigger_27311364 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_group_project_id_f AFTER INSERT OR UPDATE ON project_task  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('project_task_group_project_id_f', 'project_task', 'project_group_list', 'FULL', 'group_project_id', 'group_project_id');
+
+--
+-- TOC Entry ID 517 (OID 27311367)
+--
+-- Name: RI_ConstraintTrigger_27311366 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_group_project_id_f AFTER DELETE ON project_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('project_task_group_project_id_f', 'project_task', 'project_group_list', 'FULL', 'group_project_id', 'group_project_id');
+
+--
+-- TOC Entry ID 516 (OID 27311369)
+--
+-- Name: RI_ConstraintTrigger_27311368 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_group_project_id_f AFTER UPDATE ON project_group_list  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('project_task_group_project_id_f', 'project_task', 'project_group_list', 'FULL', 'group_project_id', 'group_project_id');
+
+--
+-- TOC Entry ID 522 (OID 27311371)
+--
+-- Name: RI_ConstraintTrigger_27311370 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_created_by_fk AFTER INSERT OR UPDATE ON project_task  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('project_task_created_by_fk', 'project_task', 'users', 'FULL', 'created_by', 'user_id');
+
+--
+-- TOC Entry ID 547 (OID 27311373)
+--
+-- Name: RI_ConstraintTrigger_27311372 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_created_by_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('project_task_created_by_fk', 'project_task', 'users', 'FULL', 'created_by', 'user_id');
+
+--
+-- TOC Entry ID 548 (OID 27311375)
+--
+-- Name: RI_ConstraintTrigger_27311374 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_created_by_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('project_task_created_by_fk', 'project_task', 'users', 'FULL', 'created_by', 'user_id');
+
+--
+-- TOC Entry ID 521 (OID 27311377)
+--
+-- Name: RI_ConstraintTrigger_27311376 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_status_id_fk AFTER INSERT OR UPDATE ON project_task  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('project_task_status_id_fk', 'project_task', 'project_status', 'FULL', 'status_id', 'status_id');
+
+--
+-- TOC Entry ID 520 (OID 27311379)
+--
+-- Name: RI_ConstraintTrigger_27311378 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_status_id_fk AFTER DELETE ON project_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('project_task_status_id_fk', 'project_task', 'project_status', 'FULL', 'status_id', 'status_id');
+
+--
+-- TOC Entry ID 519 (OID 27311381)
+--
+-- Name: RI_ConstraintTrigger_27311380 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER project_task_status_id_fk AFTER UPDATE ON project_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('project_task_status_id_fk', 'project_task', 'project_status', 'FULL', 'status_id', 'status_id');
+
+--
+-- TOC Entry ID 510 (OID 27311383)
+--
+-- Name: RI_ConstraintTrigger_27311382 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_status_id_fk AFTER INSERT OR UPDATE ON patch  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('patch_status_id_fk', 'patch', 'patch_status', 'FULL', 'patch_status_id', 'patch_status_id');
+
+--
+-- TOC Entry ID 515 (OID 27311385)
+--
+-- Name: RI_ConstraintTrigger_27311384 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_status_id_fk AFTER DELETE ON patch_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('patch_status_id_fk', 'patch', 'patch_status', 'FULL', 'patch_status_id', 'patch_status_id');
+
+--
+-- TOC Entry ID 514 (OID 27311387)
+--
+-- Name: RI_ConstraintTrigger_27311386 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_status_id_fk AFTER UPDATE ON patch_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('patch_status_id_fk', 'patch', 'patch_status', 'FULL', 'patch_status_id', 'patch_status_id');
+
+--
+-- TOC Entry ID 509 (OID 27311389)
+--
+-- Name: RI_ConstraintTrigger_27311388 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_category_id_fk AFTER INSERT OR UPDATE ON patch  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('patch_category_id_fk', 'patch', 'patch_category', 'FULL', 'patch_category_id', 'patch_category_id');
+
+--
+-- TOC Entry ID 513 (OID 27311391)
+--
+-- Name: RI_ConstraintTrigger_27311390 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_category_id_fk AFTER DELETE ON patch_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('patch_category_id_fk', 'patch', 'patch_category', 'FULL', 'patch_category_id', 'patch_category_id');
+
+--
+-- TOC Entry ID 512 (OID 27311393)
+--
+-- Name: RI_ConstraintTrigger_27311392 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_category_id_fk AFTER UPDATE ON patch_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('patch_category_id_fk', 'patch', 'patch_category', 'FULL', 'patch_category_id', 'patch_category_id');
+
+--
+-- TOC Entry ID 508 (OID 27311395)
+--
+-- Name: RI_ConstraintTrigger_27311394 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_submitted_by_fk AFTER INSERT OR UPDATE ON patch  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('patch_submitted_by_fk', 'patch', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 549 (OID 27311397)
+--
+-- Name: RI_ConstraintTrigger_27311396 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_submitted_by_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('patch_submitted_by_fk', 'patch', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 550 (OID 27311399)
+--
+-- Name: RI_ConstraintTrigger_27311398 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_submitted_by_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('patch_submitted_by_fk', 'patch', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 507 (OID 27311401)
+--
+-- Name: RI_ConstraintTrigger_27311400 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_assigned_to_fk AFTER INSERT OR UPDATE ON patch  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('patch_assigned_to_fk', 'patch', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 551 (OID 27311403)
+--
+-- Name: RI_ConstraintTrigger_27311402 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_assigned_to_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('patch_assigned_to_fk', 'patch', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 552 (OID 27311405)
+--
+-- Name: RI_ConstraintTrigger_27311404 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_assigned_to_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('patch_assigned_to_fk', 'patch', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 511 (OID 27311407)
+--
+-- Name: RI_ConstraintTrigger_27311406 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_category_group_id_fk AFTER INSERT OR UPDATE ON patch_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('patch_category_group_id_fk', 'patch_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 496 (OID 27311409)
+--
+-- Name: RI_ConstraintTrigger_27311408 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_category_group_id_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('patch_category_group_id_fk', 'patch_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 495 (OID 27311411)
+--
+-- Name: RI_ConstraintTrigger_27311410 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER patch_category_group_id_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('patch_category_group_id_fk', 'patch_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 527 (OID 27311413)
+--
+-- Name: RI_ConstraintTrigger_27311412 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_status_id_fk AFTER INSERT OR UPDATE ON support  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('support_status_id_fk', 'support', 'support_status', 'FULL', 'support_status_id', 'support_status_id');
+
+--
+-- TOC Entry ID 532 (OID 27311415)
+--
+-- Name: RI_ConstraintTrigger_27311414 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_status_id_fk AFTER DELETE ON support_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('support_status_id_fk', 'support', 'support_status', 'FULL', 'support_status_id', 'support_status_id');
+
+--
+-- TOC Entry ID 531 (OID 27311417)
+--
+-- Name: RI_ConstraintTrigger_27311416 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_status_id_fk AFTER UPDATE ON support_status  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('support_status_id_fk', 'support', 'support_status', 'FULL', 'support_status_id', 'support_status_id');
+
+--
+-- TOC Entry ID 526 (OID 27311419)
+--
+-- Name: RI_ConstraintTrigger_27311418 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_category_id_fk AFTER INSERT OR UPDATE ON support  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('support_category_id_fk', 'support', 'support_category', 'FULL', 'support_category_id', 'support_category_id');
+
+--
+-- TOC Entry ID 530 (OID 27311421)
+--
+-- Name: RI_ConstraintTrigger_27311420 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_category_id_fk AFTER DELETE ON support_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('support_category_id_fk', 'support', 'support_category', 'FULL', 'support_category_id', 'support_category_id');
+
+--
+-- TOC Entry ID 529 (OID 27311423)
+--
+-- Name: RI_ConstraintTrigger_27311422 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_category_id_fk AFTER UPDATE ON support_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('support_category_id_fk', 'support', 'support_category', 'FULL', 'support_category_id', 'support_category_id');
+
+--
+-- TOC Entry ID 525 (OID 27311425)
+--
+-- Name: RI_ConstraintTrigger_27311424 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_submitted_by_fk AFTER INSERT OR UPDATE ON support  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('support_submitted_by_fk', 'support', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 553 (OID 27311427)
+--
+-- Name: RI_ConstraintTrigger_27311426 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_submitted_by_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('support_submitted_by_fk', 'support', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 554 (OID 27311429)
+--
+-- Name: RI_ConstraintTrigger_27311428 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_submitted_by_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('support_submitted_by_fk', 'support', 'users', 'FULL', 'submitted_by', 'user_id');
+
+--
+-- TOC Entry ID 524 (OID 27311431)
+--
+-- Name: RI_ConstraintTrigger_27311430 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_assigned_to_fk AFTER INSERT OR UPDATE ON support  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('support_assigned_to_fk', 'support', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 555 (OID 27311433)
+--
+-- Name: RI_ConstraintTrigger_27311432 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_assigned_to_fk AFTER DELETE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('support_assigned_to_fk', 'support', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 556 (OID 27311435)
+--
+-- Name: RI_ConstraintTrigger_27311434 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_assigned_to_fk AFTER UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('support_assigned_to_fk', 'support', 'users', 'FULL', 'assigned_to', 'user_id');
+
+--
+-- TOC Entry ID 528 (OID 27311437)
+--
+-- Name: RI_ConstraintTrigger_27311436 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_category_group_id_fk AFTER INSERT OR UPDATE ON support_category  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('support_category_group_id_fk', 'support_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 494 (OID 27311439)
+--
+-- Name: RI_ConstraintTrigger_27311438 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_category_group_id_fk AFTER DELETE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('support_category_group_id_fk', 'support_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 493 (OID 27311441)
+--
+-- Name: RI_ConstraintTrigger_27311440 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER support_category_group_id_fk AFTER UPDATE ON groups  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('support_category_group_id_fk', 'support_category', 'groups', 'FULL', 'group_id', 'group_id');
+
+--
+-- TOC Entry ID 557 (OID 27311443)
+--
+-- Name: RI_ConstraintTrigger_27311442 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER users_languageid_fk AFTER INSERT OR UPDATE ON users  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_check_ins ('users_languageid_fk', 'users', 'supported_languages', 'FULL', 'language', 'language_id');
+
+--
+-- TOC Entry ID 534 (OID 27311445)
+--
+-- Name: RI_ConstraintTrigger_27311444 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER users_languageid_fk AFTER DELETE ON supported_languages  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_del ('users_languageid_fk', 'users', 'supported_languages', 'FULL', 'language', 'language_id');
+
+--
+-- TOC Entry ID 533 (OID 27311447)
+--
+-- Name: RI_ConstraintTrigger_27311446 Type: TRIGGER 
+--
+
+-- CREATE CONSTRAINT TRIGGER users_languageid_fk AFTER UPDATE ON supported_languages  NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE RI_FKey_noaction_upd ('users_languageid_fk', 'users', 'supported_languages', 'FULL', 'language', 'language_id');
+
+--
+-- TOC Entry ID 3 (OID 18138427)
+--
+-- Name: bug_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_pk_seq', 125359, 't');
+
+--
+-- TOC Entry ID 5 (OID 18138495)
+--
+-- Name: bug_bug_dependencies_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_bug_dependencies_pk_seq', 44691, 't');
+
+--
+-- TOC Entry ID 7 (OID 18138531)
+--
+-- Name: bug_canned_responses_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_canned_responses_pk_seq', 100204, 't');
+
+--
+-- TOC Entry ID 9 (OID 18138582)
+--
+-- Name: bug_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_category_pk_seq', 5053, 't');
+
+--
+-- TOC Entry ID 11 (OID 18138632)
+--
+-- Name: bug_filter_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_filter_pk_seq', 140, 't');
+
+--
+-- TOC Entry ID 13 (OID 18138687)
+--
+-- Name: bug_group_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_group_pk_seq', 2780, 't');
+
+--
+-- TOC Entry ID 15 (OID 18138738)
+--
+-- Name: bug_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_history_pk_seq', 106196, 't');
+
+--
+-- TOC Entry ID 17 (OID 18138794)
+--
+-- Name: bug_resolution_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_resolution_pk_seq', 101, 't');
+
+--
+-- TOC Entry ID 19 (OID 18138843)
+--
+-- Name: bug_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_status_pk_seq', 100, 't');
+
+--
+-- TOC Entry ID 21 (OID 18138891)
+--
+-- Name: bug_task_dependencies_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('bug_task_dependencies_pk_seq', 44583, 't');
+
+--
+-- TOC Entry ID 23 (OID 18138927)
+--
+-- Name: canned_responses_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('canned_responses_pk_seq', 5, 't');
+
+--
+-- TOC Entry ID 25 (OID 18138977)
+--
+-- Name: db_images_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('db_images_pk_seq', 1128, 't');
+
+--
+-- TOC Entry ID 27 (OID 18139040)
+--
+-- Name: doc_data_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('doc_data_pk_seq', 2124, 't');
+
+--
+-- TOC Entry ID 29 (OID 18139104)
+--
+-- Name: doc_groups_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('doc_groups_pk_seq', 1815, 't');
+
+--
+-- TOC Entry ID 31 (OID 18139140)
+--
+-- Name: doc_states_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('doc_states_pk_seq', 5, 't');
+
+--
+-- TOC Entry ID 33 (OID 18139174)
+--
+-- Name: filemodule_monitor_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('filemodule_monitor_pk_seq', 312, 't');
+
+--
+-- TOC Entry ID 35 (OID 18139210)
+--
+-- Name: forum_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('forum_pk_seq', 84486, 't');
+
+--
+-- TOC Entry ID 37 (OID 18139291)
+--
+-- Name: forum_group_list_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('forum_group_list_pk_seq', 51981, 't');
+
+--
+-- TOC Entry ID 39 (OID 18139348)
+--
+-- Name: forum_monitored_forums_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('forum_monitored_forums_pk_seq', 14831, 't');
+
+--
+-- TOC Entry ID 41 (OID 18139384)
+--
+-- Name: forum_saved_place_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('forum_saved_place_pk_seq', 1835, 't');
+
+--
+-- TOC Entry ID 43 (OID 18139492)
+--
+-- Name: foundry_news_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('foundry_news_pk_seq', 1973, 't');
+
+--
+-- TOC Entry ID 45 (OID 18139532)
+--
+-- Name: foundry_preferred_projec_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('foundry_preferred_projec_pk_seq', 165, 't');
+
+--
+-- TOC Entry ID 47 (OID 18139570)
+--
+-- Name: foundry_projects_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('foundry_projects_pk_seq', 320807, 't');
+
+--
+-- TOC Entry ID 49 (OID 18139695)
+--
+-- Name: frs_file_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('frs_file_pk_seq', 29214, 't');
+
+--
+-- TOC Entry ID 51 (OID 18139756)
+--
+-- Name: frs_filetype_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('frs_filetype_pk_seq', 9999, 't');
+
+--
+-- TOC Entry ID 53 (OID 18139804)
+--
+-- Name: frs_package_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('frs_package_pk_seq', 12688, 't');
+
+--
+-- TOC Entry ID 55 (OID 18139856)
+--
+-- Name: frs_processor_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('frs_processor_pk_seq', 9999, 't');
+
+--
+-- TOC Entry ID 57 (OID 18139904)
+--
+-- Name: frs_release_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('frs_release_pk_seq', 17983, 't');
+
+--
+-- TOC Entry ID 59 (OID 18139964)
+--
+-- Name: frs_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('frs_status_pk_seq', 3, 't');
+
+--
+-- TOC Entry ID 61 (OID 18140012)
+--
+-- Name: group_cvs_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('group_cvs_history_pk_seq', 1, 'f');
+
+--
+-- TOC Entry ID 63 (OID 18140056)
+--
+-- Name: group_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('group_history_pk_seq', 29283, 't');
+
+--
+-- TOC Entry ID 65 (OID 18140112)
+--
+-- Name: group_type_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('group_type_pk_seq', 2, 't');
+
+--
+-- TOC Entry ID 67 (OID 18140160)
+--
+-- Name: groups_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('groups_pk_seq', 16379, 't');
+
+--
+-- TOC Entry ID 69 (OID 18140301)
+--
+-- Name: mail_group_list_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('mail_group_list_pk_seq', 7581, 't');
+
+--
+-- TOC Entry ID 71 (OID 18140359)
+--
+-- Name: news_bytes_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('news_bytes_pk_seq', 10299, 't');
+
+--
+-- TOC Entry ID 73 (OID 18140419)
+--
+-- Name: patch_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('patch_pk_seq', 102785, 't');
+
+--
+-- TOC Entry ID 75 (OID 18140483)
+--
+-- Name: patch_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('patch_category_pk_seq', 10607, 't');
+
+--
+-- TOC Entry ID 77 (OID 18140534)
+--
+-- Name: patch_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('patch_history_pk_seq', 9813, 't');
+
+--
+-- TOC Entry ID 79 (OID 18140590)
+--
+-- Name: patch_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('patch_status_pk_seq', 103, 't');
+
+--
+-- TOC Entry ID 81 (OID 18140638)
+--
+-- Name: people_job_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_job_pk_seq', 1641, 't');
+
+--
+-- TOC Entry ID 83 (OID 18140697)
+--
+-- Name: people_job_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_job_category_pk_seq', 102, 't');
+
+--
+-- TOC Entry ID 85 (OID 18140747)
+--
+-- Name: people_job_inventory_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_job_inventory_pk_seq', 1970, 't');
+
+--
+-- TOC Entry ID 87 (OID 18140787)
+--
+-- Name: people_job_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_job_status_pk_seq', 3, 't');
+
+--
+-- TOC Entry ID 89 (OID 18140835)
+--
+-- Name: people_skill_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_skill_pk_seq', 33, 't');
+
+--
+-- TOC Entry ID 91 (OID 18140884)
+--
+-- Name: people_skill_inventory_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_skill_inventory_pk_seq', 60179, 't');
+
+--
+-- TOC Entry ID 93 (OID 18140924)
+--
+-- Name: people_skill_level_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_skill_level_pk_seq', 5, 't');
+
+--
+-- TOC Entry ID 95 (OID 18140972)
+--
+-- Name: people_skill_year_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('people_skill_year_pk_seq', 5, 't');
+
+--
+-- TOC Entry ID 97 (OID 18141020)
+--
+-- Name: project_assigned_to_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_assigned_to_pk_seq', 30257, 't');
+
+--
+-- TOC Entry ID 99 (OID 18141110)
+--
+-- Name: project_dependencies_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_dependencies_pk_seq', 25231, 't');
+
+--
+-- TOC Entry ID 101 (OID 18141146)
+--
+-- Name: project_group_list_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_group_list_pk_seq', 6360, 't');
+
+--
+-- TOC Entry ID 103 (OID 18141200)
+--
+-- Name: project_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_history_pk_seq', 27347, 't');
+
+--
+-- TOC Entry ID 105 (OID 18141257)
+--
+-- Name: project_metric_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_metric_pk_seq', 13274, 't');
+
+--
+-- TOC Entry ID 107 (OID 18141292)
+--
+-- Name: project_metric_tmp1_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_metric_tmp1_pk_seq', 13274, 't');
+
+--
+-- TOC Entry ID 109 (OID 18141327)
+--
+-- Name: project_metric_weekly_tm_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_metric_weekly_tm_pk_seq', 2213, 't');
+
+--
+-- TOC Entry ID 111 (OID 18141363)
+--
+-- Name: project_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_status_pk_seq', 100, 't');
+
+--
+-- TOC Entry ID 113 (OID 18141412)
+--
+-- Name: project_task_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_task_pk_seq', 23295, 't');
+
+--
+-- TOC Entry ID 115 (OID 18141479)
+--
+-- Name: project_weekly_metric_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('project_weekly_metric_pk_seq', 2213, 't');
+
+--
+-- TOC Entry ID 117 (OID 18141534)
+--
+-- Name: snippet_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('snippet_pk_seq', 100501, 't');
+
+--
+-- TOC Entry ID 119 (OID 18141593)
+--
+-- Name: snippet_package_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('snippet_package_pk_seq', 100035, 't');
+
+--
+-- TOC Entry ID 121 (OID 18141648)
+--
+-- Name: snippet_package_item_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('snippet_package_item_pk_seq', 100100, 't');
+
+--
+-- TOC Entry ID 123 (OID 18141684)
+--
+-- Name: snippet_package_version_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('snippet_package_version_pk_seq', 100035, 't');
+
+--
+-- TOC Entry ID 125 (OID 18141739)
+--
+-- Name: snippet_version_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('snippet_version_pk_seq', 100662, 't');
+
+--
+-- TOC Entry ID 127 (OID 18142132)
+--
+-- Name: support_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('support_pk_seq', 109672, 't');
+
+--
+-- TOC Entry ID 129 (OID 18142196)
+--
+-- Name: support_canned_responses_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('support_canned_responses_pk_seq', 100088, 't');
+
+--
+-- TOC Entry ID 131 (OID 18142247)
+--
+-- Name: support_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('support_category_pk_seq', 10699, 't');
+
+--
+-- TOC Entry ID 133 (OID 18142298)
+--
+-- Name: support_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('support_history_pk_seq', 24027, 't');
+
+--
+-- TOC Entry ID 135 (OID 18142354)
+--
+-- Name: support_messages_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('support_messages_pk_seq', 122077, 't');
+
+--
+-- TOC Entry ID 137 (OID 18142407)
+--
+-- Name: support_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('support_status_pk_seq', 3, 't');
+
+--
+-- TOC Entry ID 139 (OID 18142455)
+--
+-- Name: supported_languages_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('supported_languages_pk_seq', 21, 't');
+
+--
+-- TOC Entry ID 141 (OID 18142506)
+--
+-- Name: survey_question_types_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('survey_question_types_pk_seq', 100, 't');
+
+--
+-- TOC Entry ID 143 (OID 18142555)
+--
+-- Name: survey_questions_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('survey_questions_pk_seq', 14662, 't');
+
+--
+-- TOC Entry ID 145 (OID 18142680)
+--
+-- Name: surveys_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('surveys_pk_seq', 11185, 't');
+
+--
+-- TOC Entry ID 147 (OID 18142735)
+--
+-- Name: system_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('system_history_pk_seq', 1, 'f');
+
+--
+-- TOC Entry ID 149 (OID 18142787)
+--
+-- Name: system_machines_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('system_machines_pk_seq', 1, 'f');
+
+--
+-- TOC Entry ID 151 (OID 18142836)
+--
+-- Name: system_news_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('system_news_pk_seq', 1, 'f');
+
+--
+-- TOC Entry ID 153 (OID 18142895)
+--
+-- Name: system_services_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('system_services_pk_seq', 1, 'f');
+
+--
+-- TOC Entry ID 155 (OID 18142944)
+--
+-- Name: system_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('system_status_pk_seq', 1, 'f');
+
+--
+-- TOC Entry ID 157 (OID 18143020)
+--
+-- Name: themes_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('themes_pk_seq', 2, 't');
+
+--
+-- TOC Entry ID 159 (OID 18143113)
+--
+-- Name: trove_cat_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('trove_cat_pk_seq', 281, 't');
+
+--
+-- TOC Entry ID 161 (OID 18143176)
+--
+-- Name: trove_group_link_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('trove_group_link_pk_seq', 111628, 't');
+
+--
+-- TOC Entry ID 163 (OID 18143216)
+--
+-- Name: trove_treesums_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('trove_treesums_pk_seq', 765, 't');
+
+--
+-- TOC Entry ID 165 (OID 18143286)
+--
+-- Name: user_bookmarks_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('user_bookmarks_pk_seq', 23482, 't');
+
+--
+-- TOC Entry ID 167 (OID 18143337)
+--
+-- Name: user_diary_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('user_diary_pk_seq', 892, 't');
+
+--
+-- TOC Entry ID 169 (OID 18143392)
+--
+-- Name: user_diary_monitor_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('user_diary_monitor_pk_seq', 521, 't');
+
+--
+-- TOC Entry ID 171 (OID 18143428)
+--
+-- Name: user_group_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('user_group_pk_seq', 27204, 't');
+
+--
+-- TOC Entry ID 173 (OID 18143484)
+--
+-- Name: user_metric_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('user_metric_pk_seq', 115, 't');
+
+--
+-- TOC Entry ID 175 (OID 18143530)
+--
+-- Name: user_metric0_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('user_metric0_pk_seq', 5, 't');
+
+--
+-- TOC Entry ID 177 (OID 18143608)
+--
+-- Name: users_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('users_pk_seq', 120800, 't');
+
+--
+-- TOC Entry ID 179 (OID 27311232)
+--
+-- Name: unix_uid_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('unix_uid_seq', 21044, 't');
+
+--
+-- TOC Entry ID 181 (OID 27311250)
+--
+-- Name: forum_thread_seq Type: SEQUENCE SET Owner: 
+--
+
+-- SELECT setval ('forum_thread_seq', 59698, 't');
+

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/database-oci8.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/database-oci8.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/database-oci8.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,509 @@
+<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id$
+//
+
+/*
+
+	This is the Oracle 8 version of our
+	database connection/querying layer.
+
+	It has been seriously overhauled and tested to create
+	this working version by	our friends at http://www.pssonline.com.
+
+*/
+
+
+$sys_db_oci_commit_mode=OCI_COMMIT_ON_SUCCESS;
+
+/**
+ *
+ *  Connect to the database
+ *  Notice the global vars that must be set up
+ *  Sets up a global $conn variable which is used
+ *  in other functions in this library
+ *
+ */
+
+function db_connect() {
+	global $sys_dbhost,$sys_dbuser,$sys_dbpasswd,$conn,$sys_dbname;
+	$conn = ocilogon($sys_dbuser,$sys_dbpasswd,$sys_dbname);
+}
+
+/**
+ *
+ * Does any preprocessing require on the sql to convert to ORACLE sql syntax
+ *
+ */
+
+function db_query_preprocess($qstring) {
+	$qstring = db_replace_words($qstring);
+	$qstring = db_convert_outer_joins($qstring);
+	$qstring = db_convert_nextvals($qstring);
+	return $qstring;
+}
+
+/**
+ *
+ * Replaces oracle reserved words with sf_[reserved_word]
+ *
+ */
+
+function db_replace_words($qstring) {
+	/* replace oracle reserved words in $qstring with sf_[reserved_word] */
+	$qstring = str_replace('session ','sf_session ',$qstring);
+	$qstring = str_replace('session.','sf_session.',$qstring);
+	$qstring = str_replace('session,','sf_session,',$qstring);
+	$qstring = str_replace('.date','.sf_date',$qstring);			
+	$qstring = str_replace(',date ',',sf_date ',$qstring);			
+	$qstring = str_replace(',date,',',sf_date,',$qstring);			
+	$qstring = str_replace(' date ',' sf_date ',$qstring);			
+	$qstring = str_replace(';','',$qstring); // a semicolon at end of oci sql causes errors
+	return $qstring;
+}
+
+
+/**
+ *
+ * Replaces "SELECT nexval('sequence_name')" with "SELECT sequence_name.nextval FROM dual"
+ *
+ */
+
+function db_convert_nextvals($qstring) {
+	if (stristr($qstring,'nextval')) {
+		$seq_array = explode("'",$qstring);
+		$qstring = "SELECT " . $seq_array[1] . ".nextval FROM dual";
+	}
+	return $qstring;
+}
+
+/*
+How are ANSI SQL outer joins migrated to Oracle outer joins?
+Outer joins may not be converted correctly.
+
+Convert an ANSI SQL inner join to an Oracle join as illustrated in the following code example:
+select * from a inner join b on a.col1=b.col2;
+select * from a , b where a.col1=b.col2;
+Convert a left join and right join in ANSI SQL to Oracle as indicated below:
+select * from a left join b on a.col1=b.col2;
+// remember the table to the right of left join and add (+) to it's columns.
+select * from a, b where a.col1=b.col2(+);
+select * from a right join b on a.col1=b.col2;
+// remember the table to the left of right join and add (+) to it's columns.
+select * from a, b where a.col1(+)=b.col2;
+
+How can I convert full outer joins from ANSI SQL Server to Oracle?
+There are several ways to express a full outer join within Oracle.
+For example, in the following query the predicate a.col1 (+) = b.col1 (+)
+is pseudo-Oracle notation for a full outer join although this predicate
+is not currently supported in Oracle:
+
+select a.col2 acol2, a.col1 acol1, b.col1 bcol1, b.col2 bcol2
+from a,b where a.col1 (+) = b.col1 (+);
+The most efficient way of executing this query is to use a UNION ALL of
+a left outer join and a right outer join, with an additional predicate,
+as illustrated below:
+select a.col2 acol2, a.col1 acol1, b.col1 bcol1, b.col2 bcol2
+from a,b where a.col1=b.col1(+)
+union all
+select a.col2 acol2, a.col1 acol1, b.col1 bcol1, b.col2 bcol2
+from a,b where a.col1(+)=b.col1 and a.col1 is null;
+*/
+
+/*
+	Right now, only "LEFT JOIN" and "RIGHT JOIN" syntax are converted.
+	And it has only been tested on the sql statements found in
+	SourceForge version 2.5.  It may need to be modified for future
+	syntax variances.
+*/
+
+function db_convert_outer_joins($qstring) {
+	if ( stristr($qstring,"SELECT") && stristr($qstring,"JOIN") ) {
+		$select = substr($qstring,0,strpos(strtoupper($qstring),"FROM")-1);
+		$from = stristr($qstring,"FROM");
+		$from = substr($from,0,strpos(strtoupper($from),"WHERE")-1);
+		if (stristr($qstring,"GROUP BY")) {
+			$where = stristr($qstring,"WHERE");
+			$where = substr($where,0,strpos(strtoupper($where),"GROUP BY")-1);
+			$group_order = stristr($qstring,"GROUP BY");
+		}
+		else if (stristr($qstring,"ORDER BY")) {
+			$where = stristr($qstring,"WHERE");
+			$where = substr($where,0,strpos(strtoupper($where),"ORDER BY")-1);
+			$group_order = stristr($qstring,"ORDER BY");
+		}
+		else {
+			$where = stristr($qstring,"WHERE");
+		}
+		// loop through each TABLE [ALIAS] in the from clause
+		$from_array = explode(",",substr($from,strlen("FROM ")));
+		$from = "FROM ";
+		for ($i=0; $i<count($from_array); $i++) {
+		  if ( stristr($from_array[$i],"JOIN") ) {
+		    if ( stristr($from_array[$i],"LEFT") ) {		
+		      $join_str = "LEFT JOIN";
+					$left_join = true;
+		    }
+		    else if ( stristr($from_array[$i],"RIGHT") ) {
+		    	$join_str = "RIGHT JOIN";
+		      $left_join = false;
+		    }
+		    $left_table = trim(substr($from_array[$i],0,strpos(strtoupper($from_array[$i]),$join_str)));
+		    $right_table = substr(stristr($from_array[$i],$join_str),strlen($join_str));
+		    $right_table = trim(substr($right_table,0,strpos(strtoupper($right_table),"USING")));
+		    $from = $from . $left_table . ', ' . $right_table;		
+		    $left_table_alias = strrchr(trim($left_table),' ');
+		    $right_table_alias = strrchr(trim($right_table),' ');
+		    if ( strlen($left_table_alias) == 0 ) {
+		    	$left_table_alias = $left_table;
+		    }
+		    else {
+			  	$left_table = strchr(trim($left_table),' ');
+			  }		
+		    if ( strlen($right_table_alias) == 0 ) {
+		    	$right_table_alias = $right_table;
+		    }
+		    else {
+			    $right_table = strrchr(trim($right_table),' ');
+		    }
+		    $using_column = trim(substr(stristr($from_array[$i],"USING"),strlen("USING")));
+		    $using_column = substr($using_column,1,-1); // strip parens
+		    if ( $left_join ) {	  		
+			    $where = $where . "\nAND " .
+			    		$left_table_alias . '.' . $using_column . ' = ' .
+			    		$right_table_alias . '.' . $using_column . ' (+) ';
+		    }
+		    else {
+			    $where = $where . "\nAND " .
+			    		$left_table_alias . '.' . $using_column . ' (+) = ' .
+			    		$right_table_alias . '.' . $using_column . ' ';
+				}
+		  }
+		  else {
+		    $from = $from . $from_array[$i] . ' ';
+		  }
+		}
+		return $select.' '.$from.' '.$where.' '.$group_order;
+	}
+	else {	
+		return $qstring;
+	}
+
+}
+
+/**
+ *
+ *  Query the database
+ *
+ *  @param qstring - SQL statement
+ *  @param limit - how many rows do you want returned
+ *  @param offset - of matching rows, return only rows starting here
+ *
+ *
+ *  NOTE - the oci version of this may be somewhat inefficient
+ *  for large result sets (hundreds or thousands of rows selected)
+ *  However - most queries are returning 25-50 rows
+ *
+ */
+
+function db_query($qstring,$limit='-1',$offset=0) {
+	
+	global $QUERY_COUNT,$conn,$sys_db_oci_commit_mode,
+			$sys_db_results,$sys_db_row_pointer,$sys_db_fieldnames;
+		
+	$QUERY_COUNT++;
+
+	$qstring = db_query_preprocess($qstring);
+	
+	$stmt=ociparse($conn,$qstring);
+	
+	if (!$stmt) {
+		echo $qstring.'<br>';
+		return 0;
+	} else {
+		
+		if ($limit > 0) {
+			if (!$offset || $offset < 0) {
+				$offset=0;
+			}
+		}
+
+		$res = ociexecute($stmt,$sys_db_oci_commit_mode);
+		
+		if ( !$res ) {
+			echo $qstring.'<br>';
+			return 0;
+		}
+		else if ( strcmp(ocistatementtype($stmt),"SELECT")==0 ) {
+		
+			//store fieldnames for use in db_fieldname and db_numfields
+			for ($i=0;$i<ocinumcols($stmt);$i++) {
+				$sys_db_fieldnames[$stmt][$i] = ocicolumnname($stmt,$i+1);
+			}
+			
+			//if offset, seek to starting point
+			//potentially expensive if large offset
+			//however there is no data_seek feature AFAICT			
+			$more_data=true;
+			if ($offset > 0) {
+				for ($i=0; $i<$offset; $i++) {
+					//burn them off
+					if (!ocifetchinto($stmt,$res)) {
+						//if no data be returned
+						//get out of loop
+						$more_data=false;
+						break;
+					}
+				}
+			}
+
+			//store the data into $sys_db_results[$stmt]
+			//this is needed since there is the possiblity of calling
+			//db_result($qhandle,$row,$field) with any $row value
+			//db_result and db_fetch_array could be rewritten to
+			//eliminate the need for fetching all of the data up front
+			$row=0;			
+			while ($more_data) {
+				$more = ocifetchinto($stmt,$res,OCI_RETURN_NULLS+OCI_RETURN_LOBS);
+				
+				//see if data is being returned && we are
+				//still within the requested $limit
+				if ( !$more || (($limit >= 0) && ($row >= $limit))) {
+					$more_data=false;
+				}
+				else {
+					//populate sys_db_results with an array that can be indexed
+					//by field number or field name
+					for ($col=0;$col<db_numfields($stmt);$col++) {
+						$sys_db_results[$stmt][$row][$col] = $res[$col];
+						$fieldname = strtolower($sys_db_fieldnames[$stmt][$col]);
+						$sys_db_results[$stmt][$row][$fieldname] = $res[$col];
+					}
+				}
+				$row++;
+			}
+			$sys_db_row_pointer[$stmt]=0;
+			return $stmt;		
+			
+		}
+		else {
+			return $stmt;
+		}
+	}
+}
+
+/**
+ *      db_begin()
+ *
+ *      begin a transaction
+ */
+function db_begin() {
+	global $sys_db_oci_commit_mode;
+	$sys_db_oci_commit_mode=OCI_DEFAULT;
+}
+
+/**
+ *      db_commit()
+ *
+ *      commit a transaction
+ */
+function db_commit() {
+	global $sys_db_oci_commit_mode,$conn;
+	$sys_db_oci_commit_mode=OCI_COMMIT_ON_SUCCESS;
+	return ocicommit($conn);
+}
+
+/**
+ *      db_rollback()
+ *
+ *      rollback a transaction
+ */
+function db_rollback() {
+	global $sys_db_oci_commit_mode,$conn;
+	$sys_db_oci_commit_mode=OCI_COMMIT_ON_SUCCESS;
+	return ocirollback($conn);
+}
+
+/**
+ *
+ *  Returns the number of rows in this result set
+ *
+ *  param qhandle query result set handle
+ *
+ */
+function db_numrows($qhandle) {
+	global $sys_db_results;
+	// return only if qhandle exists, otherwise 0
+	if ($qhandle) {
+		return count($sys_db_results[$qhandle]);
+	} else {
+		return 0;
+	}
+}
+
+/**
+ *
+ *  Frees a database result properly
+ *
+ *  param qhandle query result set handle
+ *
+ */
+
+function db_free_result($qhandle) {
+	global $sys_db_results;
+	if ($qhandle) {
+		unset($sys_db_results[$qhandle]);
+		unset($sys_db_row_pointer[$qhandle]);
+		unset($sys_db_fieldnames[$qhandle]);
+		return ocifreestatement($qhandle);
+	}
+	else {
+		return true;
+	}
+}
+
+/**
+ *
+ *  Reset is useful for db_fetch_array
+ *  sometimes you need to start over
+ *
+ *  param qhandle query result set handle
+ *  param row - integer row number
+ *
+ */
+
+function db_reset_result($qhandle,$row=0) {
+	global $sys_db_row_pointer;
+	return $sys_db_row_pointer[$qhandle]=$row;
+}
+
+/**
+ *
+ *  Returns a field from a result set
+ *
+ *  param qhandle query result set handle
+ *  param row - integer row number
+ *  param field - text field name
+ *
+ */
+
+function db_result($qhandle,$row,$field) {
+	global $sys_db_results;
+	return $sys_db_results[$qhandle][$row][$field];
+}
+
+/**
+ *
+ *  Returns the number of fields in this result set
+ *
+ *  param qhandle query result set handle
+ *
+ */
+
+function db_numfields($qhandle) {
+	global $sys_db_fieldnames;
+	// return only if qhandle exists, otherwise 0
+	if ( $qhandle ) {
+		return count($sys_db_fieldnames[$qhandle]);
+	} else {
+		return 0;
+	}
+}
+
+/**
+ *
+ *  Returns the number of rows changed in the last query
+ *
+ *  param qhandle - query result set handle
+ *  param fnumber - column number
+ *
+ */
+
+function db_fieldname($lhandle,$fnumber) {
+	global $sys_db_fieldnames;
+	return $sys_db_fieldnames[$lhandle][$fnumber];
+}
+
+/**
+ *
+ *  Returns the number of rows changed in the last query
+ *
+ *  param qhandle query result set handle
+ *
+ */
+
+function db_affected_rows($qhandle) {
+	return ocirowcount($qhandle);
+}
+
+/**
+ *
+ *  Returns an associative array from
+ *  the current row of this database result
+ *  Use db_reset_result to seek a particular row
+ *
+ *  param qhandle query result set handle
+ *
+ */
+
+function db_fetch_array($qhandle) {
+	global $sys_db_results,$sys_db_row_pointer;
+	if ($sys_db_row_pointer[$qhandle] < db_numrows($qhandle)) {
+		$result = $sys_db_results[$qhandle][$sys_db_row_pointer[$qhandle]];		
+  	$sys_db_row_pointer[$qhandle]++;
+  	return $result;
+	}
+	else {
+		return false;
+ 	}
+}
+
+/**
+ *
+ *  Returns the last primary key from an insert
+ *
+ *  param qhandle query result set handle
+ *  param table_name is the name of the table you inserted into
+ *  param pkey_field_name is the field name of the primary key
+ *
+ */
+
+function db_insertid($qhandle,$table_name,$pkey_field_name) {
+	$qstring = db_query_preprocess("SELECT max($pkey_field_name) AS id FROM $table_name");
+	$res=db_query($qstring);
+	if ($res && (db_numrows($res) > 0) ) {
+		return db_result($res,0,0);
+	} else {
+		return 0;
+	}
+}
+
+/**
+ *
+ *  Returns the last error from the database
+ *
+ */
+
+function db_error() {
+	global $conn,$stmt;
+	if ($stmt) {
+		$err= ocierror($stmt);
+	}
+	else if ($conn) {
+		$err= ocierror($conn);
+	}
+	else {
+		$err= ocierror();
+	}
+	if ($err) {
+		return $err['message'];
+	} else {
+		return false;
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/trove_defaults.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/trove_defaults.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/pssonline/trove_defaults.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,280 @@
+# MySQL dump 8.8
+#
+# Host: localhost    Database: alexandria
+#--------------------------------------------------------
+# Server version	3.23.22-beta
+
+#
+# Dumping data for table 'trove_cat'
+#
+
+INSERT INTO trove_cat VALUES (1,2000031601,0,0,'audience','Intended Audience','The main class of people likely to be interested in this resource.',0,0,'Intended Audience','1');
+INSERT INTO trove_cat VALUES (2,2000032401,1,1,'endusers','End Users/Desktop','Programs and resources for software end users. Software for the desktop.',0,0,'Intended Audience :: End Users/Desktop','1 :: 2');
+INSERT INTO trove_cat VALUES (3,2000041101,1,1,'developers','Developers','Programs and resources for software developers, to include libraries.',0,0,'Intended Audience :: Developers','1 :: 3');
+INSERT INTO trove_cat VALUES (4,2000031601,1,1,'sysadmins','System Administrators','Programs and resources for people who administer computers and networks.',0,0,'Intended Audience :: System Administrators','1 :: 4');
+INSERT INTO trove_cat VALUES (5,2000040701,1,1,'other','Other Audience','Programs and resources for an unlisted audience.',0,0,'Intended Audience :: Other Audience','1 :: 5');
+INSERT INTO trove_cat VALUES (6,2000031601,0,0,'developmentstatus','Development Status','An indication of the development status of the software or resource.',0,0,'Development Status','6');
+INSERT INTO trove_cat VALUES (7,2000040701,6,6,'planning','1 - Planning','This resource is in the planning stages only. There is no code.',0,0,'Development Status :: 1 - Planning','6 :: 7');
+INSERT INTO trove_cat VALUES (8,2000040701,6,6,'prealpha','2 - Pre-Alpha','There is code for this project, but it is not usable except for further development.',0,0,'Development Status :: 2 - Pre-Alpha','6 :: 8');
+INSERT INTO trove_cat VALUES (9,2000041101,6,6,'alpha','3 - Alpha','Resource is in early development, and probably incomplete and/or extremely buggy.',0,0,'Development Status :: 3 - Alpha','6 :: 9');
+INSERT INTO trove_cat VALUES (10,2000040701,6,6,'beta','4 - Beta','Resource is in late phases of development. Deliverables are essentially complete, but may still have significant bugs.',0,0,'Development Status :: 4 - Beta','6 :: 10');
+INSERT INTO trove_cat VALUES (11,2000040701,6,6,'production','5 - Production/Stable','Deliverables are complete and usable by the intended audience.',0,0,'Development Status :: 5 - Production/Stable','6 :: 11');
+INSERT INTO trove_cat VALUES (12,2000040701,6,6,'mature','6 - Mature','This resource has an extensive history of successful use and has probably undergone several stable revisions.',0,0,'Development Status :: 6 - Mature','6 :: 12');
+INSERT INTO trove_cat VALUES (13,2000031601,0,0,'license','License','License terms under which the resource is distributed.',0,0,'License','13');
+INSERT INTO trove_cat VALUES (14,2000032401,13,13,'osi','OSI Approved','Licenses that have been approved by OSI as approved',0,0,'License :: OSI Approved','13 :: 14');
+INSERT INTO trove_cat VALUES (15,2000032001,14,13,'gpl','GNU General Public License (GPL)','GNU General Public License.',0,0,'License :: OSI Approved :: GNU General Public License (GPL)','13 :: 14 :: 15');
+INSERT INTO trove_cat VALUES (16,2000050801,14,13,'lgpl','GNU Lesser General Public License (LGPL)','GNU Lesser General Public License',0,0,'License :: OSI Approved :: GNU Lesser General Public License (LGPL)','13 :: 14 :: 16');
+INSERT INTO trove_cat VALUES (17,2000032001,14,13,'artistic','Artistic License','The Perl Artistic License',0,0,'License :: OSI Approved :: Artistic License','13 :: 14 :: 17');
+INSERT INTO trove_cat VALUES (18,2000031601,0,0,'topic','Topic','Topic categorization.',0,0,'Topic','18');
+INSERT INTO trove_cat VALUES (19,2000032001,136,18,'archiving','Archiving','Tools for maintaining and searching software or document archives.',0,0,'Topic :: System :: Archiving','18 :: 136 :: 19');
+INSERT INTO trove_cat VALUES (20,2000032401,18,18,'communications','Communications','Programs intended to facilitate communication between people.',0,0,'Topic :: Communications','18 :: 20');
+INSERT INTO trove_cat VALUES (21,2000031601,20,18,'bbs','BBS','Bulletin Board systems.',0,0,'Topic :: Communications :: BBS','18 :: 20 :: 21');
+INSERT INTO trove_cat VALUES (22,2000031601,20,18,'chat','Chat','Programs to support real-time communication over the Internet.',0,0,'Topic :: Communications :: Chat','18 :: 20 :: 22');
+INSERT INTO trove_cat VALUES (23,2000031601,22,18,'icq','ICQ','Programs to support ICQ.',0,0,'Topic :: Communications :: Chat :: ICQ','18 :: 20 :: 22 :: 23');
+INSERT INTO trove_cat VALUES (24,2000041101,22,18,'irc','Internet Relay Chat','Programs to support Internet Relay Chat.',0,0,'Topic :: Communications :: Chat :: Internet Relay Chat','18 :: 20 :: 22 :: 24');
+INSERT INTO trove_cat VALUES (25,2000031601,22,18,'talk','Unix Talk','Programs to support Unix Talk protocol.',0,0,'Topic :: Communications :: Chat :: Unix Talk','18 :: 20 :: 22 :: 25');
+INSERT INTO trove_cat VALUES (26,2000031601,22,18,'aim','AOL Instant Messanger','Programs to support AOL Instant Messanger.',0,0,'Topic :: Communications :: Chat :: AOL Instant Messanger','18 :: 20 :: 22 :: 26');
+INSERT INTO trove_cat VALUES (27,2000031601,20,18,'conferencing','Conferencing','Software to support real-time conferencing over the Internet.',0,0,'Topic :: Communications :: Conferencing','18 :: 20 :: 27');
+INSERT INTO trove_cat VALUES (28,2000031601,20,18,'email','Email','Programs for sending, processing, and handling electronic mail.',0,0,'Topic :: Communications :: Email','18 :: 20 :: 28');
+INSERT INTO trove_cat VALUES (29,2000031601,28,18,'filters','Filters','Content-driven filters and dispatchers for Email.',0,0,'Topic :: Communications :: Email :: Filters','18 :: 20 :: 28 :: 29');
+INSERT INTO trove_cat VALUES (30,2000031601,28,18,'listservers','Mailing List Servers','Tools for managing electronic mailing lists.',0,0,'Topic :: Communications :: Email :: Mailing List Servers','18 :: 20 :: 28 :: 30');
+INSERT INTO trove_cat VALUES (31,2000031601,28,18,'mua','Email Clients (MUA)','Programs for interactively reading and sending Email.',0,0,'Topic :: Communications :: Email :: Email Clients (MUA)','18 :: 20 :: 28 :: 31');
+INSERT INTO trove_cat VALUES (32,2000031601,28,18,'mta','Mail Transport Agents','Email transport and gatewaying software.',0,0,'Topic :: Communications :: Email :: Mail Transport Agents','18 :: 20 :: 28 :: 32');
+INSERT INTO trove_cat VALUES (33,2000031601,28,18,'postoffice','Post-Office','Programs to support post-office protocols, including POP and IMAP.',0,0,'Topic :: Communications :: Email :: Post-Office','18 :: 20 :: 28 :: 33');
+INSERT INTO trove_cat VALUES (34,2000031601,33,18,'pop3','POP3','Programs to support POP3 (Post-Office Protocol, version 3).',0,0,'Topic :: Communications :: Email :: Post-Office :: POP3','18 :: 20 :: 28 :: 33 :: 34');
+INSERT INTO trove_cat VALUES (35,2000031601,33,18,'imap','IMAP','Programs to support IMAP protocol (Internet Message Access Protocol).',0,0,'Topic :: Communications :: Email :: Post-Office :: IMAP','18 :: 20 :: 28 :: 33 :: 35');
+INSERT INTO trove_cat VALUES (36,2000031601,20,18,'fax','Fax','Tools for sending and receiving facsimile messages.',0,0,'Topic :: Communications :: Fax','18 :: 20 :: 36');
+INSERT INTO trove_cat VALUES (37,2000031601,20,18,'fido','FIDO','Tools for FIDOnet mail and echoes.',0,0,'Topic :: Communications :: FIDO','18 :: 20 :: 37');
+INSERT INTO trove_cat VALUES (38,2000031601,20,18,'hamradio','Ham Radio','Tools and resources for amateur radio.',0,0,'Topic :: Communications :: Ham Radio','18 :: 20 :: 38');
+INSERT INTO trove_cat VALUES (39,2000031601,20,18,'usenet','Usenet News','Software to support USENET news.',0,0,'Topic :: Communications :: Usenet News','18 :: 20 :: 39');
+INSERT INTO trove_cat VALUES (40,2000031601,20,18,'internetphone','Internet Phone','Software to support real-time speech communication over the Internet.',0,0,'Topic :: Communications :: Internet Phone','18 :: 20 :: 40');
+INSERT INTO trove_cat VALUES (41,2000031601,19,18,'packaging','Packaging','Tools for packing and unpacking multi-file formats. Includes data-only formats and software package systems.',0,0,'Topic :: System :: Archiving :: Packaging','18 :: 136 :: 19 :: 41');
+INSERT INTO trove_cat VALUES (42,2000031601,19,18,'compression','Compression','Tools and libraries for data compression.',0,0,'Topic :: System :: Archiving :: Compression','18 :: 136 :: 19 :: 42');
+INSERT INTO trove_cat VALUES (43,2000031601,18,18,'security','Security','Security-related software, to include system administration and cryptography.',0,0,'Topic :: Security','18 :: 43');
+INSERT INTO trove_cat VALUES (44,2000031601,43,18,'cryptography','Cryptography','Cryptography programs, algorithms, and libraries.',0,0,'Topic :: Security :: Cryptography','18 :: 43 :: 44');
+INSERT INTO trove_cat VALUES (45,2000031601,18,18,'development','Software Development','Software used to aid software development.',0,0,'Topic :: Software Development','18 :: 45');
+INSERT INTO trove_cat VALUES (46,2000031601,45,18,'build','Build Tools','Software for the build process.',0,0,'Topic :: Software Development :: Build Tools','18 :: 45 :: 46');
+INSERT INTO trove_cat VALUES (47,2000031601,45,18,'debuggers','Debuggers','Programs for controlling and monitoring the execution of compiled binaries.',0,0,'Topic :: Software Development :: Debuggers','18 :: 45 :: 47');
+INSERT INTO trove_cat VALUES (48,2000031601,45,18,'compilers','Compilers','Programs for compiling high-level languges into machine code.',0,0,'Topic :: Software Development :: Compilers','18 :: 45 :: 48');
+INSERT INTO trove_cat VALUES (49,2000031601,45,18,'interpreters','Interpreters','Programs for interpreting and executing high-level languages directly.',0,0,'Topic :: Software Development :: Interpreters','18 :: 45 :: 49');
+INSERT INTO trove_cat VALUES (50,2000031601,45,18,'objectbrokering','Object Brokering','Object brokering libraries and tools.',0,0,'Topic :: Software Development :: Object Brokering','18 :: 45 :: 50');
+INSERT INTO trove_cat VALUES (51,2000031601,50,18,'corba','CORBA','Tools for implementation and use of CORBA.',0,0,'Topic :: Software Development :: Object Brokering :: CORBA','18 :: 45 :: 50 :: 51');
+INSERT INTO trove_cat VALUES (52,2000031601,45,18,'versioncontrol','Version Control','Tools for managing multiple versions of evolving sources or documents.',0,0,'Topic :: Software Development :: Version Control','18 :: 45 :: 52');
+INSERT INTO trove_cat VALUES (53,2000031601,52,18,'cvs','CVS','Tools for CVS (Concurrent Versioning System).',0,0,'Topic :: Software Development :: Version Control :: CVS','18 :: 45 :: 52 :: 53');
+INSERT INTO trove_cat VALUES (54,2000031601,52,18,'rcs','RCS','Tools for RCS (Revision Control System).',0,0,'Topic :: Software Development :: Version Control :: RCS','18 :: 45 :: 52 :: 54');
+INSERT INTO trove_cat VALUES (55,2000031601,18,18,'desktop','Desktop Environment','Accessories, managers, and utilities for your GUI desktop.',0,0,'Topic :: Desktop Environment','18 :: 55');
+INSERT INTO trove_cat VALUES (56,2000031601,55,18,'windowmanagers','Window Managers','Programs that provide window control and application launching.',0,0,'Topic :: Desktop Environment :: Window Managers','18 :: 55 :: 56');
+INSERT INTO trove_cat VALUES (57,2000031601,55,18,'kde','K Desktop Environment (KDE)','Software for the KDE desktop.',0,0,'Topic :: Desktop Environment :: K Desktop Environment (KDE)','18 :: 55 :: 57');
+INSERT INTO trove_cat VALUES (58,2000031601,55,18,'gnome','Gnome','Software for the Gnome desktop.',0,0,'Topic :: Desktop Environment :: Gnome','18 :: 55 :: 58');
+INSERT INTO trove_cat VALUES (59,2000031601,56,18,'enlightenment','Enlightenment','Software for the Enlightenment window manager.',0,0,'Topic :: Desktop Environment :: Window Managers :: Enlightenment','18 :: 55 :: 56 :: 59');
+INSERT INTO trove_cat VALUES (60,2000031601,59,18,'themes','Themes','Themes for the Enlightenment window manager.',0,0,'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes','18 :: 55 :: 56 :: 59 :: 60');
+INSERT INTO trove_cat VALUES (61,2000031601,57,18,'themes','Themes','Themes for KDE.',0,0,'Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes','18 :: 55 :: 57 :: 61');
+INSERT INTO trove_cat VALUES (62,2000031601,55,18,'screensavers','Screen Savers','Screen savers and lockers.',0,0,'Topic :: Desktop Environment :: Screen Savers','18 :: 55 :: 62');
+INSERT INTO trove_cat VALUES (63,2000032001,18,18,'editors','Text Editors','Programs for editing code and documents.',0,0,'Topic :: Text Editors','18 :: 63');
+INSERT INTO trove_cat VALUES (64,2000031601,63,18,'emacs','Emacs','GNU Emacs and its imitators and tools.',0,0,'Topic :: Text Editors :: Emacs','18 :: 63 :: 64');
+INSERT INTO trove_cat VALUES (65,2000031601,63,18,'ide','Integrated Development Environments (IDE)','Complete editing environments for code, including cababilities such as compilation and code building assistance.',0,0,'Topic :: Text Editors :: Integrated Development Environments (IDE)','18 :: 63 :: 65');
+INSERT INTO trove_cat VALUES (66,2000031601,18,18,'database','Database','Front ends, engines, and tools for database work.',0,0,'Topic :: Database','18 :: 66');
+INSERT INTO trove_cat VALUES (67,2000031601,66,18,'engines','Database Engines/Servers','Programs that manage data and provide control via some query language.',0,0,'Topic :: Database :: Database Engines/Servers','18 :: 66 :: 67');
+INSERT INTO trove_cat VALUES (68,2000031601,66,18,'frontends','Front-Ends','Clients and front-ends for generating queries to database engines.',0,0,'Topic :: Database :: Front-Ends','18 :: 66 :: 68');
+INSERT INTO trove_cat VALUES (69,2000031601,63,18,'documentation','Documentation','Tools for the creation and use of documentation.',0,0,'Topic :: Text Editors :: Documentation','18 :: 63 :: 69');
+INSERT INTO trove_cat VALUES (70,2000031601,63,18,'wordprocessors','Word Processors','WYSIWYG word processors.',0,0,'Topic :: Text Editors :: Word Processors','18 :: 63 :: 70');
+INSERT INTO trove_cat VALUES (71,2000031601,18,18,'education','Education','Programs and tools for educating yourself or others.',0,0,'Topic :: Education','18 :: 71');
+INSERT INTO trove_cat VALUES (72,2000031601,71,18,'cai','Computer Aided Instruction (CAI)','Programs for authoring or using Computer Aided Instrution courses.',0,0,'Topic :: Education :: Computer Aided Instruction (CAI)','18 :: 71 :: 72');
+INSERT INTO trove_cat VALUES (73,2000031601,71,18,'testing','Testing','Tools for testing someone''s knowledge on a subject.',0,0,'Topic :: Education :: Testing','18 :: 71 :: 73');
+INSERT INTO trove_cat VALUES (74,2000042701,136,18,'emulators','Emulators','Emulations of foreign operating systme and machines.',0,0,'Topic :: System :: Emulators','18 :: 136 :: 74');
+INSERT INTO trove_cat VALUES (75,2000031701,129,18,'financial','Financial','Programs related to finance.',0,0,'Topic :: Office/Business :: Financial','18 :: 129 :: 75');
+INSERT INTO trove_cat VALUES (76,2000031601,75,18,'accounting','Accounting','Checkbook balancers and accounting programs.',0,0,'Topic :: Office/Business :: Financial :: Accounting','18 :: 129 :: 75 :: 76');
+INSERT INTO trove_cat VALUES (77,2000031601,75,18,'investment','Investment','Programs for assisting in financial investment.',0,0,'Topic :: Office/Business :: Financial :: Investment','18 :: 129 :: 75 :: 77');
+INSERT INTO trove_cat VALUES (78,2000031601,75,18,'spreadsheet','Spreadsheet','Spreadsheet applications.',0,0,'Topic :: Office/Business :: Financial :: Spreadsheet','18 :: 129 :: 75 :: 78');
+INSERT INTO trove_cat VALUES (79,2000031601,75,18,'pointofsale','Point-Of-Sale','Point-Of-Sale applications.',0,0,'Topic :: Office/Business :: Financial :: Point-Of-Sale','18 :: 129 :: 75 :: 79');
+INSERT INTO trove_cat VALUES (80,2000031601,18,18,'games','Games/Entertainment','Games and Entertainment software.',0,0,'Topic :: Games/Entertainment','18 :: 80');
+INSERT INTO trove_cat VALUES (81,2000031601,80,18,'realtimestrategy','Real Time Strategy','Real Time strategy games',0,0,'Topic :: Games/Entertainment :: Real Time Strategy','18 :: 80 :: 81');
+INSERT INTO trove_cat VALUES (82,2000031601,80,18,'firstpersonshooters','First Person Shooters','First Person Shooters.',0,0,'Topic :: Games/Entertainment :: First Person Shooters','18 :: 80 :: 82');
+INSERT INTO trove_cat VALUES (83,2000032401,80,18,'turnbasedstrategy','Turn Based Strategy','Turn Based Strategy',0,0,'Topic :: Games/Entertainment :: Turn Based Strategy','18 :: 80 :: 83');
+INSERT INTO trove_cat VALUES (84,2000031601,80,18,'rpg','Role-Playing','Role-Playing games',0,0,'Topic :: Games/Entertainment :: Role-Playing','18 :: 80 :: 84');
+INSERT INTO trove_cat VALUES (85,2000031601,80,18,'simulation','Simulation','Simulation games',0,0,'Topic :: Games/Entertainment :: Simulation','18 :: 80 :: 85');
+INSERT INTO trove_cat VALUES (86,2000031601,80,18,'mud','Multi-User Dungeons (MUD)','Massively-multiplayer text based games.',0,0,'Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)','18 :: 80 :: 86');
+INSERT INTO trove_cat VALUES (87,2000031601,18,18,'internet','Internet','Tools to assist human access to the Internet.',0,0,'Topic :: Internet','18 :: 87');
+INSERT INTO trove_cat VALUES (88,2000031601,87,18,'finger','Finger','The Finger protocol for getting information about users.',0,0,'Topic :: Internet :: Finger','18 :: 87 :: 88');
+INSERT INTO trove_cat VALUES (89,2000031601,87,18,'ftp','File Transfer Protocol (FTP)','Programs and tools for file transfer via FTP.',0,0,'Topic :: Internet :: File Transfer Protocol (FTP)','18 :: 87 :: 89');
+INSERT INTO trove_cat VALUES (90,2000031601,87,18,'www','WWW/HTTP','Programs and tools for the World Wide Web.',0,0,'Topic :: Internet :: WWW/HTTP','18 :: 87 :: 90');
+INSERT INTO trove_cat VALUES (91,2000031601,90,18,'browsers','Browsers','Web Browsers',0,0,'Topic :: Internet :: WWW/HTTP :: Browsers','18 :: 87 :: 90 :: 91');
+INSERT INTO trove_cat VALUES (92,2000031601,90,18,'dynamic','Dynamic Content','Common Gateway Interface scripting and server-side parsing.',0,0,'Topic :: Internet :: WWW/HTTP :: Dynamic Content','18 :: 87 :: 90 :: 92');
+INSERT INTO trove_cat VALUES (93,2000031601,90,18,'indexing','Indexing/Search','Indexing and search tools for the Web.',0,0,'Topic :: Internet :: WWW/HTTP :: Indexing/Search','18 :: 87 :: 90 :: 93');
+INSERT INTO trove_cat VALUES (94,2000031601,92,18,'counters','Page Counters','Scripts to count numbers of pageviews.',0,0,'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Page Counters','18 :: 87 :: 90 :: 92 :: 94');
+INSERT INTO trove_cat VALUES (95,2000031601,92,18,'messageboards','Message Boards','Online message boards',0,0,'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Message Boards','18 :: 87 :: 90 :: 92 :: 95');
+INSERT INTO trove_cat VALUES (96,2000031601,92,18,'cgi','CGI Tools/Libraries','Tools for the Common Gateway Interface',0,0,'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries','18 :: 87 :: 90 :: 92 :: 96');
+INSERT INTO trove_cat VALUES (97,2000042701,18,18,'scientific','Scientific/Engineering','Scientific applications, to include research, applied and pure mathematics and sciences.',0,0,'Topic :: Scientific/Engineering','18 :: 97');
+INSERT INTO trove_cat VALUES (98,2000031601,97,18,'mathematics','Mathematics','Software to support pure and applied mathematics.',0,0,'Topic :: Scientific/Engineering :: Mathematics','18 :: 97 :: 98');
+INSERT INTO trove_cat VALUES (99,2000031601,18,18,'multimedia','Multimedia','Graphics, sound, video, and multimedia.',0,0,'Topic :: Multimedia','18 :: 99');
+INSERT INTO trove_cat VALUES (100,2000031601,99,18,'graphics','Graphics','Tools and resources for computer graphics.',0,0,'Topic :: Multimedia :: Graphics','18 :: 99 :: 100');
+INSERT INTO trove_cat VALUES (101,2000031601,100,18,'capture','Capture','Support for scanners, cameras, and screen capture.',0,0,'Topic :: Multimedia :: Graphics :: Capture','18 :: 99 :: 100 :: 101');
+INSERT INTO trove_cat VALUES (102,2000031601,101,18,'scanners','Scanners','Support for graphic scanners.',0,0,'Topic :: Multimedia :: Graphics :: Capture :: Scanners','18 :: 99 :: 100 :: 101 :: 102');
+INSERT INTO trove_cat VALUES (103,2000031601,101,18,'cameras','Digital Camera','Digital Camera',0,0,'Topic :: Multimedia :: Graphics :: Capture :: Digital Camera','18 :: 99 :: 100 :: 101 :: 103');
+INSERT INTO trove_cat VALUES (104,2000031601,101,18,'screencapture','Screen Capture','Screen capture tools and processors.',0,0,'Topic :: Multimedia :: Graphics :: Capture :: Screen Capture','18 :: 99 :: 100 :: 101 :: 104');
+INSERT INTO trove_cat VALUES (105,2000031701,100,18,'conversion','Graphics Conversion','Programs which convert between graphics formats.',0,0,'Topic :: Multimedia :: Graphics :: Graphics Conversion','18 :: 99 :: 100 :: 105');
+INSERT INTO trove_cat VALUES (106,2000031701,100,18,'editors','Editors','Drawing, painting, and structured editing programs.',0,0,'Topic :: Multimedia :: Graphics :: Editors','18 :: 99 :: 100 :: 106');
+INSERT INTO trove_cat VALUES (107,2000031701,106,18,'vector','Vector-Based','Vector-Based drawing programs.',0,0,'Topic :: Multimedia :: Graphics :: Editors :: Vector-Based','18 :: 99 :: 100 :: 106 :: 107');
+INSERT INTO trove_cat VALUES (108,2000031701,106,18,'raster','Raster-Based','Raster/Bitmap based drawing programs.',0,0,'Topic :: Multimedia :: Graphics :: Editors :: Raster-Based','18 :: 99 :: 100 :: 106 :: 108');
+INSERT INTO trove_cat VALUES (109,2000031701,100,18,'3dmodeling','3D Modeling','Programs for working with 3D Models.',0,0,'Topic :: Multimedia :: Graphics :: 3D Modeling','18 :: 99 :: 100 :: 109');
+INSERT INTO trove_cat VALUES (110,2000031701,100,18,'3drendering','3D Rendering','Programs which render 3D models.',0,0,'Topic :: Multimedia :: Graphics :: 3D Rendering','18 :: 99 :: 100 :: 110');
+INSERT INTO trove_cat VALUES (111,2000031701,100,18,'presentation','Presentation','Tools for generating presentation graphics and slides.',0,0,'Topic :: Multimedia :: Graphics :: Presentation','18 :: 99 :: 100 :: 111');
+INSERT INTO trove_cat VALUES (112,2000031701,100,18,'viewers','Viewers','Programs that can display various graphics formats.',0,0,'Topic :: Multimedia :: Graphics :: Viewers','18 :: 99 :: 100 :: 112');
+INSERT INTO trove_cat VALUES (113,2000031701,99,18,'sound','Sound/Audio','Tools for generating, editing, analyzing, and playing sound.',0,0,'Topic :: Multimedia :: Sound/Audio','18 :: 99 :: 113');
+INSERT INTO trove_cat VALUES (114,2000031701,113,18,'analysis','Analysis','Sound analysis tools, to include frequency analysis.',0,0,'Topic :: Multimedia :: Sound/Audio :: Analysis','18 :: 99 :: 113 :: 114');
+INSERT INTO trove_cat VALUES (115,2000031701,113,18,'capture','Capture/Recording','Sound capture and recording.',0,0,'Topic :: Multimedia :: Sound/Audio :: Capture/Recording','18 :: 99 :: 113 :: 115');
+INSERT INTO trove_cat VALUES (116,2000031701,113,18,'cdaudio','CD Audio','Programs to play and manipulate audio CDs.',0,0,'Topic :: Multimedia :: Sound/Audio :: CD Audio','18 :: 99 :: 113 :: 116');
+INSERT INTO trove_cat VALUES (117,2000031701,116,18,'cdplay','CD Playing','CD Playing software, to include jukebox software.',0,0,'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing','18 :: 99 :: 113 :: 116 :: 117');
+INSERT INTO trove_cat VALUES (118,2000031701,116,18,'cdripping','CD Ripping','Software to convert CD Audio to other digital formats.',0,0,'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping','18 :: 99 :: 113 :: 116 :: 118');
+INSERT INTO trove_cat VALUES (119,2000031701,113,18,'conversion','Conversion','Programs to convert between audio formats.',0,0,'Topic :: Multimedia :: Sound/Audio :: Conversion','18 :: 99 :: 113 :: 119');
+INSERT INTO trove_cat VALUES (120,2000031701,113,18,'editors','Editors','Programs to edit/manipulate sound data.',0,0,'Topic :: Multimedia :: Sound/Audio :: Editors','18 :: 99 :: 113 :: 120');
+INSERT INTO trove_cat VALUES (121,2000031701,113,18,'mixers','Mixers','Programs to mix audio.',0,0,'Topic :: Multimedia :: Sound/Audio :: Mixers','18 :: 99 :: 113 :: 121');
+INSERT INTO trove_cat VALUES (122,2000031701,113,18,'players','Players','Programs to play audio files to a sound device.',0,0,'Topic :: Multimedia :: Sound/Audio :: Players','18 :: 99 :: 113 :: 122');
+INSERT INTO trove_cat VALUES (123,2000031701,122,18,'mp3','MP3','Programs to play MP3 audio files.',0,0,'Topic :: Multimedia :: Sound/Audio :: Players :: MP3','18 :: 99 :: 113 :: 122 :: 123');
+INSERT INTO trove_cat VALUES (124,2000031701,113,18,'speech','Speech','Speech manipulation and intepretation tools.',0,0,'Topic :: Multimedia :: Sound/Audio :: Speech','18 :: 99 :: 113 :: 124');
+INSERT INTO trove_cat VALUES (125,2000031701,99,18,'video','Video','Video capture, editing, and playback.',0,0,'Topic :: Multimedia :: Video','18 :: 99 :: 125');
+INSERT INTO trove_cat VALUES (126,2000031701,125,18,'capture','Capture','Video capture tools.',0,0,'Topic :: Multimedia :: Video :: Capture','18 :: 99 :: 125 :: 126');
+INSERT INTO trove_cat VALUES (127,2000031701,125,18,'conversion','Conversion','Programs which convert between video formats.',0,0,'Topic :: Multimedia :: Video :: Conversion','18 :: 99 :: 125 :: 127');
+INSERT INTO trove_cat VALUES (128,2000031701,125,18,'display','Display','Programs which display various video formats.',0,0,'Topic :: Multimedia :: Video :: Display','18 :: 99 :: 125 :: 128');
+INSERT INTO trove_cat VALUES (129,2000031701,18,18,'office','Office/Business','Software for assisting and organizing work at your desk.',0,0,'Topic :: Office/Business','18 :: 129');
+INSERT INTO trove_cat VALUES (130,2000031701,129,18,'scheduling','Scheduling','Projects for scheduling time, to include project management.',0,0,'Topic :: Office/Business :: Scheduling','18 :: 129 :: 130');
+INSERT INTO trove_cat VALUES (131,2000032001,129,18,'suites','Office Suites','Integrated office suites (word processing, presentation, spreadsheet, database, etc).',0,0,'Topic :: Office/Business :: Office Suites','18 :: 129 :: 131');
+INSERT INTO trove_cat VALUES (132,2000032001,18,18,'religion','Religion','Programs relating to religion and sacred texts.',0,0,'Topic :: Religion','18 :: 132');
+INSERT INTO trove_cat VALUES (133,2000032001,97,18,'ai','Artificial Intelligence','Artificial Intelligence.',0,0,'Topic :: Scientific/Engineering :: Artificial Intelligence','18 :: 97 :: 133');
+INSERT INTO trove_cat VALUES (134,2000032001,97,18,'astronomy','Astronomy','Software and tools related to astronomy.',0,0,'Topic :: Scientific/Engineering :: Astronomy','18 :: 97 :: 134');
+INSERT INTO trove_cat VALUES (135,2000032001,97,18,'visualization','Visualization','Software for scientific visualization.',0,0,'Topic :: Scientific/Engineering :: Visualization','18 :: 97 :: 135');
+INSERT INTO trove_cat VALUES (136,2000032001,18,18,'system','System','Operating system core and administration utilities.',0,0,'Topic :: System','18 :: 136');
+INSERT INTO trove_cat VALUES (137,2000032001,19,18,'backup','Backup','Programs to manage and sequence system backup.',0,0,'Topic :: System :: Archiving :: Backup','18 :: 136 :: 19 :: 137');
+INSERT INTO trove_cat VALUES (138,2000032001,136,18,'benchmark','Benchmark','Programs for benchmarking system performance.',0,0,'Topic :: System :: Benchmark','18 :: 136 :: 138');
+INSERT INTO trove_cat VALUES (139,2000032001,136,18,'boot','Boot','Programs for bootstrapping your OS.',0,0,'Topic :: System :: Boot','18 :: 136 :: 139');
+INSERT INTO trove_cat VALUES (140,2000032001,139,18,'init','Init','Init-time programs to start system services after boot.',0,0,'Topic :: System :: Boot :: Init','18 :: 136 :: 139 :: 140');
+INSERT INTO trove_cat VALUES (141,2000032001,136,18,'clustering','Clustering/Distributed Networks','Tools for automatically distributing computation across a network.',0,0,'Topic :: System :: Clustering/Distributed Networks','18 :: 136 :: 141');
+INSERT INTO trove_cat VALUES (142,2000032001,136,18,'filesystems','Filesystems','Support for creating, editing, reading, and writing file systems.',0,0,'Topic :: System :: Filesystems','18 :: 136 :: 142');
+INSERT INTO trove_cat VALUES (143,2000032001,144,18,'linux','Linux','The Linux kernel, patches, and modules.',0,0,'Topic :: System :: Operating System Kernels :: Linux','18 :: 136 :: 144 :: 143');
+INSERT INTO trove_cat VALUES (144,2000032001,136,18,'kernels','Operating System Kernels','OS Kernels, patches, modules, and tools.',0,0,'Topic :: System :: Operating System Kernels','18 :: 136 :: 144');
+INSERT INTO trove_cat VALUES (145,2000032001,144,18,'bsd','BSD','Code relating to any of the BSD kernels.',0,0,'Topic :: System :: Operating System Kernels :: BSD','18 :: 136 :: 144 :: 145');
+INSERT INTO trove_cat VALUES (146,2000032001,136,18,'hardware','Hardware','Tools for direct, non-kernel control and configuration of hardware.',0,0,'Topic :: System :: Hardware','18 :: 136 :: 146');
+INSERT INTO trove_cat VALUES (147,2000032001,136,18,'setup','Installation/Setup','Tools for installation and setup of the operating system and other programs.',0,0,'Topic :: System :: Installation/Setup','18 :: 136 :: 147');
+INSERT INTO trove_cat VALUES (148,2000032001,136,18,'logging','Logging','Utilities for clearing, rotating, and digesting system logs.',0,0,'Topic :: System :: Logging','18 :: 136 :: 148');
+INSERT INTO trove_cat VALUES (149,2000032001,87,18,'dns','Name Service (DNS)','Domain name system servers and utilities.',0,0,'Topic :: Internet :: Name Service (DNS)','18 :: 87 :: 149');
+INSERT INTO trove_cat VALUES (150,2000032001,136,18,'networking','Networking','Network configuration and administration.',0,0,'Topic :: System :: Networking','18 :: 136 :: 150');
+INSERT INTO trove_cat VALUES (151,2000032001,150,18,'firewalls','Firewalls','Firewalls and filtering systems.',0,0,'Topic :: System :: Networking :: Firewalls','18 :: 136 :: 150 :: 151');
+INSERT INTO trove_cat VALUES (152,2000032001,150,18,'monitoring','Monitoring','System monitoring, traffic analysis, and sniffers.',0,0,'Topic :: System :: Networking :: Monitoring','18 :: 136 :: 150 :: 152');
+INSERT INTO trove_cat VALUES (153,2000032001,136,18,'power','Power (UPS)','Code for communication with uninterruptible power supplies.',0,0,'Topic :: System :: Power (UPS)','18 :: 136 :: 153');
+INSERT INTO trove_cat VALUES (154,2000032001,18,18,'printing','Printing','Tools, daemons, and utilities for printer control.',0,0,'Topic :: Printing','18 :: 154');
+INSERT INTO trove_cat VALUES (155,2000032001,152,18,'watchdog','Hardware Watchdog','Software to monitor and perform actions or shutdown on hardware trouble detection.',0,0,'Topic :: System :: Networking :: Monitoring :: Hardware Watchdog','18 :: 136 :: 150 :: 152 :: 155');
+INSERT INTO trove_cat VALUES (156,2000032001,18,18,'terminals','Terminals','Terminal emulators, terminal programs, and terminal session utilities.',0,0,'Topic :: Terminals','18 :: 156');
+INSERT INTO trove_cat VALUES (157,2000032001,156,18,'serial','Serial','Dialup, terminal emulation, and file transfer over serial lines.',0,0,'Topic :: Terminals :: Serial','18 :: 156 :: 157');
+INSERT INTO trove_cat VALUES (158,2000032001,156,18,'virtual','Terminal Emulators/X Terminals','Programs to handle multiple terminal sessions. Includes terminal emulations for X and other window systems.',0,0,'Topic :: Terminals :: Terminal Emulators/X Terminals','18 :: 156 :: 158');
+INSERT INTO trove_cat VALUES (159,2000032001,156,18,'telnet','Telnet','Support for telnet; terminal sessions across Internet links.',0,0,'Topic :: Terminals :: Telnet','18 :: 156 :: 159');
+INSERT INTO trove_cat VALUES (160,2000032001,0,0,'language','Programming Language','Language in which this program was written, or was meant to support.',0,0,'Programming Language','160');
+INSERT INTO trove_cat VALUES (161,2000032001,160,160,'apl','APL','APL',0,0,'Programming Language :: APL','160 :: 161');
+INSERT INTO trove_cat VALUES (164,2000032001,160,160,'c','C','C',0,0,'Programming Language :: C','160 :: 164');
+INSERT INTO trove_cat VALUES (162,2000032001,160,160,'assembly','Assembly','Assembly-level programs. Platform specific.',0,0,'Programming Language :: Assembly','160 :: 162');
+INSERT INTO trove_cat VALUES (163,2000051001,160,160,'ada','Ada','Ada',0,0,'Programming Language :: Ada','160 :: 163');
+INSERT INTO trove_cat VALUES (165,2000032001,160,160,'cpp','C++','C++',0,0,'Programming Language :: C++','160 :: 165');
+INSERT INTO trove_cat VALUES (166,2000032401,160,160,'eiffel','Eiffel','Eiffel',0,0,'Programming Language :: Eiffel','160 :: 166');
+INSERT INTO trove_cat VALUES (167,2000032001,160,160,'euler','Euler','Euler',0,0,'Programming Language :: Euler','160 :: 167');
+INSERT INTO trove_cat VALUES (168,2000032001,160,160,'forth','Forth','Forth',0,0,'Programming Language :: Forth','160 :: 168');
+INSERT INTO trove_cat VALUES (169,2000032001,160,160,'fortran','Fortran','Fortran',0,0,'Programming Language :: Fortran','160 :: 169');
+INSERT INTO trove_cat VALUES (170,2000032001,160,160,'lisp','Lisp','Lisp',0,0,'Programming Language :: Lisp','160 :: 170');
+INSERT INTO trove_cat VALUES (171,2000041101,160,160,'logo','Logo','Logo',0,0,'Programming Language :: Logo','160 :: 171');
+INSERT INTO trove_cat VALUES (172,2000032001,160,160,'ml','ML','ML',0,0,'Programming Language :: ML','160 :: 172');
+INSERT INTO trove_cat VALUES (173,2000032001,160,160,'modula','Modula','Modula-2 or Modula-3',0,0,'Programming Language :: Modula','160 :: 173');
+INSERT INTO trove_cat VALUES (174,2000032001,160,160,'objectivec','Objective C','Objective C',0,0,'Programming Language :: Objective C','160 :: 174');
+INSERT INTO trove_cat VALUES (175,2000032001,160,160,'pascal','Pascal','Pascal',0,0,'Programming Language :: Pascal','160 :: 175');
+INSERT INTO trove_cat VALUES (176,2000032001,160,160,'perl','Perl','Perl',0,0,'Programming Language :: Perl','160 :: 176');
+INSERT INTO trove_cat VALUES (177,2000032001,160,160,'prolog','Prolog','Prolog',0,0,'Programming Language :: Prolog','160 :: 177');
+INSERT INTO trove_cat VALUES (178,2000032001,160,160,'python','Python','Python',0,0,'Programming Language :: Python','160 :: 178');
+INSERT INTO trove_cat VALUES (179,2000032001,160,160,'rexx','Rexx','Rexx',0,0,'Programming Language :: Rexx','160 :: 179');
+INSERT INTO trove_cat VALUES (180,2000032001,160,160,'simula','Simula','Simula',0,0,'Programming Language :: Simula','160 :: 180');
+INSERT INTO trove_cat VALUES (181,2000032001,160,160,'smalltalk','Smalltalk','Smalltalk',0,0,'Programming Language :: Smalltalk','160 :: 181');
+INSERT INTO trove_cat VALUES (182,2000032001,160,160,'tcl','Tcl','Tcl',0,0,'Programming Language :: Tcl','160 :: 182');
+INSERT INTO trove_cat VALUES (183,2000032001,160,160,'php','PHP','PHP',0,0,'Programming Language :: PHP','160 :: 183');
+INSERT INTO trove_cat VALUES (184,2000032001,160,160,'asp','ASP','Active Server Pages',0,0,'Programming Language :: ASP','160 :: 184');
+INSERT INTO trove_cat VALUES (185,2000032001,160,160,'shell','Unix Shell','Unix Shell',0,0,'Programming Language :: Unix Shell','160 :: 185');
+INSERT INTO trove_cat VALUES (186,2000032001,160,160,'visualbasic','Visual Basic','Visual Basic',0,0,'Programming Language :: Visual Basic','160 :: 186');
+INSERT INTO trove_cat VALUES (187,2000032001,14,13,'bsd','BSD License','BSD License',0,0,'License :: OSI Approved :: BSD License','13 :: 14 :: 187');
+INSERT INTO trove_cat VALUES (188,2000032001,14,13,'mit','MIT/X Consortium License','MIT License, also the X Consortium License.',0,0,'License :: OSI Approved :: MIT/X Consortium License','13 :: 14 :: 188');
+INSERT INTO trove_cat VALUES (189,2000032001,14,13,'mpl','Mozilla Public License (MPL)','Mozilla Public License (MPL)',0,0,'License :: OSI Approved :: Mozilla Public License (MPL)','13 :: 14 :: 189');
+INSERT INTO trove_cat VALUES (190,2000032001,14,13,'qpl','QT Public License (QPL)','QT Public License',0,0,'License :: OSI Approved :: QT Public License (QPL)','13 :: 14 :: 190');
+INSERT INTO trove_cat VALUES (191,2000032001,14,13,'ibm','IBM Public License','IBM Public License',0,0,'License :: OSI Approved :: IBM Public License','13 :: 14 :: 191');
+INSERT INTO trove_cat VALUES (192,2000032001,14,13,'cvw','MITRE Collaborative Virtual Workspace License (CVW)','MITRE Collaborative Virtual Workspace License (CVW)',0,0,'License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)','13 :: 14 :: 192');
+INSERT INTO trove_cat VALUES (193,2000032001,14,13,'ricoh','Ricoh Source Code Public License','Ricoh Source Code Public License',0,0,'License :: OSI Approved :: Ricoh Source Code Public License','13 :: 14 :: 193');
+INSERT INTO trove_cat VALUES (194,2000032001,14,13,'python','Python License','Python License',0,0,'License :: OSI Approved :: Python License','13 :: 14 :: 194');
+INSERT INTO trove_cat VALUES (195,2000032001,14,13,'zlib','zlib/libpng License','zlib/libpng License',0,0,'License :: OSI Approved :: zlib/libpng License','13 :: 14 :: 195');
+INSERT INTO trove_cat VALUES (196,2000040701,13,13,'other','Other/Proprietary License','Non OSI-Approved/Proprietary license.',0,0,'License :: Other/Proprietary License','13 :: 196');
+INSERT INTO trove_cat VALUES (197,2000032001,13,13,'publicdomain','Public Domain','Public Domain. No author-retained rights.',0,0,'License :: Public Domain','13 :: 197');
+INSERT INTO trove_cat VALUES (198,2000032001,160,160,'java','Java','Java',0,0,'Programming Language :: Java','160 :: 198');
+INSERT INTO trove_cat VALUES (199,2000032101,0,0,'os','Operating System','What operating system the program requires to run, if any.',0,0,'Operating System','199');
+INSERT INTO trove_cat VALUES (200,2000032101,199,199,'posix','POSIX','POSIX plus standard Berkeley socket facilities. Don''t list a more specific OS unless your program requires it.',0,0,'Operating System :: POSIX','199 :: 200');
+INSERT INTO trove_cat VALUES (201,2000032101,200,199,'linux','Linux','Any version of Linux. Don''t specify a subcategory unless the program requires a particular distribution.',0,0,'Operating System :: POSIX :: Linux','199 :: 200 :: 201');
+INSERT INTO trove_cat VALUES (202,2000032101,200,199,'bsd','BSD','Any variant of BSD. Don''t specify a subcategory unless the program requires a particular BSD flavor.',0,0,'Operating System :: POSIX :: BSD','199 :: 200 :: 202');
+INSERT INTO trove_cat VALUES (203,2000041101,202,199,'freebsd','FreeBSD','FreeBSD',0,0,'Operating System :: POSIX :: BSD :: FreeBSD','199 :: 200 :: 202 :: 203');
+INSERT INTO trove_cat VALUES (204,2000032101,202,199,'netbsd','NetBSD','NetBSD',0,0,'Operating System :: POSIX :: BSD :: NetBSD','199 :: 200 :: 202 :: 204');
+INSERT INTO trove_cat VALUES (205,2000032101,202,199,'openbsd','OpenBSD','OpenBSD',0,0,'Operating System :: POSIX :: BSD :: OpenBSD','199 :: 200 :: 202 :: 205');
+INSERT INTO trove_cat VALUES (206,2000032101,202,199,'bsdos','BSD/OS','BSD/OS',0,0,'Operating System :: POSIX :: BSD :: BSD/OS','199 :: 200 :: 202 :: 206');
+INSERT INTO trove_cat VALUES (207,2000032101,200,199,'sun','SunOS/Solaris','Any Sun Microsystems OS.',0,0,'Operating System :: POSIX :: SunOS/Solaris','199 :: 200 :: 207');
+INSERT INTO trove_cat VALUES (208,2000032101,200,199,'sco','SCO','SCO',0,0,'Operating System :: POSIX :: SCO','199 :: 200 :: 208');
+INSERT INTO trove_cat VALUES (209,2000032101,200,199,'hpux','HP-UX','HP-UX',0,0,'Operating System :: POSIX :: HP-UX','199 :: 200 :: 209');
+INSERT INTO trove_cat VALUES (210,2000032101,200,199,'aix','AIX','AIX',0,0,'Operating System :: POSIX :: AIX','199 :: 200 :: 210');
+INSERT INTO trove_cat VALUES (211,2000032101,200,199,'irix','IRIX','IRIX',0,0,'Operating System :: POSIX :: IRIX','199 :: 200 :: 211');
+INSERT INTO trove_cat VALUES (212,2000032101,200,199,'other','Other','Other specific POSIX OS, specified in description.',0,0,'Operating System :: POSIX :: Other','199 :: 200 :: 212');
+INSERT INTO trove_cat VALUES (213,2000032101,160,160,'other','Other','Other programming language, specified in description.',0,0,'Programming Language :: Other','160 :: 213');
+INSERT INTO trove_cat VALUES (214,2000032101,199,199,'microsoft','Microsoft','Microsoft operating systems.',0,0,'Operating System :: Microsoft','199 :: 214');
+INSERT INTO trove_cat VALUES (215,2000032101,214,199,'msdos','MS-DOS','Microsoft Disk Operating System (DOS)',0,0,'Operating System :: Microsoft :: MS-DOS','199 :: 214 :: 215');
+INSERT INTO trove_cat VALUES (216,2000032101,214,199,'windows','Windows','Windows software, not specific to any particular version of Windows.',0,0,'Operating System :: Microsoft :: Windows','199 :: 214 :: 216');
+INSERT INTO trove_cat VALUES (217,2000032101,216,199,'win31','Windows 3.1 or Earlier','Windows 3.1 or Earlier',0,0,'Operating System :: Microsoft :: Windows :: Windows 3.1 or Earlier','199 :: 214 :: 216 :: 217');
+INSERT INTO trove_cat VALUES (218,2000032101,216,199,'win95','Windows 95/98/2000','Windows 95, Windows 98, and Windows 2000.',0,0,'Operating System :: Microsoft :: Windows :: Windows 95/98/2000','199 :: 214 :: 216 :: 218');
+INSERT INTO trove_cat VALUES (219,2000041101,216,199,'winnt','Windows NT/2000','Windows NT and Windows 2000.',0,0,'Operating System :: Microsoft :: Windows :: Windows NT/2000','199 :: 214 :: 216 :: 219');
+INSERT INTO trove_cat VALUES (220,2000032101,199,199,'os2','OS/2','OS/2',0,0,'Operating System :: OS/2','199 :: 220');
+INSERT INTO trove_cat VALUES (221,2000032101,199,199,'macos','MacOS','MacOS',0,0,'Operating System :: MacOS','199 :: 221');
+INSERT INTO trove_cat VALUES (222,2000032101,216,199,'wince','Windows CE','Windows CE',0,0,'Operating System :: Microsoft :: Windows :: Windows CE','199 :: 214 :: 216 :: 222');
+INSERT INTO trove_cat VALUES (223,2000032101,199,199,'palmos','PalmOS','PalmOS (for Palm Pilot)',0,0,'Operating System :: PalmOS','199 :: 223');
+INSERT INTO trove_cat VALUES (224,2000032101,199,199,'beos','BeOS','BeOS',0,0,'Operating System :: BeOS','199 :: 224');
+INSERT INTO trove_cat VALUES (225,2000032101,0,0,'environment','Environment','Run-time environment required for this program.',0,0,'Environment','225');
+INSERT INTO trove_cat VALUES (226,2000041101,225,225,'console','Console (Text Based)','Console-based programs.',0,0,'Environment :: Console (Text Based)','225 :: 226');
+INSERT INTO trove_cat VALUES (227,2000032401,226,225,'curses','Curses','Curses-based software.',0,0,'Environment :: Console (Text Based) :: Curses','225 :: 226 :: 227');
+INSERT INTO trove_cat VALUES (228,2000040701,226,225,'newt','Newt','Newt',0,0,'Environment :: Console (Text Based) :: Newt','225 :: 226 :: 228');
+INSERT INTO trove_cat VALUES (229,2000040701,225,225,'x11','X11 Applications','Programs that run in an X windowing environment.',0,0,'Environment :: X11 Applications','225 :: 229');
+INSERT INTO trove_cat VALUES (230,2000040701,225,225,'win32','Win32 (MS Windows)','Programs designed to run in a graphical Microsoft Windows environment.',0,0,'Environment :: Win32 (MS Windows)','225 :: 230');
+INSERT INTO trove_cat VALUES (231,2000040701,229,225,'gnome','Gnome','Programs designed to run in a Gnome environment.',0,0,'Environment :: X11 Applications :: Gnome','225 :: 229 :: 231');
+INSERT INTO trove_cat VALUES (232,2000040701,229,225,'kde','KDE','Programs designed to run in a KDE environment.',0,0,'Environment :: X11 Applications :: KDE','225 :: 229 :: 232');
+INSERT INTO trove_cat VALUES (233,2000040701,225,225,'other','Other Environment','Programs designed to run in an environment other than one listed.',0,0,'Environment :: Other Environment','225 :: 233');
+INSERT INTO trove_cat VALUES (234,2000040701,18,18,'other','Other/Nonlisted Topic','Topic does not fit into any listed category.',0,0,'Topic :: Other/Nonlisted Topic','18 :: 234');
+INSERT INTO trove_cat VALUES (235,2000041001,199,199,'independent','OS Independent','This software does not depend on any particular operating system.',0,0,'Operating System :: OS Independent','199 :: 235');
+INSERT INTO trove_cat VALUES (236,2000040701,199,199,'other','Other OS','Program is designe for a nonlisted operating system.',0,0,'Operating System :: Other OS','199 :: 236');
+INSERT INTO trove_cat VALUES (237,2000041001,225,225,'web','Web Environment','This software is designed for a web environment.',0,0,'Environment :: Web Environment','225 :: 237');
+INSERT INTO trove_cat VALUES (238,2000041101,225,225,'daemon','No Input/Output (Daemon)','This program has no input or output, but is intended to run in the background as a daemon.',0,0,'Environment :: No Input/Output (Daemon)','225 :: 238');
+INSERT INTO trove_cat VALUES (239,2000041301,144,18,'gnuhurd','GNU Hurd','Kernel code and modules for GNU Hurd.',0,0,'Topic :: System :: Operating System Kernels :: GNU Hurd','18 :: 136 :: 144 :: 239');
+INSERT INTO trove_cat VALUES (240,2000041301,200,199,'gnuhurd','GNU Hurd','GNU Hurd',0,0,'Operating System :: POSIX :: GNU Hurd','199 :: 200 :: 240');
+INSERT INTO trove_cat VALUES (241,2000050101,251,18,'napster','Napster','Clients and servers for the Napster file sharing protocol.',0,0,'Topic :: Communications :: File Sharing :: Napster','18 :: 20 :: 251 :: 241');
+INSERT INTO trove_cat VALUES (242,2000042701,160,160,'scheme','Scheme','Scheme programming language.',0,0,'Programming Language :: Scheme','160 :: 242');
+INSERT INTO trove_cat VALUES (243,2000042701,90,18,'sitemanagement','Site Management','Tools for maintanance and management of web sites.',0,0,'Topic :: Internet :: WWW/HTTP :: Site Management','18 :: 87 :: 90 :: 243');
+INSERT INTO trove_cat VALUES (244,2000042701,243,18,'linkchecking','Link Checking','Tools to assist in checking for broken links.',0,0,'Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking','18 :: 87 :: 90 :: 243 :: 244');
+INSERT INTO trove_cat VALUES (245,2000042701,87,18,'loganalysis','Log Analysis','Software to help analyze various log files.',0,0,'Topic :: Internet :: Log Analysis','18 :: 87 :: 245');
+INSERT INTO trove_cat VALUES (246,2000042701,97,18,'eda','Electronic Design Automation (EDA)','Tools for circuit design, schematics, board layout, and more.',0,0,'Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)','18 :: 97 :: 246');
+INSERT INTO trove_cat VALUES (247,2000042701,20,18,'telephony','Telephony','Telephony related applications, to include automated voice response systems.',0,0,'Topic :: Communications :: Telephony','18 :: 20 :: 247');
+INSERT INTO trove_cat VALUES (248,2000042801,113,18,'midi','MIDI','Software related to MIDI synthesis and playback.',0,0,'Topic :: Multimedia :: Sound/Audio :: MIDI','18 :: 99 :: 113 :: 248');
+INSERT INTO trove_cat VALUES (249,2000042801,113,18,'synthesis','Sound Synthesis','Software for creation and synthesis of sound.',0,0,'Topic :: Multimedia :: Sound/Audio :: Sound Synthesis','18 :: 99 :: 113 :: 249');
+INSERT INTO trove_cat VALUES (250,2000042801,90,18,'httpservers','HTTP Servers','Software designed to serve content via the HTTP protocol.',0,0,'Topic :: Internet :: WWW/HTTP :: HTTP Servers','18 :: 87 :: 90 :: 250');
+INSERT INTO trove_cat VALUES (251,2000050101,20,18,'filesharing','File Sharing','Software for person-to-person online file sharing.',0,0,'Topic :: Communications :: File Sharing','18 :: 20 :: 251');
+INSERT INTO trove_cat VALUES (252,2000071101,97,18,'bioinformatics','Bio-Informatics','Category for gene software (e.g. Gene Ontology)',0,0,'Topic :: Scientific/Engineering :: Bio-Informatics','18 :: 97 :: 252');
+INSERT INTO trove_cat VALUES (253,2000071101,136,18,'sysadministration','Systems Administration','Systems Administration Software (e.g. configuration apps.)',0,0,'Topic :: System :: Systems Administration','18 :: 136 :: 253');
+INSERT INTO trove_cat VALUES (254,2000071101,160,160,'plsql','PL/SQL','PL/SQL Programming Language',0,0,'Programming Language :: PL/SQL','160 :: 254');
+INSERT INTO trove_cat VALUES (255,2000071101,160,160,'progress','PROGRESS','PROGRESS Programming Language',0,0,'Programming Language :: PROGRESS','160 :: 255');
+INSERT INTO trove_cat VALUES (256,2000071101,125,18,'nonlineareditor','Non-Linear Editor','Video Non-Linear Editors',0,0,'Topic :: Multimedia :: Video :: Non-Linear Editor','18 :: 99 :: 125 :: 256');
+INSERT INTO trove_cat VALUES (257,2000071101,136,18,'softwaredist','Software Distribution','Systems software for distributing other software.',0,0,'Topic :: System :: Software Distribution','18 :: 136 :: 257');
+INSERT INTO trove_cat VALUES (258,2000071101,160,160,'objectpascal','Object Pascal','Object Pascal',0,0,'Programming Language :: Object Pascal','160 :: 258');
+INSERT INTO trove_cat VALUES (259,2000071401,45,18,'codegen','Code Generators','Code Generators',0,0,'Topic :: Software Development :: Code Generators','18 :: 45 :: 259');
+INSERT INTO trove_cat VALUES (260,2000071401,52,18,'SCCS','SCCS','SCCS',0,0,'Topic :: Software Development :: Version Control :: SCCS','18 :: 45 :: 52 :: 260');
+INSERT INTO trove_cat VALUES (261,2000072501,160,160,'xbasic','XBasic','XBasic programming language',0,0,'Programming Language :: XBasic','160 :: 261');
+INSERT INTO trove_cat VALUES (262,2000073101,160,160,'coldfusion','Cold Fusion','Cold Fusion Language',0,0,'Programming Language :: Cold Fusion','160 :: 262');
+INSERT INTO trove_cat VALUES (263,2000080401,160,160,'euphoria','Euphoria','Euphoria programming language - http://www.rapideuphoria.com/',0,0,'Programming Language :: Euphoria','160 :: 263');
+INSERT INTO trove_cat VALUES (264,2000080701,160,160,'erlang','Erlang','Erlang - developed by Ericsson - http://www.erlang.org/',0,0,'Programming Language :: Erlang','160 :: 264');
+INSERT INTO trove_cat VALUES (265,2000080801,160,160,'Delphi','Delphi','Borland/Inprise Delphi',0,0,'Programming Language :: Delphi','160 :: 265');
+INSERT INTO trove_cat VALUES (266,2000081601,97,18,'medical','Medical Science Apps.','Medical / BioMedical Science Apps.',0,0,'Topic :: Scientific/Engineering :: Medical Science Apps.','18 :: 97 :: 266');
+INSERT INTO trove_cat VALUES (267,2000082001,160,160,'zope','Zope','Zope Object Publishing',0,0,'Programming Language :: Zope','160 :: 267');
+INSERT INTO trove_cat VALUES (268,2000082101,80,18,'Puzzles','Puzzle Games','Puzzle Games',0,0,'Topic :: Games/Entertainment :: Puzzle Games','18 :: 80 :: 268');
+INSERT INTO trove_cat VALUES (269,2000082801,160,160,'asm','Assembly','ASM programming',0,0,'Programming Language :: Assembly','160 :: 269');
+

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5_oci8.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5_oci8.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5_oci8.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,5322 @@
+--
+-- Selected TOC Entries:
+--
+--\connect - tperdue
+--
+-- TOC Entry ID 2 (OID 18138427)
+--
+-- Name: bug_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 182 (OID 18138445)
+--
+-- Name: bug Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug (
+	bug_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	status_id number(*) DEFAULT '0' NOT NULL,
+	priority number(*) DEFAULT '0' NOT NULL,
+	category_id number(*) DEFAULT '0' NOT NULL,
+	submitted_by number(*) DEFAULT '0' NOT NULL,
+	assigned_to number(*) DEFAULT '0' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL,
+	summary varchar2(4000),
+	details varchar2(4000),
+	close_date number(*),
+	bug_group_id number(*) DEFAULT '0' NOT NULL,
+	resolution_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (bug_id)
+);
+
+--
+-- TOC Entry ID 4 (OID 18138495)
+--
+-- Name: bug_bug_dependencies_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_bug_dependencies_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 183 (OID 18138513)
+--
+-- Name: bug_bug_dependencies Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_bug_dependencies (
+	bug_depend_id number(*) NOT NULL,
+	bug_id number(*) DEFAULT '0' NOT NULL,
+	is_dependent_on_bug_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (bug_depend_id)
+);
+
+--
+-- TOC Entry ID 6 (OID 18138531)
+--
+-- Name: bug_canned_responses_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_canned_responses_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 184 (OID 18138549)
+--
+-- Name: bug_canned_responses Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_canned_responses (
+	bug_canned_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	title varchar2(4000),
+	body varchar2(4000),
+	PRIMARY KEY (bug_canned_id)
+);
+
+--
+-- TOC Entry ID 8 (OID 18138582)
+--
+-- Name: bug_category_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_category_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 185 (OID 18138600)
+--
+-- Name: bug_category Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_category (
+	bug_category_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	category_name varchar2(4000),
+	PRIMARY KEY (bug_category_id)
+);
+
+--
+-- TOC Entry ID 10 (OID 18138632)
+--
+-- Name: bug_filter_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_filter_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 186 (OID 18138650)
+--
+-- Name: bug_filter Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_filter (
+	filter_id number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	sql_clause varchar2(4000) DEFAULT ' ' NOT NULL,
+	is_active number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (filter_id)
+);
+
+--
+-- TOC Entry ID 12 (OID 18138687)
+--
+-- Name: bug_group_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_group_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 187 (OID 18138705)
+--
+-- Name: bug_group Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_group (
+	bug_group_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	group_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (bug_group_id)
+);
+
+--
+-- TOC Entry ID 14 (OID 18138738)
+--
+-- Name: bug_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 188 (OID 18138756)
+--
+-- Name: bug_history Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_history (
+	bug_history_id number(*) NOT NULL,
+	bug_id number(*) DEFAULT '0' NOT NULL,
+	field_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	old_value varchar2(4000) DEFAULT ' ' NOT NULL,
+	mod_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*),
+	PRIMARY KEY (bug_history_id)
+);
+
+--
+-- TOC Entry ID 16 (OID 18138794)
+--
+-- Name: bug_resolution_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_resolution_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 189 (OID 18138812)
+--
+-- Name: bug_resolution Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_resolution (
+	resolution_id number(*) NOT NULL,
+	resolution_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (resolution_id)
+);
+
+--
+-- TOC Entry ID 18 (OID 18138843)
+--
+-- Name: bug_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 190 (OID 18138861)
+--
+-- Name: bug_status Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_status (
+	status_id number(*) NOT NULL,
+	status_name varchar2(4000),
+	PRIMARY KEY (status_id)
+);
+
+--
+-- TOC Entry ID 20 (OID 18138891)
+--
+-- Name: bug_task_dependencies_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE bug_task_dependencies_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 191 (OID 18138909)
+--
+-- Name: bug_task_dependencies Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE bug_task_dependencies (
+	bug_depend_id number(*) NOT NULL,
+	bug_id number(*) DEFAULT '0' NOT NULL,
+	is_dependent_on_task_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (bug_depend_id)
+);
+
+--
+-- TOC Entry ID 22 (OID 18138927)
+--
+-- Name: canned_responses_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE canned_responses_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 192 (OID 18138946)
+--
+-- Name: canned_responses Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE canned_responses (
+	response_id number(*) NOT NULL,
+	response_title character varying(25),
+	response_text varchar2(4000),
+	PRIMARY KEY (response_id)
+);
+
+--
+-- TOC Entry ID 24 (OID 18138977)
+--
+-- Name: db_images_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE db_images_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 193 (OID 18138995)
+--
+-- Name: db_images Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE db_images (
+	id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	description varchar2(4000) DEFAULT ' ' NOT NULL,
+	bin_data varchar2(4000) DEFAULT ' ' NOT NULL,
+	filename varchar2(4000) DEFAULT ' ' NOT NULL,
+	filesize number(*) DEFAULT '0' NOT NULL,
+	filetype varchar2(4000) DEFAULT ' ' NOT NULL,
+	width number(*) DEFAULT '0' NOT NULL,
+	height number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 26 (OID 18139040)
+--
+-- Name: doc_data_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE doc_data_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 194 (OID 18139058)
+--
+-- Name: doc_data Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE doc_data (
+	docid number(*) NOT NULL,
+	stateid number(*) DEFAULT '0' NOT NULL,
+	title character varying(255) DEFAULT ' ' NOT NULL,
+	data varchar2(4000) DEFAULT ' ' NOT NULL,
+	updatedate1 number(*) DEFAULT '0' NOT NULL,
+	createdate1 number(*) DEFAULT '0' NOT NULL,
+	created_by number(*) DEFAULT '0' NOT NULL,
+	doc_group number(*) DEFAULT '0' NOT NULL,
+	description varchar2(4000),
+	language_id number(*) DEFAULT '1' NOT NULL,
+	PRIMARY KEY (docid)
+);
+
+--
+-- TOC Entry ID 28 (OID 18139104)
+--
+-- Name: doc_groups_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE doc_groups_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 195 (OID 18139122)
+--
+-- Name: doc_groups Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE doc_groups (
+	doc_group number(*) NOT NULL,
+	groupname character varying(255) DEFAULT ' ' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (doc_group)
+);
+
+--
+-- TOC Entry ID 30 (OID 18139140)
+--
+-- Name: doc_states_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE doc_states_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 196 (OID 18139158)
+--
+-- Name: doc_states Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE doc_states (
+	stateid number(*) NOT NULL,
+	name character varying(255) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (stateid)
+);
+
+--
+-- TOC Entry ID 32 (OID 18139174)
+--
+-- Name: filemodule_monitor_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE filemodule_monitor_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 197 (OID 18139192)
+--
+-- Name: filemodule_monitor Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE filemodule_monitor (
+	id number(*) NOT NULL,
+	filemodule_id number(*) DEFAULT '0' NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 34 (OID 18139210)
+--
+-- Name: forum_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE forum_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 198 (OID 18139228)
+--
+-- Name: forum Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE forum (
+	msg_id number(*) NOT NULL,
+	group_forum_id number(*) DEFAULT '0' NOT NULL,
+	posted_by number(*) DEFAULT '0' NOT NULL,
+	subject varchar2(4000) DEFAULT ' ' NOT NULL,
+	body varchar2(4000) DEFAULT ' ' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL,
+	is_followup_to number(*) DEFAULT '0' NOT NULL,
+	thread_id number(*) DEFAULT '0' NOT NULL,
+	has_followups number(*) DEFAULT '0',
+	most_recent_date number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (msg_id)
+);
+
+--
+-- TOC Entry ID 199 (OID 18139275)
+--
+-- Name: forum_agg_msg_count Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE forum_agg_msg_count (
+	group_forum_id number(*) DEFAULT '0' NOT NULL,
+	count number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (group_forum_id)
+);
+
+--
+-- TOC Entry ID 36 (OID 18139291)
+--
+-- Name: forum_group_list_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE forum_group_list_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 200 (OID 18139309)
+--
+-- Name: forum_group_list Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE forum_group_list (
+	group_forum_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	forum_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	is_public number(*) DEFAULT '0' NOT NULL,
+	description varchar2(4000),
+	allow_anonymous number(*) DEFAULT '0' NOT NULL,
+	send_all_posts_to varchar2(4000),
+	PRIMARY KEY (group_forum_id)
+);
+
+--
+-- TOC Entry ID 38 (OID 18139348)
+--
+-- Name: forum_monitor_forums_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE forum_monitor_forums_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 201 (OID 18139366)
+--
+-- Name: forum_monitored_forums Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE forum_monitored_forums (
+	monitor_id number(*) NOT NULL,
+	forum_id number(*) DEFAULT '0' NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (monitor_id)
+);
+
+--
+-- TOC Entry ID 40 (OID 18139384)
+--
+-- Name: forum_saved_place_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE forum_saved_place_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 202 (OID 18139402)
+--
+-- Name: forum_saved_place Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE forum_saved_place (
+	saved_place_id number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	forum_id number(*) DEFAULT '0' NOT NULL,
+	save_date number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (saved_place_id)
+);
+
+--
+-- TOC Entry ID 203 (OID 18139454)
+--
+-- Name: foundry_data Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE foundry_data (
+	foundry_id number(*) DEFAULT '0' NOT NULL,
+	freeform1_html varchar2(4000),
+	freeform2_html varchar2(4000),
+	sponsor1_html varchar2(4000),
+	sponsor2_html varchar2(4000),
+	guide_image_id number(*) DEFAULT '0' NOT NULL,
+	logo_image_id number(*) DEFAULT '0' NOT NULL,
+	trove_categories varchar2(4000),
+	PRIMARY KEY (foundry_id)
+);
+
+--
+-- TOC Entry ID 42 (OID 18139492)
+--
+-- Name: foundry_news_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE foundry_news_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 204 (OID 18139510)
+--
+-- Name: foundry_news Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE foundry_news (
+	foundry_news_id number(*) NOT NULL,
+	foundry_id number(*) DEFAULT '0' NOT NULL,
+	news_id number(*) DEFAULT '0' NOT NULL,
+	approve_date number(*) DEFAULT '0' NOT NULL,
+	is_approved number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (foundry_news_id)
+);
+
+--
+-- TOC Entry ID 44 (OID 18139532)
+--
+-- Name: foundry_prefer_proj_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE foundry_prefer_proj_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 205 (OID 18139550)
+--
+-- Name: foundry_preferred_projects Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE foundry_preferred_projects (
+	foundry_project_id number(*) NOT NULL,
+	foundry_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	rank number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (foundry_project_id)
+);
+
+--
+-- TOC Entry ID 46 (OID 18139570)
+--
+-- Name: foundry_projects_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE foundry_projects_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 206 (OID 18139588)
+--
+-- Name: foundry_projects Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE foundry_projects (
+	id number(*) NOT NULL,
+	foundry_id number(*) DEFAULT '0' NOT NULL,
+	project_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 207 (OID 18139606)
+--
+-- Name: frs_dlstats_agg Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_dlstats_agg (
+	file_id number(*) DEFAULT '0' NOT NULL,
+	day number(*) DEFAULT '0' NOT NULL,
+	downloads_http number(*) DEFAULT '0' NOT NULL,
+	downloads_ftp number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 208 (OID 18139623)
+--
+-- Name: frs_dlstats_file_agg Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_dlstats_file_agg (
+	file_id number(*) DEFAULT '0' NOT NULL,
+	day number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 209 (OID 18139638)
+--
+-- Name: frs_dlstats_filetotal_agg Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_dlstats_filetotal_agg (
+	file_id number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (file_id)
+);
+
+--
+-- TOC Entry ID 210 (OID 18139654)
+--
+-- Name: frs_dlstats_filetotal_agg_old Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_dlstats_filetotal_agg_old (
+	file_id number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 211 (OID 18139667)
+--
+-- Name: frs_dlstats_group_agg Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_dlstats_group_agg (
+	group_id number(*) DEFAULT '0' NOT NULL,
+	day number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 212 (OID 18139682)
+--
+-- Name: frs_dlstats_grouptotal_agg Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_dlstats_grouptotal_agg (
+	group_id number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 48 (OID 18139695)
+--
+-- Name: frs_file_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE frs_file_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 213 (OID 18139714)
+--
+-- Name: frs_file Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_file (
+	file_id number(*) NOT NULL,
+	filename varchar2(200),
+	release_id number(*) DEFAULT '0' NOT NULL,
+	type_id number(*) DEFAULT '0' NOT NULL,
+	processor_id number(*) DEFAULT '0' NOT NULL,
+	release_time number(*) DEFAULT '0' NOT NULL,
+	file_size number(*) DEFAULT '0' NOT NULL,
+	post_date number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (file_id)
+);
+
+--
+-- TOC Entry ID 50 (OID 18139756)
+--
+-- Name: frs_filetype_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE frs_filetype_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 214 (OID 18139774)
+--
+-- Name: frs_filetype Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_filetype (
+	type_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (type_id)
+);
+
+--
+-- TOC Entry ID 52 (OID 18139804)
+--
+-- Name: frs_package_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE frs_package_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 215 (OID 18139822)
+--
+-- Name: frs_package Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_package (
+	package_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	name varchar2(4000),
+	status_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (package_id)
+);
+
+--
+-- TOC Entry ID 54 (OID 18139856)
+--
+-- Name: frs_processor_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE frs_processor_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 216 (OID 18139874)
+--
+-- Name: frs_processor Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_processor (
+	processor_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (processor_id)
+);
+
+--
+-- TOC Entry ID 56 (OID 18139904)
+--
+-- Name: frs_release_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE frs_release_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 217 (OID 18139922)
+--
+-- Name: frs_release Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_release (
+	release_id number(*) NOT NULL,
+	package_id number(*) DEFAULT '0' NOT NULL,
+	name varchar2(4000),
+	notes varchar2(4000),
+	changes varchar2(4000),
+	status_id number(*) DEFAULT '0' NOT NULL,
+	preformatted number(*) DEFAULT '0' NOT NULL,
+	release_date number(*) DEFAULT '0' NOT NULL,
+	released_by number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (release_id)
+);
+
+--
+-- TOC Entry ID 58 (OID 18139964)
+--
+-- Name: frs_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE frs_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 218 (OID 18139982)
+--
+-- Name: frs_status Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE frs_status (
+	status_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (status_id)
+);
+
+--
+-- TOC Entry ID 60 (OID 18140012)
+--
+-- Name: group_cvs_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE group_cvs_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 219 (OID 18140030)
+--
+-- Name: group_cvs_history Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE group_cvs_history (
+	id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	user_name character varying(80) DEFAULT ' ' NOT NULL,
+	cvs_commits number(*) DEFAULT '0' NOT NULL,
+	cvs_commits_wk number(*) DEFAULT '0' NOT NULL,
+	cvs_adds number(*) DEFAULT '0' NOT NULL,
+	cvs_adds_wk number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 62 (OID 18140056)
+--
+-- Name: group_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE group_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 220 (OID 18140074)
+--
+-- Name: group_history Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE group_history (
+	group_history_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	field_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	old_value varchar2(4000) DEFAULT ' ' NOT NULL,
+	mod_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*),
+	PRIMARY KEY (group_history_id)
+);
+
+--
+-- TOC Entry ID 64 (OID 18140112)
+--
+-- Name: group_type_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE group_type_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 221 (OID 18140130)
+--
+-- Name: group_type Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE group_type (
+	type_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (type_id)
+);
+
+--
+-- TOC Entry ID 66 (OID 18140160)
+--
+-- Name: groups_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE groups_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 222 (OID 18140178)
+--
+-- Name: groups Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE groups (
+	group_id number(*) NOT NULL,
+	group_name character varying(40),
+	homepage character varying(128),
+	is_public number(*) DEFAULT '0' NOT NULL,
+	status character(1) DEFAULT 'A' NOT NULL,
+	unix_group_name character varying(30) DEFAULT ' ' NOT NULL,
+	unix_box character varying(20) DEFAULT 'shell1' NOT NULL,
+	http_domain character varying(80),
+	short_description character varying(255),
+	cvs_box character varying(20) DEFAULT 'cvs1' NOT NULL,
+	license character varying(16),
+	register_purpose varchar2(4000),
+	license_other varchar2(4000),
+	register_time number(*) DEFAULT '0' NOT NULL,
+	use_bugs number(*) DEFAULT '1' NOT NULL,
+	rand_hash varchar2(4000),
+	use_mail number(*) DEFAULT '1' NOT NULL,
+	use_survey number(*) DEFAULT '1' NOT NULL,
+	use_patch number(*) DEFAULT '1' NOT NULL,
+	use_forum number(*) DEFAULT '1' NOT NULL,
+	use_pm number(*) DEFAULT '1' NOT NULL,
+	use_cvs number(*) DEFAULT '1' NOT NULL,
+	use_news number(*) DEFAULT '1' NOT NULL,
+	use_support number(*) DEFAULT '1' NOT NULL,
+	new_bug_address varchar2(4000) DEFAULT ' ' NOT NULL,
+	new_patch_address varchar2(4000) DEFAULT ' ' NOT NULL,
+	new_support_address varchar2(4000) DEFAULT ' ' NOT NULL,
+	type number(*) DEFAULT '1' NOT NULL,
+	use_docman number(*) DEFAULT '1' NOT NULL,
+	send_all_bugs number(*) DEFAULT '0' NOT NULL,
+	send_all_patches number(*) DEFAULT '0' NOT NULL,
+	send_all_support number(*) DEFAULT '0' NOT NULL,
+	new_task_address varchar2(4000) DEFAULT ' ' NOT NULL,
+	send_all_tasks number(*) DEFAULT '0' NOT NULL,
+	use_bug_depend_box number(*) DEFAULT '1' NOT NULL,
+	use_pm_depend_box number(*) DEFAULT '1' NOT NULL,
+	PRIMARY KEY (group_id)
+);
+
+--
+-- TOC Entry ID 223 (OID 18140269)
+--
+-- Name: intel_agreement Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE intel_agreement (
+	user_id number(*) DEFAULT '0' NOT NULL,
+	message varchar2(4000),
+	is_approved number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (user_id)
+);
+
+--
+-- TOC Entry ID 68 (OID 18140301)
+--
+-- Name: mail_group_list_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE mail_group_list_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 224 (OID 18140319)
+--
+-- Name: mail_group_list Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE mail_group_list (
+	group_list_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	list_name varchar2(4000),
+	is_public number(*) DEFAULT '0' NOT NULL,
+	password character varying(16),
+	list_admin number(*) DEFAULT '0' NOT NULL,
+	status number(*) DEFAULT '0' NOT NULL,
+	description varchar2(4000),
+	PRIMARY KEY (group_list_id)
+);
+
+--
+-- TOC Entry ID 70 (OID 18140359)
+--
+-- Name: news_bytes_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE news_bytes_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 225 (OID 18140377)
+--
+-- Name: news_bytes Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE news_bytes (
+	id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	submitted_by number(*) DEFAULT '0' NOT NULL,
+	is_approved number(*) DEFAULT '0' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL,
+	forum_id number(*) DEFAULT '0' NOT NULL,
+	summary varchar2(4000),
+	details varchar2(4000),
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 72 (OID 18140419)
+--
+-- Name: patch_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE patch_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 226 (OID 18140437)
+--
+-- Name: patch Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE patch (
+	patch_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	patch_status_id number(*) DEFAULT '0' NOT NULL,
+	patch_category_id number(*) DEFAULT '0' NOT NULL,
+	submitted_by number(*) DEFAULT '0' NOT NULL,
+	assigned_to number(*) DEFAULT '0' NOT NULL,
+	open_date number(*) DEFAULT '0' NOT NULL,
+	summary varchar2(4000),
+	code varchar2(4000),
+	close_date number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (patch_id)
+);
+
+--
+-- TOC Entry ID 74 (OID 18140483)
+--
+-- Name: patch_category_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE patch_category_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 227 (OID 18140501)
+--
+-- Name: patch_category Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE patch_category (
+	patch_category_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	category_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (patch_category_id)
+);
+
+--
+-- TOC Entry ID 76 (OID 18140534)
+--
+-- Name: patch_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE patch_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 228 (OID 18140552)
+--
+-- Name: patch_history Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE patch_history (
+	patch_history_id number(*) NOT NULL,
+	patch_id number(*) DEFAULT '0' NOT NULL,
+	field_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	old_value varchar2(4000) DEFAULT ' ' NOT NULL,
+	mod_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*),
+	PRIMARY KEY (patch_history_id)
+);
+
+--
+-- TOC Entry ID 78 (OID 18140590)
+--
+-- Name: patch_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE patch_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 229 (OID 18140608)
+--
+-- Name: patch_status Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE patch_status (
+	patch_status_id number(*) NOT NULL,
+	status_name varchar2(4000),
+	PRIMARY KEY (patch_status_id)
+);
+
+--
+-- TOC Entry ID 80 (OID 18140638)
+--
+-- Name: people_job_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_job_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 230 (OID 18140656)
+--
+-- Name: people_job Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_job (
+	job_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	created_by number(*) DEFAULT '0' NOT NULL,
+	title varchar2(4000),
+	description varchar2(4000),
+	date1 number(*) DEFAULT '0' NOT NULL,
+	status_id number(*) DEFAULT '0' NOT NULL,
+	category_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (job_id)
+);
+
+--
+-- TOC Entry ID 82 (OID 18140697)
+--
+-- Name: people_job_category_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_job_category_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 231 (OID 18140715)
+--
+-- Name: people_job_category Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_job_category (
+	category_id number(*) NOT NULL,
+	name varchar2(4000),
+	private_flag number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (category_id)
+);
+
+--
+-- TOC Entry ID 84 (OID 18140747)
+--
+-- Name: people_job_inventory_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_job_inventory_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 232 (OID 18140765)
+--
+-- Name: people_job_inventory Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_job_inventory (
+	job_inventory_id number(*) NOT NULL,
+	job_id number(*) DEFAULT '0' NOT NULL,
+	skill_id number(*) DEFAULT '0' NOT NULL,
+	skill_level_id number(*) DEFAULT '0' NOT NULL,
+	skill_year_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (job_inventory_id)
+);
+
+--
+-- TOC Entry ID 86 (OID 18140787)
+--
+-- Name: people_job_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_job_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 233 (OID 18140805)
+--
+-- Name: people_job_status Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_job_status (
+	status_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (status_id)
+);
+
+--
+-- TOC Entry ID 88 (OID 18140835)
+--
+-- Name: people_skill_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_skill_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 234 (OID 18140853)
+--
+-- Name: people_skill Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_skill (
+	skill_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (skill_id)
+);
+
+--
+-- TOC Entry ID 90 (OID 18140884)
+--
+-- Name: people_skill_inv_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_skill_inv_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 235 (OID 18140902)
+--
+-- Name: people_skill_inventory Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_skill_inventory (
+	skill_inventory_id number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	skill_id number(*) DEFAULT '0' NOT NULL,
+	skill_level_id number(*) DEFAULT '0' NOT NULL,
+	skill_year_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (skill_inventory_id)
+);
+
+--
+-- TOC Entry ID 92 (OID 18140924)
+--
+-- Name: people_skill_level_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_skill_level_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 236 (OID 18140942)
+--
+-- Name: people_skill_level Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_skill_level (
+	skill_level_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (skill_level_id)
+);
+
+--
+-- TOC Entry ID 94 (OID 18140972)
+--
+-- Name: people_skill_year_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE people_skill_year_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 237 (OID 18140990)
+--
+-- Name: people_skill_year Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE people_skill_year (
+	skill_year_id number(*) NOT NULL,
+	name varchar2(4000),
+	PRIMARY KEY (skill_year_id)
+);
+
+--
+-- TOC Entry ID 96 (OID 18141020)
+--
+-- Name: project_assigned_to_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_assigned_to_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 238 (OID 18141038)
+--
+-- Name: project_assigned_to Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_assigned_to (
+	project_assigned_id number(*) NOT NULL,
+	project_task_id number(*) DEFAULT '0' NOT NULL,
+	assigned_to_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_assigned_id)
+);
+
+--
+-- TOC Entry ID 239 (OID 18141056)
+--
+-- Name: project_counts_tmp Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_counts_tmp (
+	group_id number(*),
+	type varchar2(4000),
+	count double precision
+);
+
+--
+-- TOC Entry ID 240 (OID 18141083)
+--
+-- Name: project_counts_weekly_tmp Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_counts_weekly_tmp (
+	group_id number(*),
+	type varchar2(4000),
+	count double precision
+);
+
+--
+-- TOC Entry ID 98 (OID 18141110)
+--
+-- Name: project_dependencies_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_dependencies_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 241 (OID 18141128)
+--
+-- Name: project_dependencies Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_dependencies (
+	project_depend_id number(*) NOT NULL,
+	project_task_id number(*) DEFAULT '0' NOT NULL,
+	is_dependent_on_task_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_depend_id)
+);
+
+--
+-- TOC Entry ID 100 (OID 18141146)
+--
+-- Name: project_group_list_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_group_list_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 242 (OID 18141164)
+--
+-- Name: project_group_list Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_group_list (
+	group_project_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	project_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	is_public number(*) DEFAULT '0' NOT NULL,
+	description varchar2(4000),
+	PRIMARY KEY (group_project_id)
+);
+
+--
+-- TOC Entry ID 102 (OID 18141200)
+--
+-- Name: project_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 243 (OID 18141218)
+--
+-- Name: project_history Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_history (
+	project_history_id number(*) NOT NULL,
+	project_task_id number(*) DEFAULT '0' NOT NULL,
+	field_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	old_value varchar2(4000) DEFAULT ' ' NOT NULL,
+	mod_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_history_id)
+);
+
+--
+-- TOC Entry ID 104 (OID 18141257)
+--
+-- Name: project_metric_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_metric_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 244 (OID 18141275)
+--
+-- Name: project_metric Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_metric (
+	ranking number(*) NOT NULL,
+	percentile double precision,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+--
+-- TOC Entry ID 106 (OID 18141292)
+--
+-- Name: project_metric_tmp1_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_metric_tmp1_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 245 (OID 18141310)
+--
+-- Name: project_metric_tmp1 Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_metric_tmp1 (
+	ranking number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	value double precision,
+	PRIMARY KEY (ranking)
+);
+
+--
+-- TOC Entry ID 108 (OID 18141327)
+--
+-- Name: proj_metric_weekly_tm_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE proj_metric_weekly_tm_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 246 (OID 18141346)
+--
+-- Name: project_metric_weekly_tmp1 Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_metric_weekly_tmp1 (
+	ranking number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	value double precision,
+	PRIMARY KEY (ranking)
+);
+
+--
+-- TOC Entry ID 110 (OID 18141363)
+--
+-- Name: project_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 247 (OID 18141381)
+--
+-- Name: project_status Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_status (
+	status_id number(*) NOT NULL,
+	status_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (status_id)
+);
+
+--
+-- TOC Entry ID 112 (OID 18141412)
+--
+-- Name: project_task_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_task_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 248 (OID 18141430)
+--
+-- Name: project_task Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_task (
+	project_task_id number(*) NOT NULL,
+	group_project_id number(*) DEFAULT '0' NOT NULL,
+	summary varchar2(4000) DEFAULT ' ' NOT NULL,
+	details varchar2(4000) DEFAULT ' ' NOT NULL,
+	percent_complete number(*) DEFAULT '0' NOT NULL,
+	priority number(*) DEFAULT '0' NOT NULL,
+	hours double precision DEFAULT '0.00' NOT NULL,
+	start_date number(*) DEFAULT '0' NOT NULL,
+	end_date number(*) DEFAULT '0' NOT NULL,
+	created_by number(*) DEFAULT '0' NOT NULL,
+	status_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (project_task_id)
+);
+
+--
+-- TOC Entry ID 114 (OID 18141479)
+--
+-- Name: project_weekly_metric_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE project_weekly_metric_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 249 (OID 18141497)
+--
+-- Name: project_weekly_metric Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE project_weekly_metric (
+	ranking number(*) NOT NULL,
+	percentile double precision,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+--
+-- TOC Entry ID 250 (OID 18141514)
+--
+-- Name: session Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE session1 (
+	user_id number(*) DEFAULT '0' NOT NULL,
+	session_hash character(32) DEFAULT ' ' NOT NULL,
+	ip_addr character(15) DEFAULT ' ' NOT NULL,
+	time number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (session_hash)
+);
+
+--
+-- TOC Entry ID 116 (OID 18141534)
+--
+-- Name: snippet_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE snippet_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 251 (OID 18141552)
+--
+-- Name: snippet Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE snippet (
+	snippet_id number(*) NOT NULL,
+	created_by number(*) DEFAULT '0' NOT NULL,
+	name varchar2(4000),
+	description varchar2(4000),
+	type number(*) DEFAULT '0' NOT NULL,
+	language number(*) DEFAULT '0' NOT NULL,
+	license varchar2(4000) DEFAULT ' ' NOT NULL,
+	category number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_id)
+);
+
+--
+-- TOC Entry ID 118 (OID 18141593)
+--
+-- Name: snippet_package_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE snippet_package_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 252 (OID 18141611)
+--
+-- Name: snippet_package Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE snippet_package (
+	snippet_package_id number(*) NOT NULL,
+	created_by number(*) DEFAULT '0' NOT NULL,
+	name varchar2(4000),
+	description varchar2(4000),
+	category number(*) DEFAULT '0' NOT NULL,
+	language number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_package_id)
+);
+
+--
+-- TOC Entry ID 120 (OID 18141648)
+--
+-- Name: snippet_package_item_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE snippet_package_item_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 253 (OID 18141666)
+--
+-- Name: snippet_package_item Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE snippet_package_item (
+	snippet_package_item_id number(*) NOT NULL,
+	snippet_package_version_id number(*) DEFAULT '0' NOT NULL,
+	snippet_version_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_package_item_id)
+);
+
+--
+-- TOC Entry ID 122 (OID 18141684)
+--
+-- Name: snippet_package_ver_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE snippet_package_ver_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 254 (OID 18141702)
+--
+-- Name: snippet_package_version Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE snippet_package_version (
+	snippet_package_version_id number(*) NOT NULL,
+	snippet_package_id number(*) DEFAULT '0' NOT NULL,
+	changes varchar2(4000),
+	version varchar2(4000),
+	submitted_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (snippet_package_version_id)
+);
+
+--
+-- TOC Entry ID 124 (OID 18141739)
+--
+-- Name: snippet_version_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE snippet_version_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 255 (OID 18141757)
+--
+-- Name: snippet_version Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE snippet_version (
+	snippet_version_id number(*) NOT NULL,
+	snippet_id number(*) DEFAULT '0' NOT NULL,
+	changes varchar2(4000),
+	version varchar2(4000),
+	submitted_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL,
+	code varchar2(4000),
+	PRIMARY KEY (snippet_version_id)
+);
+
+--
+-- TOC Entry ID 256 (OID 18141795)
+--
+-- Name: stats_agg_logo_by_day Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_logo_by_day (
+	day number(*),
+	count integer
+);
+
+--
+-- TOC Entry ID 257 (OID 18141806)
+--
+-- Name: stats_agg_logo_by_group Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_logo_by_group (
+	day number(*),
+	group_id number(*),
+	count integer
+);
+
+--
+-- TOC Entry ID 258 (OID 18141818)
+--
+-- Name: stats_agg_pages_by_browser Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_pages_by_browser (
+	browser character varying(8),
+	count integer
+);
+
+--
+-- TOC Entry ID 259 (OID 18141829)
+--
+-- Name: stats_agg_pages_by_day Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_pages_by_day (
+	day number(*) DEFAULT '0' NOT NULL,
+	count number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 260 (OID 18141842)
+--
+-- Name: stats_agg_pages_by_day_old Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_pages_by_day_old (
+	day number(*),
+	count integer
+);
+
+--
+-- TOC Entry ID 261 (OID 18141853)
+--
+-- Name: stats_agg_site_by_day Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_site_by_day (
+	day number(*) DEFAULT '0' NOT NULL,
+	count number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 262 (OID 18141866)
+--
+-- Name: stats_agg_site_by_group Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agg_site_by_group (
+	day number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	count number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 263 (OID 18141881)
+--
+-- Name: stats_agr_filerelease Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agr_filerelease (
+	filerelease_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 264 (OID 18141896)
+--
+-- Name: stats_agr_project Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_agr_project (
+	group_id number(*) DEFAULT '0' NOT NULL,
+	group_ranking number(*) DEFAULT '0' NOT NULL,
+	group_metric double precision DEFAULT '0.00000' NOT NULL,
+	developers number(*) DEFAULT '0' NOT NULL,
+	file_releases number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL,
+	site_views number(*) DEFAULT '0' NOT NULL,
+	logo_views number(*) DEFAULT '0' NOT NULL,
+	msg_posted number(*) DEFAULT '0' NOT NULL,
+	msg_uniq_auth number(*) DEFAULT '0' NOT NULL,
+	bugs_opened number(*) DEFAULT '0' NOT NULL,
+	bugs_closed number(*) DEFAULT '0' NOT NULL,
+	support_opened number(*) DEFAULT '0' NOT NULL,
+	support_closed number(*) DEFAULT '0' NOT NULL,
+	patches_opened number(*) DEFAULT '0' NOT NULL,
+	patches_closed number(*) DEFAULT '0' NOT NULL,
+	tasks_opened number(*) DEFAULT '0' NOT NULL,
+	tasks_closed number(*) DEFAULT '0' NOT NULL,
+	help_requests number(*) DEFAULT '0' NOT NULL,
+	cvs_checkouts number(*) DEFAULT '0' NOT NULL,
+	cvs_commits number(*) DEFAULT '0' NOT NULL,
+	cvs_adds number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 265 (OID 18141949)
+--
+-- Name: stats_ftp_downloads Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_ftp_downloads (
+	day number(*) DEFAULT '0' NOT NULL,
+	filerelease_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 266 (OID 18141966)
+--
+-- Name: stats_http_downloads Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_http_downloads (
+	day number(*) DEFAULT '0' NOT NULL,
+	filerelease_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 267 (OID 18141983)
+--
+-- Name: stats_project Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_project (
+	month number(*) DEFAULT '0' NOT NULL,
+	week number(*) DEFAULT '0' NOT NULL,
+	day number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	group_ranking number(*) DEFAULT '0' NOT NULL,
+	group_metric double precision DEFAULT '0.00000' NOT NULL,
+	developers number(*) DEFAULT '0' NOT NULL,
+	file_releases number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL,
+	site_views number(*) DEFAULT '0' NOT NULL,
+	subdomain_views number(*) DEFAULT '0' NOT NULL,
+	msg_posted number(*) DEFAULT '0' NOT NULL,
+	msg_uniq_auth number(*) DEFAULT '0' NOT NULL,
+	bugs_opened number(*) DEFAULT '0' NOT NULL,
+	bugs_closed number(*) DEFAULT '0' NOT NULL,
+	support_opened number(*) DEFAULT '0' NOT NULL,
+	support_closed number(*) DEFAULT '0' NOT NULL,
+	patches_opened number(*) DEFAULT '0' NOT NULL,
+	patches_closed number(*) DEFAULT '0' NOT NULL,
+	tasks_opened number(*) DEFAULT '0' NOT NULL,
+	tasks_closed number(*) DEFAULT '0' NOT NULL,
+	help_requests number(*) DEFAULT '0' NOT NULL,
+	cvs_checkouts number(*) DEFAULT '0' NOT NULL,
+	cvs_commits number(*) DEFAULT '0' NOT NULL,
+	cvs_adds number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 268 (OID 18142042)
+--
+-- Name: stats_project_tmp Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_project_tmp (
+	month number(*) DEFAULT '0' NOT NULL,
+	week number(*) DEFAULT '0' NOT NULL,
+	day number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	group_ranking number(*) DEFAULT '0' NOT NULL,
+	group_metric double precision DEFAULT '0.00000' NOT NULL,
+	developers number(*) DEFAULT '0' NOT NULL,
+	file_releases number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL,
+	site_views number(*) DEFAULT '0' NOT NULL,
+	subdomain_views number(*) DEFAULT '0' NOT NULL,
+	msg_posted number(*) DEFAULT '0' NOT NULL,
+	msg_uniq_auth number(*) DEFAULT '0' NOT NULL,
+	bugs_opened number(*) DEFAULT '0' NOT NULL,
+	bugs_closed number(*) DEFAULT '0' NOT NULL,
+	support_opened number(*) DEFAULT '0' NOT NULL,
+	support_closed number(*) DEFAULT '0' NOT NULL,
+	patches_opened number(*) DEFAULT '0' NOT NULL,
+	patches_closed number(*) DEFAULT '0' NOT NULL,
+	tasks_opened number(*) DEFAULT '0' NOT NULL,
+	tasks_closed number(*) DEFAULT '0' NOT NULL,
+	help_requests number(*) DEFAULT '0' NOT NULL,
+	cvs_checkouts number(*) DEFAULT '0' NOT NULL,
+	cvs_commits number(*) DEFAULT '0' NOT NULL,
+	cvs_adds number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 269 (OID 18142101)
+--
+-- Name: stats_site Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE stats_site (
+	month number(*) DEFAULT '0' NOT NULL,
+	week number(*) DEFAULT '0' NOT NULL,
+	day number(*) DEFAULT '0' NOT NULL,
+	site_views number(*) DEFAULT '0' NOT NULL,
+	subdomain_views number(*) DEFAULT '0' NOT NULL,
+	downloads number(*) DEFAULT '0' NOT NULL,
+	uniq_users number(*) DEFAULT '0' NOT NULL,
+	sessions number(*) DEFAULT '0' NOT NULL,
+	total_users number(*) DEFAULT '0' NOT NULL,
+	new_users number(*) DEFAULT '0' NOT NULL,
+	new_projects number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 126 (OID 18142132)
+--
+-- Name: support_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE support_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 270 (OID 18142150)
+--
+-- Name: support Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE support (
+	support_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	support_status_id number(*) DEFAULT '0' NOT NULL,
+	support_category_id number(*) DEFAULT '0' NOT NULL,
+	priority number(*) DEFAULT '0' NOT NULL,
+	submitted_by number(*) DEFAULT '0' NOT NULL,
+	assigned_to number(*) DEFAULT '0' NOT NULL,
+	open_date number(*) DEFAULT '0' NOT NULL,
+	summary varchar2(4000),
+	close_date number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (support_id)
+);
+
+--
+-- TOC Entry ID 128 (OID 18142196)
+--
+-- Name: support_canned_res_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE support_canned_res_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 271 (OID 18142214)
+--
+-- Name: support_canned_responses Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE support_canned_responses (
+	support_canned_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	title varchar2(4000),
+	body varchar2(4000),
+	PRIMARY KEY (support_canned_id)
+);
+
+--
+-- TOC Entry ID 130 (OID 18142247)
+--
+-- Name: support_category_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE support_category_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 272 (OID 18142265)
+--
+-- Name: support_category Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE support_category (
+	support_category_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	category_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (support_category_id)
+);
+
+--
+-- TOC Entry ID 132 (OID 18142298)
+--
+-- Name: support_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE support_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 273 (OID 18142316)
+--
+-- Name: support_history Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE support_history (
+	support_history_id number(*) NOT NULL,
+	support_id number(*) DEFAULT '0' NOT NULL,
+	field_name varchar2(4000) DEFAULT ' ' NOT NULL,
+	old_value varchar2(4000) DEFAULT ' ' NOT NULL,
+	mod_by number(*) DEFAULT '0' NOT NULL,
+	date1 number(*),
+	PRIMARY KEY (support_history_id)
+);
+
+--
+-- TOC Entry ID 134 (OID 18142354)
+--
+-- Name: support_messages_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE support_messages_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 274 (OID 18142372)
+--
+-- Name: support_messages Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE support_messages (
+	support_message_id number(*) NOT NULL,
+	support_id number(*) DEFAULT '0' NOT NULL,
+	from_email varchar2(4000),
+	date1 number(*) DEFAULT '0' NOT NULL,
+	body varchar2(4000),
+	PRIMARY KEY (support_message_id)
+);
+
+--
+-- TOC Entry ID 136 (OID 18142407)
+--
+-- Name: support_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE support_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 275 (OID 18142425)
+--
+-- Name: support_status Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE support_status (
+	support_status_id number(*) NOT NULL,
+	status_name varchar2(4000),
+	PRIMARY KEY (support_status_id)
+);
+
+--
+-- TOC Entry ID 138 (OID 18142455)
+--
+-- Name: supported_languages_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE supported_languages_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 276 (OID 18142473)
+--
+-- Name: supported_languages Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE supported_languages (
+	language_id number(*) NOT NULL,
+	name varchar2(4000),
+	filename varchar2(4000),
+	classname varchar2(4000),
+	language_code character(2),
+	PRIMARY KEY (language_id)
+);
+
+--
+-- TOC Entry ID 140 (OID 18142506)
+--
+-- Name: survey_question_types_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE survey_question_types_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 277 (OID 18142524)
+--
+-- Name: survey_question_types Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE survey_question_types (
+	id number(*) NOT NULL,
+	type varchar2(4000) DEFAULT ' ' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 142 (OID 18142555)
+--
+-- Name: survey_questions_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE survey_questions_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 278 (OID 18142573)
+--
+-- Name: survey_questions Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE survey_questions (
+	question_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	question varchar2(4000) DEFAULT ' ' NOT NULL,
+	question_type number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (question_id)
+);
+
+--
+-- TOC Entry ID 279 (OID 18142608)
+--
+-- Name: survey_rating_aggregate Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE survey_rating_aggregate (
+	type number(*) DEFAULT '0' NOT NULL,
+	id number(*) DEFAULT '0' NOT NULL,
+	response double precision DEFAULT '0' NOT NULL,
+	count number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 280 (OID 18142625)
+--
+-- Name: survey_rating_response Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE survey_rating_response (
+	user_id number(*) DEFAULT '0' NOT NULL,
+	type number(*) DEFAULT '0' NOT NULL,
+	id number(*) DEFAULT '0' NOT NULL,
+	response number(*) DEFAULT '0' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 281 (OID 18142644)
+--
+-- Name: survey_responses Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE survey_responses (
+	user_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	survey_id number(*) DEFAULT '0' NOT NULL,
+	question_id number(*) DEFAULT '0' NOT NULL,
+	response varchar2(4000) DEFAULT ' ' NOT NULL,
+	date1 number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 144 (OID 18142680)
+--
+-- Name: surveys_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE surveys_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 282 (OID 18142698)
+--
+-- Name: surveys Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE surveys (
+	survey_id number(*) NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	survey_title varchar2(4000) DEFAULT ' ' NOT NULL,
+	survey_questions varchar2(4000) DEFAULT ' ' NOT NULL,
+	is_active number(*) DEFAULT '1' NOT NULL,
+	PRIMARY KEY (survey_id)
+);
+
+--
+-- TOC Entry ID 146 (OID 18142735)
+--
+-- Name: system_history_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE system_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 148 (OID 18142787)
+--
+-- Name: system_machines_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE system_machines_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 150 (OID 18142836)
+--
+-- Name: system_news_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE system_news_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 152 (OID 18142895)
+--
+-- Name: system_services_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE system_services_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 154 (OID 18142944)
+--
+-- Name: system_status_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE system_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 283 (OID 18142992)
+--
+-- Name: theme_prefs Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE theme_prefs (
+	user_id number(*) DEFAULT '0' NOT NULL,
+	user_theme number(*) DEFAULT '0' NOT NULL,
+	body_font character(80) DEFAULT '',
+	body_size character(5) DEFAULT '',
+	titlebar_font character(80) DEFAULT '',
+	titlebar_size character(5) DEFAULT '',
+	color_titlebar_back character(7) DEFAULT '',
+	color_ltback1 character(7) DEFAULT '',
+	PRIMARY KEY (user_id)
+);
+
+--
+-- TOC Entry ID 156 (OID 18143020)
+--
+-- Name: themes_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE themes_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 284 (OID 18143038)
+--
+-- Name: themes Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE themes (
+	theme_id number(*) NOT NULL,
+	dirname character varying(80),
+	fullname character varying(80),
+	PRIMARY KEY (theme_id)
+);
+
+--
+-- TOC Entry ID 285 (OID 18143054)
+--
+-- Name: tmp_projs_releases_tmp Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE tmp_projs_releases_tmp (
+	year number(*) DEFAULT '0' NOT NULL,
+	month number(*) DEFAULT '0' NOT NULL,
+	total_proj number(*) DEFAULT '0' NOT NULL,
+	total_releases number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 286 (OID 18143071)
+--
+-- Name: top_group Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE top_group (
+	group_id number(*) DEFAULT '0' NOT NULL,
+	group_name character varying(40),
+	downloads_all number(*) DEFAULT '0' NOT NULL,
+	rank_downloads_all number(*) DEFAULT '0' NOT NULL,
+	rank_downloads_all_old number(*) DEFAULT '0' NOT NULL,
+	downloads_week number(*) DEFAULT '0' NOT NULL,
+	rank_downloads_week number(*) DEFAULT '0' NOT NULL,
+	rank_downloads_week_old number(*) DEFAULT '0' NOT NULL,
+	userrank number(*) DEFAULT '0' NOT NULL,
+	rank_userrank number(*) DEFAULT '0' NOT NULL,
+	rank_userrank_old number(*) DEFAULT '0' NOT NULL,
+	forumposts_week number(*) DEFAULT '0' NOT NULL,
+	rank_forumposts_week number(*) DEFAULT '0' NOT NULL,
+	rank_forumposts_week_old number(*) DEFAULT '0' NOT NULL,
+	pageviews_proj number(*) DEFAULT '0' NOT NULL,
+	rank_pageviews_proj number(*) DEFAULT '0' NOT NULL,
+	rank_pageviews_proj_old number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 158 (OID 18143113)
+--
+-- Name: trove_cat_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE trove_cat_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 287 (OID 18143131)
+--
+-- Name: trove_cat Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE trove_cat (
+	trove_cat_id number(*) NOT NULL,
+	version number(*) DEFAULT '0' NOT NULL,
+	parent number(*) DEFAULT '0' NOT NULL,
+	root_parent number(*) DEFAULT '0' NOT NULL,
+	shortname character varying(80),
+	fullname character varying(80),
+	description character varying(255),
+	count_subcat number(*) DEFAULT '0' NOT NULL,
+	count_subproj number(*) DEFAULT '0' NOT NULL,
+	fullpath varchar2(4000) DEFAULT ' ' NOT NULL,
+	fullpath_ids varchar2(4000),
+	PRIMARY KEY (trove_cat_id)
+);
+
+--
+-- TOC Entry ID 160 (OID 18143176)
+--
+-- Name: trove_group_link_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE trove_group_link_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 288 (OID 18143194)
+--
+-- Name: trove_group_link Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE trove_group_link (
+	trove_group_id number(*) NOT NULL,
+	trove_cat_id number(*) DEFAULT '0' NOT NULL,
+	trove_cat_version number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	trove_cat_root number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (trove_group_id)
+);
+
+--
+-- TOC Entry ID 162 (OID 18143216)
+--
+-- Name: trove_treesums_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE trove_treesums_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 289 (OID 18143234)
+--
+-- Name: trove_treesums Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE trove_treesums (
+	trove_treesums_id number(*) NOT NULL,
+	trove_cat_id number(*) DEFAULT '0' NOT NULL,
+	limit_1 number(*) DEFAULT '0' NOT NULL,
+	subprojects number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (trove_treesums_id)
+);
+
+--
+-- TOC Entry ID 164 (OID 18143286)
+--
+-- Name: user_bookmarks_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE user_bookmarks_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 290 (OID 18143304)
+--
+-- Name: user_bookmarks Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_bookmarks (
+	bookmark_id number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	bookmark_url varchar2(4000),
+	bookmark_title varchar2(4000),
+	PRIMARY KEY (bookmark_id)
+);
+
+--
+-- TOC Entry ID 166 (OID 18143337)
+--
+-- Name: user_diary_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE user_diary_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 291 (OID 18143355)
+--
+-- Name: user_diary Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_diary (
+	id number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	date_posted number(*) DEFAULT '0' NOT NULL,
+	summary varchar2(4000),
+	details varchar2(4000),
+	is_public number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (id)
+);
+
+--
+-- TOC Entry ID 168 (OID 18143392)
+--
+-- Name: user_diary_monitor_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE user_diary_monitor_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 292 (OID 18143410)
+--
+-- Name: user_diary_monitor Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_diary_monitor (
+	monitor_id number(*) NOT NULL,
+	monitored_user number(*) DEFAULT '0' NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (monitor_id)
+);
+
+--
+-- TOC Entry ID 170 (OID 18143428)
+--
+-- Name: user_group_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE user_group_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 293 (OID 18143446)
+--
+-- Name: user_group Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_group (
+	user_group_id number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	admin_flags character(16) DEFAULT ' ' NOT NULL,
+	bug_flags number(*) DEFAULT '0' NOT NULL,
+	forum_flags number(*) DEFAULT '0' NOT NULL,
+	project_flags number(*) DEFAULT '2' NOT NULL,
+	patch_flags number(*) DEFAULT '1' NOT NULL,
+	support_flags number(*) DEFAULT '1' NOT NULL,
+	doc_flags number(*) DEFAULT '0' NOT NULL,
+	cvs_flags number(*) DEFAULT '1' NOT NULL,
+	member_role number(*) DEFAULT '100' NOT NULL,
+	release_flags number(*) DEFAULT '0' NOT NULL,
+	PRIMARY KEY (user_group_id)
+);
+
+--
+-- TOC Entry ID 172 (OID 18143484)
+--
+-- Name: user_metric_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE user_metric_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 294 (OID 18143502)
+--
+-- Name: user_metric Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_metric (
+	ranking number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	times_ranked number(*) DEFAULT '0' NOT NULL,
+	avg_raters_importance double precision DEFAULT '0.00000000' NOT NULL,
+	avg_rating double precision DEFAULT '0.00000000' NOT NULL,
+	metric double precision DEFAULT '0.00000000' NOT NULL,
+	percentile double precision DEFAULT '0.00000000' NOT NULL,
+	importance_factor double precision DEFAULT '0.00000000' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+--
+-- TOC Entry ID 174 (OID 18143530)
+--
+-- Name: user_metric0_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE user_metric0_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 295 (OID 18143548)
+--
+-- Name: user_metric0 Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_metric0 (
+	ranking number(*) NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	times_ranked number(*) DEFAULT '0' NOT NULL,
+	avg_raters_importance double precision DEFAULT '0.00000000' NOT NULL,
+	avg_rating double precision DEFAULT '0.00000000' NOT NULL,
+	metric double precision DEFAULT '0.00000000' NOT NULL,
+	percentile double precision DEFAULT '0.00000000' NOT NULL,
+	importance_factor double precision DEFAULT '0.00000000' NOT NULL,
+	PRIMARY KEY (ranking)
+);
+
+--
+-- TOC Entry ID 296 (OID 18143576)
+--
+-- Name: user_preferences Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_preferences (
+	user_id number(*) DEFAULT '0' NOT NULL,
+	preference_name character varying(20),
+	preference_value character varying(20),
+	set_date number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 297 (OID 18143591)
+--
+-- Name: user_ratings Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE user_ratings (
+	rated_by number(*) DEFAULT '0' NOT NULL,
+	user_id number(*) DEFAULT '0' NOT NULL,
+	rate_field number(*) DEFAULT '0' NOT NULL,
+	rating number(*) DEFAULT '0' NOT NULL
+);
+
+--
+-- TOC Entry ID 176 (OID 18143608)
+--
+-- Name: users_pk_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE users_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 298 (OID 18143626)
+--
+-- Name: users Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE users (
+	user_id number(*) NOT NULL,
+	user_name varchar2(200) DEFAULT ' ' NOT NULL,
+	email varchar2(4000) DEFAULT ' ' NOT NULL,
+	user_pw character varying(32) DEFAULT ' ' NOT NULL,
+	realname character varying(32) DEFAULT ' ' NOT NULL,
+	status character(1) DEFAULT 'A' NOT NULL,
+	shell character varying(20) DEFAULT '/bin/bash' NOT NULL,
+	unix_pw character varying(40) DEFAULT ' ' NOT NULL,
+	unix_status character(1) DEFAULT 'N' NOT NULL,
+	unix_uid number(*) DEFAULT '0' NOT NULL,
+	unix_box character varying(10) DEFAULT 'shell1' NOT NULL,
+	add_date number(*) DEFAULT '0' NOT NULL,
+	confirm_hash character varying(32),
+	mail_siteupdates number(*) DEFAULT '0' NOT NULL,
+	mail_va number(*) DEFAULT '0' NOT NULL,
+	authorized_keys varchar2(4000),
+	email_new varchar2(4000),
+	people_view_skills number(*) DEFAULT '0' NOT NULL,
+	people_resume varchar2(4000) DEFAULT ' ' NOT NULL,
+	timezone character varying(64) DEFAULT 'GMT',
+	language number(*) DEFAULT '1' NOT NULL,
+	PRIMARY KEY (user_id)
+);
+
+--
+-- TOC Entry ID 178 (OID 27311232)
+--
+-- Name: unix_uid_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE unix_uid_seq START WITH 1;
+
+--
+-- TOC Entry ID 180 (OID 27311250)
+--
+-- Name: forum_thread_seq Type: SEQUENCE Owner: tperdue
+--
+
+CREATE SEQUENCE forum_thread_seq START WITH 1;
+
+--
+-- TOC Entry ID 299 (OID 27311451)
+--
+-- Name: trove_agg Type: TABLE Owner: tperdue
+--
+
+CREATE TABLE trove_agg (
+	trove_cat_id number(*),
+	group_id number(*),
+	group_name character varying(40),
+	unix_group_name character varying(30),
+	status character(1),
+	register_time number(*),
+	short_description character varying(255),
+	percentile double precision,
+	ranking integer
+);
+
+--
+-- TOC Entry ID 302 (OID 30136736)
+--
+-- Name: activity_log Type: TABLE Owner: www
+--
+
+CREATE TABLE activity_log (
+	day number(*) DEFAULT '0' NOT NULL,
+	hour number(*) DEFAULT '0' NOT NULL,
+	group_id number(*) DEFAULT '0' NOT NULL,
+	browser character varying(8) DEFAULT 'OTHER' NOT NULL,
+	ver double precision DEFAULT '0.00' NOT NULL,
+	platform character varying(8) DEFAULT 'OTHER' NOT NULL,
+	time number(*) DEFAULT '0' NOT NULL,
+	page varchar2(4000),
+	type number(*) DEFAULT '0' NOT NULL
+);
+
+--\connect - tperdue
+--
+-- TOC Entry ID 316 (OID 18138445)
+--
+-- Name: bug_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_group_id on bug ( group_id );
+
+--
+-- TOC Entry ID 466 (OID 18138445)
+--
+-- Name: bug_groupid_statusid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_groupid_statusid on bug ( group_id, status_id );
+
+--
+-- TOC Entry ID 467 (OID 18138445)
+--
+-- Name: bug_groupid_assign_statusid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_groupid_assign_statusid on bug ( group_id, assigned_to, status_id );
+
+--
+-- TOC Entry ID 317 (OID 18138513)
+--
+-- Name: bug_bug_dependencies_bug_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_bug_dependencies_bug_id on bug_bug_dependencies ( bug_id );
+
+--
+-- TOC Entry ID 318 (OID 18138513)
+--
+-- Name: bug_bug_dependent_on_task_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_bug_dependent_on_task_id on bug_bug_dependencies ( is_dependent_on_bug_id );
+
+--
+-- TOC Entry ID 319 (OID 18138549)
+--
+-- Name: bug_canned_response_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_canned_response_group_id on bug_canned_responses ( group_id );
+
+--
+-- TOC Entry ID 320 (OID 18138600)
+--
+-- Name: bug_category_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_category_group_id on bug_category ( group_id );
+
+--
+-- TOC Entry ID 321 (OID 18138705)
+--
+-- Name: bug_group_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_group_group_id on bug_group ( group_id );
+
+--
+-- TOC Entry ID 322 (OID 18138756)
+--
+-- Name: bug_history_bug_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_history_bug_id on bug_history ( bug_id );
+
+--
+-- TOC Entry ID 323 (OID 18138909)
+--
+-- Name: bug_task_dependencies_bug_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_task_dependencies_bug_id on bug_task_dependencies ( bug_id );
+
+--
+-- TOC Entry ID 324 (OID 18138909)
+--
+-- Name: bug_task_dependent_on_task_i Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_task_dependent_on_task_i on bug_task_dependencies ( is_dependent_on_task_id );
+
+--
+-- TOC Entry ID 325 (OID 18138995)
+--
+-- Name: db_images_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX db_images_group on db_images ( group_id );
+
+--
+-- TOC Entry ID 326 (OID 18139058)
+--
+-- Name: doc_group_doc_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX doc_group_doc_group on doc_data ( doc_group );
+
+--
+-- TOC Entry ID 327 (OID 18139122)
+--
+-- Name: doc_groups_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX doc_groups_group on doc_groups ( group_id );
+
+--
+-- TOC Entry ID 328 (OID 18139192)
+--
+-- Name: filemodule_monitor_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX filemodule_monitor_id on filemodule_monitor ( filemodule_id );
+
+--
+-- TOC Entry ID 329 (OID 18139228)
+--
+-- Name: forum_forumid_msgid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_forumid_msgid on forum ( group_forum_id, msg_id );
+
+--
+-- TOC Entry ID 330 (OID 18139228)
+--
+-- Name: forum_group_forum_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_group_forum_id on forum ( group_forum_id );
+
+--
+-- TOC Entry ID 331 (OID 18139228)
+--
+-- Name: forum_forumid_isfollowupto Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_forumid_isfollowupto on forum ( group_forum_id, is_followup_to );
+
+--
+-- TOC Entry ID 332 (OID 18139228)
+--
+-- Name: forum_forumid_threadid_mrec Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_forumid_threadid_mrec on forum ( group_forum_id, thread_id, most_recent_date );
+
+--
+-- TOC Entry ID 333 (OID 18139228)
+--
+-- Name: forum_threadid_isfollowupto Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_threadid_isfollowupto on forum ( thread_id, is_followup_to );
+
+--
+-- TOC Entry ID 334 (OID 18139228)
+--
+-- Name: forum_forumid_isfollto_mrec Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_forumid_isfollto_mrec on forum ( group_forum_id, is_followup_to, most_recent_date );
+
+--
+-- TOC Entry ID 335 (OID 18139309)
+--
+-- Name: forum_group_list_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_group_list_group_id on forum_group_list ( group_id );
+
+--
+-- TOC Entry ID 336 (OID 18139366)
+--
+-- Name: forum_monitor_combo_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_monitor_combo_id on forum_monitored_forums ( forum_id, user_id );
+
+--
+-- TOC Entry ID 337 (OID 18139366)
+--
+-- Name: forum_monitor_thread_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_monitor_thread_id on forum_monitored_forums ( forum_id );
+
+--
+-- TOC Entry ID 338 (OID 18139510)
+--
+-- Name: foundry_news_foundry_app_d Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundry_news_foundry_app_d on foundry_news ( foundry_id, is_approved, approve_date );
+
+--
+-- TOC Entry ID 339 (OID 18139510)
+--
+-- Name: foundry_news_foundry_approved Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundry_news_foundry_approved on foundry_news ( foundry_id, is_approved );
+
+--
+-- TOC Entry ID 340 (OID 18139510)
+--
+-- Name: foundry_news_foundry Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundry_news_foundry on foundry_news ( foundry_id );
+
+--
+-- TOC Entry ID 463 (OID 18139510)
+--
+-- Name: foundrynews_foundry_date_app Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundrynews_foundry_date_app on foundry_news ( foundry_id, approve_date, is_approved );
+
+--
+-- TOC Entry ID 341 (OID 18139550)
+--
+-- Name: foundry_project_group_rank Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundry_project_group_rank on foundry_preferred_projects ( group_id, rank );
+
+--
+-- TOC Entry ID 342 (OID 18139550)
+--
+-- Name: foundry_project_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundry_project_group on foundry_preferred_projects ( group_id );
+
+--
+-- TOC Entry ID 343 (OID 18139588)
+--
+-- Name: foundry_projects_foundry Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX foundry_projects_foundry on foundry_projects ( foundry_id );
+
+--
+-- TOC Entry ID 344 (OID 18139606)
+--
+-- Name: downloads_http_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX downloads_http_idx on frs_dlstats_agg ( downloads_http );
+
+--
+-- TOC Entry ID 345 (OID 18139606)
+--
+-- Name: downloads_ftp_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX downloads_ftp_idx on frs_dlstats_agg ( downloads_ftp );
+
+--
+-- TOC Entry ID 346 (OID 18139606)
+--
+-- Name: file_id_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX file_id_idx on frs_dlstats_agg ( file_id );
+
+--
+-- TOC Entry ID 347 (OID 18139606)
+--
+-- Name: day_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX day_idx on frs_dlstats_agg ( day );
+
+--
+-- TOC Entry ID 348 (OID 18139623)
+--
+-- Name: dlstats_file_down Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX dlstats_file_down on frs_dlstats_file_agg ( downloads );
+
+--
+-- TOC Entry ID 349 (OID 18139623)
+--
+-- Name: dlstats_file_file_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX dlstats_file_file_id on frs_dlstats_file_agg ( file_id );
+
+--
+-- TOC Entry ID 350 (OID 18139623)
+--
+-- Name: dlstats_file_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX dlstats_file_day on frs_dlstats_file_agg ( day );
+
+--
+-- TOC Entry ID 351 (OID 18139638)
+--
+-- Name: stats_agr_tmp_fid Type: INDEX Owner: tperdue
+--
+
+--CREATE  INDEX stats_agr_tmp_fid on frs_dlstats_filetotal_agg ( file_id );
+
+--
+-- TOC Entry ID 352 (OID 18139654)
+--
+-- Name: frs_dlstats_filet_agg_old_f Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_dlstats_filet_agg_old_f on frs_dlstats_filetotal_agg_old ( file_id );
+
+--
+-- TOC Entry ID 303 (OID 18139667)
+--
+-- Name: frsdlstatsgroupagg_day_dls Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frsdlstatsgroupagg_day_dls on frs_dlstats_group_agg ( day, downloads );
+
+--
+-- TOC Entry ID 353 (OID 18139667)
+--
+-- Name: group_id_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX group_id_idx on frs_dlstats_group_agg ( group_id );
+
+--
+-- TOC Entry ID 355 (OID 18139667)
+--
+-- Name: frs_dlstats_group_agg_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_dlstats_group_agg_day on frs_dlstats_group_agg ( day );
+
+--
+-- TOC Entry ID 356 (OID 18139682)
+--
+-- Name: stats_agr_tmp_gid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_agr_tmp_gid on frs_dlstats_grouptotal_agg ( group_id );
+
+--
+-- TOC Entry ID 357 (OID 18139714)
+--
+-- Name: frs_file_name Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_file_name on frs_file ( filename );
+
+--
+-- TOC Entry ID 358 (OID 18139714)
+--
+-- Name: frs_file_date Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_file_date on frs_file ( post_date );
+
+--
+-- TOC Entry ID 359 (OID 18139714)
+--
+-- Name: frs_file_processor Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_file_processor on frs_file ( processor_id );
+
+--
+-- TOC Entry ID 360 (OID 18139714)
+--
+-- Name: frs_file_release_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_file_release_id on frs_file ( release_id );
+
+--
+-- TOC Entry ID 361 (OID 18139714)
+--
+-- Name: frs_file_type Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_file_type on frs_file ( type_id );
+
+--
+-- TOC Entry ID 362 (OID 18139822)
+--
+-- Name: package_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX package_group_id on frs_package ( group_id );
+
+--
+-- TOC Entry ID 363 (OID 18139922)
+--
+-- Name: frs_release_package Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_release_package on frs_release ( package_id );
+
+--
+-- TOC Entry ID 364 (OID 18139922)
+--
+-- Name: frs_release_date Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_release_date on frs_release ( release_date );
+
+--
+-- TOC Entry ID 365 (OID 18139922)
+--
+-- Name: frs_release_by Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX frs_release_by on frs_release ( released_by );
+
+--
+-- TOC Entry ID 366 (OID 18140030)
+--
+-- Name: group_cvs_history_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX group_cvs_history_group_id on group_cvs_history ( group_id );
+
+--
+-- TOC Entry ID 367 (OID 18140030)
+--
+-- Name: user_name_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_name_idx on group_cvs_history ( user_name );
+
+--
+-- TOC Entry ID 368 (OID 18140074)
+--
+-- Name: group_history_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX group_history_group_id on group_history ( group_id );
+
+--
+-- TOC Entry ID 369 (OID 18140178)
+--
+-- Name: groups_unix Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX groups_unix on groups ( unix_group_name );
+
+--
+-- TOC Entry ID 370 (OID 18140178)
+--
+-- Name: groups_type Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX groups_type on groups ( type );
+
+--
+-- TOC Entry ID 371 (OID 18140178)
+--
+-- Name: groups_public Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX groups_public on groups ( is_public );
+
+--
+-- TOC Entry ID 372 (OID 18140178)
+--
+-- Name: groups_status Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX groups_status on groups ( status );
+
+--
+-- TOC Entry ID 373 (OID 18140319)
+--
+-- Name: mail_group_list_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX mail_group_list_group on mail_group_list ( group_id );
+
+--
+-- TOC Entry ID 374 (OID 18140377)
+--
+-- Name: news_bytes_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX news_bytes_group on news_bytes ( group_id );
+
+--
+-- TOC Entry ID 375 (OID 18140377)
+--
+-- Name: news_bytes_approved Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX news_bytes_approved on news_bytes ( is_approved );
+
+--
+-- TOC Entry ID 376 (OID 18140377)
+--
+-- Name: news_bytes_forum Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX news_bytes_forum on news_bytes ( forum_id );
+
+--
+-- TOC Entry ID 464 (OID 18140377)
+--
+-- Name: news_group_date Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX news_group_date on news_bytes ( group_id, date1 );
+
+--
+-- TOC Entry ID 465 (OID 18140377)
+--
+-- Name: news_approved_date Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX news_approved_date on news_bytes ( is_approved, date1 );
+
+--
+-- TOC Entry ID 377 (OID 18140437)
+--
+-- Name: patch_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX patch_group_id on patch ( group_id );
+
+--
+-- TOC Entry ID 451 (OID 18140437)
+--
+-- Name: patch_groupid_assign_status Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX patch_groupid_assign_status on patch ( group_id, assigned_to, patch_status_id );
+
+--
+-- TOC Entry ID 452 (OID 18140437)
+--
+-- Name: patch_groupid_assignedto Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX patch_groupid_assignedto on patch ( group_id, assigned_to );
+
+--
+-- TOC Entry ID 453 (OID 18140437)
+--
+-- Name: patch_groupid_status Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX patch_groupid_status on patch ( group_id, patch_status_id );
+
+--
+-- TOC Entry ID 378 (OID 18140501)
+--
+-- Name: patch_group_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX patch_group_group_id on patch_category ( group_id );
+
+--
+-- TOC Entry ID 379 (OID 18140552)
+--
+-- Name: patch_history_patch_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX patch_history_patch_id on patch_history ( patch_id );
+
+--
+-- TOC Entry ID 461 (OID 18140656)
+--
+-- Name: people_job_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX people_job_group_id on people_job ( group_id );
+
+--
+-- TOC Entry ID 380 (OID 18141038)
+--
+-- Name: project_assign_to_assigned_to Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_assign_to_assigned_to on project_assigned_to ( assigned_to_id );
+
+--
+-- TOC Entry ID 381 (OID 18141038)
+--
+-- Name: project_assigned_to_task_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_assigned_to_task_id on project_assigned_to ( project_task_id );
+
+--
+-- TOC Entry ID 382 (OID 18141128)
+--
+-- Name: project_dependent_on_task_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_dependent_on_task_id on project_dependencies ( is_dependent_on_task_id );
+
+--
+-- TOC Entry ID 383 (OID 18141128)
+--
+-- Name: project_dependencies_task_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_dependencies_task_id on project_dependencies ( project_task_id );
+
+--
+-- TOC Entry ID 384 (OID 18141164)
+--
+-- Name: project_group_list_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_group_list_group_id on project_group_list ( group_id );
+
+--
+-- TOC Entry ID 385 (OID 18141218)
+--
+-- Name: project_history_task_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_history_task_id on project_history ( project_task_id );
+
+--
+-- TOC Entry ID 386 (OID 18141275)
+--
+-- Name: project_metric_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_metric_group on project_metric ( group_id );
+
+--
+-- TOC Entry ID 387 (OID 18141430)
+--
+-- Name: project_task_group_project_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_task_group_project_id on project_task ( group_project_id );
+
+--
+-- TOC Entry ID 454 (OID 18141430)
+--
+-- Name: projecttask_projid_status Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX projecttask_projid_status on project_task ( group_project_id, status_id );
+
+--
+-- TOC Entry ID 354 (OID 18141497)
+--
+-- Name: projectweeklymetric_ranking Type: INDEX Owner: tperdue
+--
+
+--CREATE  INDEX projectweeklymetric_ranking on project_weekly_metric ( ranking );
+
+--
+-- TOC Entry ID 388 (OID 18141497)
+--
+-- Name: project_metric_weekly_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_metric_weekly_group on project_weekly_metric ( group_id );
+
+--
+-- TOC Entry ID 389 (OID 18141514)
+--
+-- Name: session_user_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX session1_user_id on session1 ( user_id );
+
+--
+-- TOC Entry ID 390 (OID 18141514)
+--
+-- Name: session_time Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX session1_time on session1 ( time );
+
+--
+-- TOC Entry ID 391 (OID 18141552)
+--
+-- Name: snippet_language Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_language on snippet ( language );
+
+--
+-- TOC Entry ID 392 (OID 18141552)
+--
+-- Name: snippet_category Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_category on snippet ( category );
+
+--
+-- TOC Entry ID 393 (OID 18141611)
+--
+-- Name: snippet_package_language Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_package_language on snippet_package ( language );
+
+--
+-- TOC Entry ID 394 (OID 18141611)
+--
+-- Name: snippet_package_category Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_package_category on snippet_package ( category );
+
+--
+-- TOC Entry ID 395 (OID 18141666)
+--
+-- Name: snippet_package_item_pkg_ver Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_package_item_pkg_ver on snippet_package_item ( snippet_package_version_id );
+
+--
+-- TOC Entry ID 396 (OID 18141702)
+--
+-- Name: snippet_package_version_pkg_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_package_version_pkg_id on snippet_package_version ( snippet_package_id );
+
+--
+-- TOC Entry ID 397 (OID 18141757)
+--
+-- Name: snippet_version_snippet_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX snippet_version_snippet_id on snippet_version ( snippet_id );
+
+--
+-- TOC Entry ID 398 (OID 18141829)
+--
+-- Name: pages_by_day_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX pages_by_day_day on stats_agg_pages_by_day ( day );
+
+--
+-- TOC Entry ID 399 (OID 18141881)
+--
+-- Name: stats_agr_filerelease_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_agr_filerelease_group_id on stats_agr_filerelease ( group_id );
+
+--
+-- TOC Entry ID 400 (OID 18141881)
+--
+-- Name: stats_agr_filerel_filerelea Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_agr_filerel_filerelea on stats_agr_filerelease ( filerelease_id );
+
+--
+-- TOC Entry ID 401 (OID 18141896)
+--
+-- Name: project_agr_log_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_agr_log_group on stats_agr_project ( group_id );
+
+--
+-- TOC Entry ID 402 (OID 18141949)
+--
+-- Name: ftpdl_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX ftpdl_group_id on stats_ftp_downloads ( group_id );
+
+--
+-- TOC Entry ID 403 (OID 18141949)
+--
+-- Name: ftpdl_fid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX ftpdl_fid on stats_ftp_downloads ( filerelease_id );
+
+--
+-- TOC Entry ID 404 (OID 18141949)
+--
+-- Name: ftpdl_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX ftpdl_day on stats_ftp_downloads ( day );
+
+--
+-- TOC Entry ID 405 (OID 18141966)
+--
+-- Name: httpdl_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX httpdl_group_id on stats_http_downloads ( group_id );
+
+--
+-- TOC Entry ID 406 (OID 18141966)
+--
+-- Name: httpdl_fid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX httpdl_fid on stats_http_downloads ( filerelease_id );
+
+--
+-- TOC Entry ID 407 (OID 18141966)
+--
+-- Name: httpdl_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX httpdl_day on stats_http_downloads ( day );
+
+--
+-- TOC Entry ID 408 (OID 18141983)
+--
+-- Name: archive_project_monthday Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX archive_project_monthday on stats_project ( month, day );
+
+--
+-- TOC Entry ID 409 (OID 18141983)
+--
+-- Name: project_log_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_log_group on stats_project ( group_id );
+
+--
+-- TOC Entry ID 410 (OID 18141983)
+--
+-- Name: archive_project_week Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX archive_project_week on stats_project ( week );
+
+--
+-- TOC Entry ID 411 (OID 18141983)
+--
+-- Name: archive_project_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX archive_project_day on stats_project ( day );
+
+--
+-- TOC Entry ID 412 (OID 18141983)
+--
+-- Name: archive_project_month Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX archive_project_month on stats_project ( month );
+
+--
+-- TOC Entry ID 413 (OID 18142042)
+--
+-- Name: stats_project_tmp_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_project_tmp_group_id on stats_project_tmp ( group_id );
+
+--
+-- TOC Entry ID 414 (OID 18142042)
+--
+-- Name: project_stats_week Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_stats_week on stats_project_tmp ( week );
+
+--
+-- TOC Entry ID 415 (OID 18142042)
+--
+-- Name: project_stats_month Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_stats_month on stats_project_tmp ( month );
+
+--
+-- TOC Entry ID 416 (OID 18142042)
+--
+-- Name: project_stats_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_stats_day on stats_project_tmp ( day );
+
+--
+-- TOC Entry ID 417 (OID 18142101)
+--
+-- Name: stats_site_monthday Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_site_monthday on stats_site ( month, day );
+
+--
+-- TOC Entry ID 418 (OID 18142101)
+--
+-- Name: stats_site_week Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_site_week on stats_site ( week );
+
+--
+-- TOC Entry ID 419 (OID 18142101)
+--
+-- Name: stats_site_day Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_site_day on stats_site ( day );
+
+--
+-- TOC Entry ID 420 (OID 18142101)
+--
+-- Name: stats_site_month Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX stats_site_month on stats_site ( month );
+
+--
+-- TOC Entry ID 421 (OID 18142150)
+--
+-- Name: support_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_group_id on support ( group_id );
+
+--
+-- TOC Entry ID 448 (OID 18142150)
+--
+-- Name: support_groupid_assignedto Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_groupid_assignedto on support ( group_id, assigned_to );
+
+--
+-- TOC Entry ID 449 (OID 18142150)
+--
+-- Name: support_groupid_assign_stat Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_groupid_assign_stat on support ( group_id, assigned_to, support_status_id );
+
+--
+-- TOC Entry ID 450 (OID 18142150)
+--
+-- Name: support_groupid_status Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_groupid_status on support ( group_id, support_status_id );
+
+--
+-- TOC Entry ID 422 (OID 18142214)
+--
+-- Name: support_canned_res_group_i Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_canned_res_group_i on support_canned_responses ( group_id );
+
+--
+-- TOC Entry ID 423 (OID 18142265)
+--
+-- Name: support_group_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_group_group_id on support_category ( group_id );
+
+--
+-- TOC Entry ID 424 (OID 18142316)
+--
+-- Name: support_history_support_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_history_support_id on support_history ( support_id );
+
+--
+-- TOC Entry ID 425 (OID 18142372)
+--
+-- Name: support_messages_support_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX support_messages_support_id on support_messages ( support_id );
+
+--
+-- TOC Entry ID 426 (OID 18142473)
+--
+-- Name: supported_languages_code Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX supported_languages_code on supported_languages ( language_code );
+
+--
+-- TOC Entry ID 427 (OID 18142573)
+--
+-- Name: survey_questions_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_questions_group on survey_questions ( group_id );
+
+--
+-- TOC Entry ID 428 (OID 18142608)
+--
+-- Name: survey_rating_agg_type_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_rating_agg_type_id on survey_rating_aggregate ( type, id );
+
+--
+-- TOC Entry ID 429 (OID 18142625)
+--
+-- Name: survey_rating_res_user_ty Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_rating_res_user_ty on survey_rating_response ( user_id, type, id );
+
+--
+-- TOC Entry ID 430 (OID 18142625)
+--
+-- Name: survey_rating_res_type_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_rating_res_type_id on survey_rating_response ( type, id );
+
+--
+-- TOC Entry ID 431 (OID 18142644)
+--
+-- Name: survey_responses_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_responses_group_id on survey_responses ( group_id );
+
+--
+-- TOC Entry ID 432 (OID 18142644)
+--
+-- Name: survey_res_user_survey_qu Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_res_user_survey_qu on survey_responses ( user_id, survey_id, question_id );
+
+--
+-- TOC Entry ID 433 (OID 18142644)
+--
+-- Name: survey_responses_user_survey Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_responses_user_survey on survey_responses ( user_id, survey_id );
+
+--
+-- TOC Entry ID 434 (OID 18142644)
+--
+-- Name: survey_res_survey_questio Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX survey_res_survey_questio on survey_responses ( survey_id, question_id );
+
+--
+-- TOC Entry ID 435 (OID 18142698)
+--
+-- Name: surveys_group Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX surveys_group on surveys ( group_id );
+
+--
+-- TOC Entry ID 436 (OID 18143071)
+--
+-- Name: rank_forumposts_week_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX rank_forumposts_week_idx on top_group ( rank_forumposts_week );
+
+--
+-- TOC Entry ID 437 (OID 18143071)
+--
+-- Name: rank_downloads_week_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX rank_downloads_week_idx on top_group ( rank_downloads_week );
+
+--
+-- TOC Entry ID 438 (OID 18143071)
+--
+-- Name: pageviews_proj_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX pageviews_proj_idx on top_group ( pageviews_proj );
+
+--
+-- TOC Entry ID 439 (OID 18143071)
+--
+-- Name: rank_userrank_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX rank_userrank_idx on top_group ( rank_userrank );
+
+--
+-- TOC Entry ID 440 (OID 18143071)
+--
+-- Name: rank_downloads_all_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX rank_downloads_all_idx on top_group ( rank_downloads_all );
+
+--
+-- TOC Entry ID 441 (OID 18143131)
+--
+-- Name: parent_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX parent_idx on trove_cat ( parent );
+
+--
+-- TOC Entry ID 442 (OID 18143131)
+--
+-- Name: root_parent_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX root_parent_idx on trove_cat ( root_parent );
+
+--
+-- TOC Entry ID 443 (OID 18143131)
+--
+-- Name: version_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX version_idx on trove_cat ( version );
+
+--
+-- TOC Entry ID 444 (OID 18143194)
+--
+-- Name: trove_group_link_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX trove_group_link_group_id on trove_group_link ( group_id );
+
+--
+-- TOC Entry ID 445 (OID 18143194)
+--
+-- Name: trove_group_link_cat_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX trove_group_link_cat_id on trove_group_link ( trove_cat_id );
+
+--
+-- TOC Entry ID 446 (OID 18143304)
+--
+-- Name: user_bookmark_user_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_bookmark_user_id on user_bookmarks ( user_id );
+
+--
+-- TOC Entry ID 304 (OID 18143355)
+--
+-- Name: user_diary_user Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_diary_user on user_diary ( user_id );
+
+--
+-- TOC Entry ID 305 (OID 18143355)
+--
+-- Name: user_diary_user_date Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_diary_user_date on user_diary ( user_id, date_posted );
+
+--
+-- TOC Entry ID 306 (OID 18143355)
+--
+-- Name: user_diary_date Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_diary_date on user_diary ( date_posted );
+
+--
+-- TOC Entry ID 307 (OID 18143410)
+--
+-- Name: user_diary_monitor_user Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_diary_monitor_user on user_diary_monitor ( user_id );
+
+--
+-- TOC Entry ID 308 (OID 18143410)
+--
+-- Name: user_diary_monitor_monitor_us Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_diary_monitor_monitor_us on user_diary_monitor ( monitored_user );
+
+--
+-- TOC Entry ID 309 (OID 18143446)
+--
+-- Name: user_group_group_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_group_group_id on user_group ( group_id );
+
+--
+-- TOC Entry ID 310 (OID 18143446)
+--
+-- Name: bug_flags_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX bug_flags_idx on user_group ( bug_flags );
+
+--
+-- TOC Entry ID 311 (OID 18143446)
+--
+-- Name: project_flags_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX project_flags_idx on user_group ( project_flags );
+
+--
+-- TOC Entry ID 312 (OID 18143446)
+--
+-- Name: user_group_user_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_group_user_id on user_group ( user_id );
+
+--
+-- TOC Entry ID 313 (OID 18143446)
+--
+-- Name: admin_flags_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX admin_flags_idx on user_group ( admin_flags );
+
+--
+-- TOC Entry ID 314 (OID 18143446)
+--
+-- Name: forum_flags_idx Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX forum_flags_idx on user_group ( forum_flags );
+
+--
+-- TOC Entry ID 315 (OID 18143548)
+--
+-- Name: user_metric0_user_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_metric0_user_id on user_metric0 ( user_id );
+
+--
+-- TOC Entry ID 455 (OID 18143576)
+--
+-- Name: user_pref_user_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_pref_user_id on user_preferences ( user_id );
+
+--
+-- TOC Entry ID 456 (OID 18143591)
+--
+-- Name: user_ratings_rated_by Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_ratings_rated_by on user_ratings ( rated_by );
+
+--
+-- TOC Entry ID 457 (OID 18143591)
+--
+-- Name: user_ratings_user_id Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX user_ratings_user_id on user_ratings ( user_id );
+
+--
+-- TOC Entry ID 447 (OID 18143626)
+--
+-- Name: users_status Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX users_status on users ( status );
+
+--
+-- TOC Entry ID 458 (OID 18143626)
+--
+-- Name: user_user Type: INDEX Owner: tperdue
+--
+
+--CREATE  INDEX user_user on users ( status );
+
+--
+-- TOC Entry ID 459 (OID 18143626)
+--
+-- Name: idx_users_username Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX idx_users_username on users ( user_name );
+
+--
+-- TOC Entry ID 462 (OID 18143626)
+--
+-- Name: users_user_pw Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX users_user_pw on users ( user_pw );
+
+--
+-- TOC Entry ID 460 (OID 27311451)
+--
+-- Name: troveagg_trovecatid Type: INDEX Owner: tperdue
+--
+
+CREATE  INDEX troveagg_trovecatid on trove_agg ( trove_cat_id );
+
+--
+-- TOC Entry ID 536 (OID 27311269)
+--
+-- Name: RI_ConstraintTrigger_27311268 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 537 (OID 27311271)
+--
+-- Name: RI_ConstraintTrigger_27311270 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 538 (OID 27311273)
+--
+-- Name: RI_ConstraintTrigger_27311272 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 535 (OID 27311275)
+--
+-- Name: RI_ConstraintTrigger_27311274 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 506 (OID 27311277)
+--
+-- Name: RI_ConstraintTrigger_27311276 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 505 (OID 27311279)
+--
+-- Name: RI_ConstraintTrigger_27311278 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 487 (OID 27311281)
+--
+-- Name: RI_ConstraintTrigger_27311280 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 539 (OID 27311283)
+--
+-- Name: RI_ConstraintTrigger_27311282 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 540 (OID 27311285)
+--
+-- Name: RI_ConstraintTrigger_27311284 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 486 (OID 27311287)
+--
+-- Name: RI_ConstraintTrigger_27311286 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 492 (OID 27311289)
+--
+-- Name: RI_ConstraintTrigger_27311288 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 491 (OID 27311291)
+--
+-- Name: RI_ConstraintTrigger_27311290 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 490 (OID 27311293)
+--
+-- Name: RI_ConstraintTrigger_27311292 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 504 (OID 27311295)
+--
+-- Name: RI_ConstraintTrigger_27311294 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 503 (OID 27311297)
+--
+-- Name: RI_ConstraintTrigger_27311296 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 479 (OID 27311299)
+--
+-- Name: RI_ConstraintTrigger_27311298 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 502 (OID 27311301)
+--
+-- Name: RI_ConstraintTrigger_27311300 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 501 (OID 27311303)
+--
+-- Name: RI_ConstraintTrigger_27311302 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 476 (OID 27311305)
+--
+-- Name: RI_ConstraintTrigger_27311304 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 500 (OID 27311307)
+--
+-- Name: RI_ConstraintTrigger_27311306 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 499 (OID 27311309)
+--
+-- Name: RI_ConstraintTrigger_27311308 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 473 (OID 27311311)
+--
+-- Name: RI_ConstraintTrigger_27311310 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 541 (OID 27311313)
+--
+-- Name: RI_ConstraintTrigger_27311312 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 542 (OID 27311315)
+--
+-- Name: RI_ConstraintTrigger_27311314 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 472 (OID 27311317)
+--
+-- Name: RI_ConstraintTrigger_27311316 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 543 (OID 27311319)
+--
+-- Name: RI_ConstraintTrigger_27311318 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 544 (OID 27311321)
+--
+-- Name: RI_ConstraintTrigger_27311320 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 471 (OID 27311323)
+--
+-- Name: RI_ConstraintTrigger_27311322 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 483 (OID 27311325)
+--
+-- Name: RI_ConstraintTrigger_27311324 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 482 (OID 27311327)
+--
+-- Name: RI_ConstraintTrigger_27311326 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 470 (OID 27311329)
+--
+-- Name: RI_ConstraintTrigger_27311328 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 475 (OID 27311331)
+--
+-- Name: RI_ConstraintTrigger_27311330 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 474 (OID 27311333)
+--
+-- Name: RI_ConstraintTrigger_27311332 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 469 (OID 27311335)
+--
+-- Name: RI_ConstraintTrigger_27311334 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 481 (OID 27311337)
+--
+-- Name: RI_ConstraintTrigger_27311336 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 480 (OID 27311339)
+--
+-- Name: RI_ConstraintTrigger_27311338 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 468 (OID 27311341)
+--
+-- Name: RI_ConstraintTrigger_27311340 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 478 (OID 27311343)
+--
+-- Name: RI_ConstraintTrigger_27311342 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 477 (OID 27311345)
+--
+-- Name: RI_ConstraintTrigger_27311344 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 485 (OID 27311347)
+--
+-- Name: RI_ConstraintTrigger_27311346 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 545 (OID 27311349)
+--
+-- Name: RI_ConstraintTrigger_27311348 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 546 (OID 27311351)
+--
+-- Name: RI_ConstraintTrigger_27311350 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 484 (OID 27311353)
+--
+-- Name: RI_ConstraintTrigger_27311352 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 489 (OID 27311355)
+--
+-- Name: RI_ConstraintTrigger_27311354 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 488 (OID 27311357)
+--
+-- Name: RI_ConstraintTrigger_27311356 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 518 (OID 27311359)
+--
+-- Name: RI_ConstraintTrigger_27311358 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 498 (OID 27311361)
+--
+-- Name: RI_ConstraintTrigger_27311360 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 497 (OID 27311363)
+--
+-- Name: RI_ConstraintTrigger_27311362 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 523 (OID 27311365)
+--
+-- Name: RI_ConstraintTrigger_27311364 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 517 (OID 27311367)
+--
+-- Name: RI_ConstraintTrigger_27311366 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 516 (OID 27311369)
+--
+-- Name: RI_ConstraintTrigger_27311368 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 522 (OID 27311371)
+--
+-- Name: RI_ConstraintTrigger_27311370 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 547 (OID 27311373)
+--
+-- Name: RI_ConstraintTrigger_27311372 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 548 (OID 27311375)
+--
+-- Name: RI_ConstraintTrigger_27311374 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 521 (OID 27311377)
+--
+-- Name: RI_ConstraintTrigger_27311376 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 520 (OID 27311379)
+--
+-- Name: RI_ConstraintTrigger_27311378 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 519 (OID 27311381)
+--
+-- Name: RI_ConstraintTrigger_27311380 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 510 (OID 27311383)
+--
+-- Name: RI_ConstraintTrigger_27311382 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 515 (OID 27311385)
+--
+-- Name: RI_ConstraintTrigger_27311384 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 514 (OID 27311387)
+--
+-- Name: RI_ConstraintTrigger_27311386 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 509 (OID 27311389)
+--
+-- Name: RI_ConstraintTrigger_27311388 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 513 (OID 27311391)
+--
+-- Name: RI_ConstraintTrigger_27311390 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 512 (OID 27311393)
+--
+-- Name: RI_ConstraintTrigger_27311392 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 508 (OID 27311395)
+--
+-- Name: RI_ConstraintTrigger_27311394 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 549 (OID 27311397)
+--
+-- Name: RI_ConstraintTrigger_27311396 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 550 (OID 27311399)
+--
+-- Name: RI_ConstraintTrigger_27311398 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 507 (OID 27311401)
+--
+-- Name: RI_ConstraintTrigger_27311400 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 551 (OID 27311403)
+--
+-- Name: RI_ConstraintTrigger_27311402 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 552 (OID 27311405)
+--
+-- Name: RI_ConstraintTrigger_27311404 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 511 (OID 27311407)
+--
+-- Name: RI_ConstraintTrigger_27311406 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 496 (OID 27311409)
+--
+-- Name: RI_ConstraintTrigger_27311408 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 495 (OID 27311411)
+--
+-- Name: RI_ConstraintTrigger_27311410 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 527 (OID 27311413)
+--
+-- Name: RI_ConstraintTrigger_27311412 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 532 (OID 27311415)
+--
+-- Name: RI_ConstraintTrigger_27311414 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 531 (OID 27311417)
+--
+-- Name: RI_ConstraintTrigger_27311416 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 526 (OID 27311419)
+--
+-- Name: RI_ConstraintTrigger_27311418 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 530 (OID 27311421)
+--
+-- Name: RI_ConstraintTrigger_27311420 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 529 (OID 27311423)
+--
+-- Name: RI_ConstraintTrigger_27311422 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 525 (OID 27311425)
+--
+-- Name: RI_ConstraintTrigger_27311424 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 553 (OID 27311427)
+--
+-- Name: RI_ConstraintTrigger_27311426 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 554 (OID 27311429)
+--
+-- Name: RI_ConstraintTrigger_27311428 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 524 (OID 27311431)
+--
+-- Name: RI_ConstraintTrigger_27311430 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 555 (OID 27311433)
+--
+-- Name: RI_ConstraintTrigger_27311432 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 556 (OID 27311435)
+--
+-- Name: RI_ConstraintTrigger_27311434 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 528 (OID 27311437)
+--
+-- Name: RI_ConstraintTrigger_27311436 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 494 (OID 27311439)
+--
+-- Name: RI_ConstraintTrigger_27311438 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 493 (OID 27311441)
+--
+-- Name: RI_ConstraintTrigger_27311440 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 557 (OID 27311443)
+--
+-- Name: RI_ConstraintTrigger_27311442 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 534 (OID 27311445)
+--
+-- Name: RI_ConstraintTrigger_27311444 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 533 (OID 27311447)
+--
+-- Name: RI_ConstraintTrigger_27311446 Type: TRIGGER Owner: tperdue
+--
+
+
+--
+-- TOC Entry ID 3 (OID 18138427)
+--
+-- Name: bug_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_pk_seq;
+CREATE SEQUENCE bug_pk_seq START WITH 125359;
+
+--
+-- TOC Entry ID 5 (OID 18138495)
+--
+-- Name: bug_bug_dependencies_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_bug_dependencies_pk_seq;
+CREATE SEQUENCE bug_bug_dependencies_pk_seq START WITH 44691;
+
+--
+-- TOC Entry ID 7 (OID 18138531)
+--
+-- Name: bug_canned_responses_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_canned_responses_pk_seq;
+CREATE SEQUENCE bug_canned_responses_pk_seq START WITH 100204;
+
+--
+-- TOC Entry ID 9 (OID 18138582)
+--
+-- Name: bug_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_category_pk_seq;
+CREATE SEQUENCE bug_category_pk_seq START WITH 5053;
+
+--
+-- TOC Entry ID 11 (OID 18138632)
+--
+-- Name: bug_filter_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_filter_pk_seq;
+CREATE SEQUENCE bug_filter_pk_seq START WITH 140;
+
+--
+-- TOC Entry ID 13 (OID 18138687)
+--
+-- Name: bug_group_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_group_pk_seq;
+CREATE SEQUENCE bug_group_pk_seq START WITH 2780;
+
+--
+-- TOC Entry ID 15 (OID 18138738)
+--
+-- Name: bug_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_history_pk_seq;
+CREATE SEQUENCE bug_history_pk_seq START WITH 106196;
+
+--
+-- TOC Entry ID 17 (OID 18138794)
+--
+-- Name: bug_resolution_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_resolution_pk_seq;
+CREATE SEQUENCE bug_resolution_pk_seq START WITH 101;
+
+--
+-- TOC Entry ID 19 (OID 18138843)
+--
+-- Name: bug_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_status_pk_seq;
+CREATE SEQUENCE bug_status_pk_seq START WITH 100;
+
+--
+-- TOC Entry ID 21 (OID 18138891)
+--
+-- Name: bug_task_dependencies_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE bug_task_dependencies_pk_seq;
+CREATE SEQUENCE bug_task_dependencies_pk_seq START WITH 44583;
+
+--
+-- TOC Entry ID 23 (OID 18138927)
+--
+-- Name: canned_responses_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE canned_responses_pk_seq;
+CREATE SEQUENCE canned_responses_pk_seq START WITH 5;
+
+--
+-- TOC Entry ID 25 (OID 18138977)
+--
+-- Name: db_images_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE db_images_pk_seq;
+CREATE SEQUENCE db_images_pk_seq START WITH 1128;
+
+--
+-- TOC Entry ID 27 (OID 18139040)
+--
+-- Name: doc_data_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE doc_data_pk_seq;
+CREATE SEQUENCE doc_data_pk_seq START WITH 2124;
+
+--
+-- TOC Entry ID 29 (OID 18139104)
+--
+-- Name: doc_groups_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE doc_groups_pk_seq;
+CREATE SEQUENCE doc_groups_pk_seq START WITH 1815;
+
+--
+-- TOC Entry ID 31 (OID 18139140)
+--
+-- Name: doc_states_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE doc_states_pk_seq;
+CREATE SEQUENCE doc_states_pk_seq START WITH 5;
+
+--
+-- TOC Entry ID 33 (OID 18139174)
+--
+-- Name: filemodule_monitor_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE filemodule_monitor_pk_seq;
+CREATE SEQUENCE filemodule_monitor_pk_seq START WITH 312;
+
+--
+-- TOC Entry ID 35 (OID 18139210)
+--
+-- Name: forum_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE forum_pk_seq;
+CREATE SEQUENCE forum_pk_seq START WITH 84486;
+
+--
+-- TOC Entry ID 37 (OID 18139291)
+--
+-- Name: forum_group_list_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE forum_group_list_pk_seq;
+CREATE SEQUENCE forum_group_list_pk_seq START WITH 51981;
+
+--
+-- TOC Entry ID 39 (OID 18139348)
+--
+-- Name: forum_monitor_forums_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE forum_monitor_forums_pk_seq;
+CREATE SEQUENCE forum_monitor_forums_pk_seq START WITH 14831;
+
+--
+-- TOC Entry ID 41 (OID 18139384)
+--
+-- Name: forum_saved_place_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE forum_saved_place_pk_seq;
+CREATE SEQUENCE forum_saved_place_pk_seq START WITH 1835;
+
+--
+-- TOC Entry ID 43 (OID 18139492)
+--
+-- Name: foundry_news_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE foundry_news_pk_seq;
+CREATE SEQUENCE foundry_news_pk_seq START WITH 1973;
+
+--
+-- TOC Entry ID 45 (OID 18139532)
+--
+-- Name: foundry_prefer_proj_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE foundry_prefer_proj_pk_seq;
+CREATE SEQUENCE foundry_prefer_proj_pk_seq START WITH 165;
+
+--
+-- TOC Entry ID 47 (OID 18139570)
+--
+-- Name: foundry_projects_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE foundry_projects_pk_seq;
+CREATE SEQUENCE foundry_projects_pk_seq START WITH 320807;
+
+--
+-- TOC Entry ID 49 (OID 18139695)
+--
+-- Name: frs_file_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE frs_file_pk_seq;
+CREATE SEQUENCE frs_file_pk_seq START WITH 29214;
+
+--
+-- TOC Entry ID 51 (OID 18139756)
+--
+-- Name: frs_filetype_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE frs_filetype_pk_seq;
+CREATE SEQUENCE frs_filetype_pk_seq START WITH 9999;
+
+--
+-- TOC Entry ID 53 (OID 18139804)
+--
+-- Name: frs_package_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE frs_package_pk_seq;
+CREATE SEQUENCE frs_package_pk_seq START WITH 12688;
+
+--
+-- TOC Entry ID 55 (OID 18139856)
+--
+-- Name: frs_processor_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE frs_processor_pk_seq;
+CREATE SEQUENCE frs_processor_pk_seq START WITH 9999;
+
+--
+-- TOC Entry ID 57 (OID 18139904)
+--
+-- Name: frs_release_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE frs_release_pk_seq;
+CREATE SEQUENCE frs_release_pk_seq START WITH 17983;
+
+--
+-- TOC Entry ID 59 (OID 18139964)
+--
+-- Name: frs_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE frs_status_pk_seq;
+CREATE SEQUENCE frs_status_pk_seq START WITH 3;
+
+--
+-- TOC Entry ID 61 (OID 18140012)
+--
+-- Name: group_cvs_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE group_cvs_history_pk_seq;
+CREATE SEQUENCE group_cvs_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 63 (OID 18140056)
+--
+-- Name: group_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE group_history_pk_seq;
+CREATE SEQUENCE group_history_pk_seq START WITH 29283;
+
+--
+-- TOC Entry ID 65 (OID 18140112)
+--
+-- Name: group_type_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE group_type_pk_seq;
+CREATE SEQUENCE group_type_pk_seq START WITH 2;
+
+--
+-- TOC Entry ID 67 (OID 18140160)
+--
+-- Name: groups_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE groups_pk_seq;
+CREATE SEQUENCE groups_pk_seq START WITH 16379;
+
+--
+-- TOC Entry ID 69 (OID 18140301)
+--
+-- Name: mail_group_list_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE mail_group_list_pk_seq;
+CREATE SEQUENCE mail_group_list_pk_seq START WITH 7581;
+
+--
+-- TOC Entry ID 71 (OID 18140359)
+--
+-- Name: news_bytes_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE news_bytes_pk_seq;
+CREATE SEQUENCE news_bytes_pk_seq START WITH 10299;
+
+--
+-- TOC Entry ID 73 (OID 18140419)
+--
+-- Name: patch_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE patch_pk_seq;
+CREATE SEQUENCE patch_pk_seq START WITH 102785;
+
+--
+-- TOC Entry ID 75 (OID 18140483)
+--
+-- Name: patch_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE patch_category_pk_seq;
+CREATE SEQUENCE patch_category_pk_seq START WITH 10607;
+
+--
+-- TOC Entry ID 77 (OID 18140534)
+--
+-- Name: patch_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE patch_history_pk_seq;
+CREATE SEQUENCE patch_history_pk_seq START WITH 9813;
+
+--
+-- TOC Entry ID 79 (OID 18140590)
+--
+-- Name: patch_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE patch_status_pk_seq;
+CREATE SEQUENCE patch_status_pk_seq START WITH 103;
+
+--
+-- TOC Entry ID 81 (OID 18140638)
+--
+-- Name: people_job_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_job_pk_seq;
+CREATE SEQUENCE people_job_pk_seq START WITH 1641;
+
+--
+-- TOC Entry ID 83 (OID 18140697)
+--
+-- Name: people_job_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_job_category_pk_seq;
+CREATE SEQUENCE people_job_category_pk_seq START WITH 102;
+
+--
+-- TOC Entry ID 85 (OID 18140747)
+--
+-- Name: people_job_inventory_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_job_inventory_pk_seq;
+CREATE SEQUENCE people_job_inventory_pk_seq START WITH 1970;
+
+--
+-- TOC Entry ID 87 (OID 18140787)
+--
+-- Name: people_job_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_job_status_pk_seq;
+CREATE SEQUENCE people_job_status_pk_seq START WITH 3;
+
+--
+-- TOC Entry ID 89 (OID 18140835)
+--
+-- Name: people_skill_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_skill_pk_seq;
+CREATE SEQUENCE people_skill_pk_seq START WITH 33;
+
+--
+-- TOC Entry ID 91 (OID 18140884)
+--
+-- Name: people_skill_inv_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_skill_inv_pk_seq;
+CREATE SEQUENCE people_skill_inv_pk_seq START WITH 60179;
+
+--
+-- TOC Entry ID 93 (OID 18140924)
+--
+-- Name: people_skill_level_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_skill_level_pk_seq;
+CREATE SEQUENCE people_skill_level_pk_seq START WITH 5;
+
+--
+-- TOC Entry ID 95 (OID 18140972)
+--
+-- Name: people_skill_year_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE people_skill_year_pk_seq;
+CREATE SEQUENCE people_skill_year_pk_seq START WITH 5;
+
+--
+-- TOC Entry ID 97 (OID 18141020)
+--
+-- Name: project_assigned_to_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_assigned_to_pk_seq;
+CREATE SEQUENCE project_assigned_to_pk_seq START WITH 30257;
+
+--
+-- TOC Entry ID 99 (OID 18141110)
+--
+-- Name: project_dependencies_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_dependencies_pk_seq;
+CREATE SEQUENCE project_dependencies_pk_seq START WITH 25231;
+
+--
+-- TOC Entry ID 101 (OID 18141146)
+--
+-- Name: project_group_list_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_group_list_pk_seq;
+CREATE SEQUENCE project_group_list_pk_seq START WITH 6360;
+
+--
+-- TOC Entry ID 103 (OID 18141200)
+--
+-- Name: project_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_history_pk_seq;
+CREATE SEQUENCE project_history_pk_seq START WITH 27347;
+
+--
+-- TOC Entry ID 105 (OID 18141257)
+--
+-- Name: project_metric_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_metric_pk_seq;
+CREATE SEQUENCE project_metric_pk_seq START WITH 13274;
+
+--
+-- TOC Entry ID 107 (OID 18141292)
+--
+-- Name: project_metric_tmp1_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_metric_tmp1_pk_seq;
+CREATE SEQUENCE project_metric_tmp1_pk_seq START WITH 13274;
+
+--
+-- TOC Entry ID 109 (OID 18141327)
+--
+-- Name: proj_metric_weekly_tm_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE proj_metric_weekly_tm_pk_seq;
+CREATE SEQUENCE proj_metric_weekly_tm_pk_seq START WITH 2213;
+
+--
+-- TOC Entry ID 111 (OID 18141363)
+--
+-- Name: project_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_status_pk_seq;
+CREATE SEQUENCE project_status_pk_seq START WITH 100;
+
+--
+-- TOC Entry ID 113 (OID 18141412)
+--
+-- Name: project_task_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_task_pk_seq;
+CREATE SEQUENCE project_task_pk_seq START WITH 23295;
+
+--
+-- TOC Entry ID 115 (OID 18141479)
+--
+-- Name: project_weekly_metric_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE project_weekly_metric_pk_seq;
+CREATE SEQUENCE project_weekly_metric_pk_seq START WITH 2213;
+
+--
+-- TOC Entry ID 117 (OID 18141534)
+--
+-- Name: snippet_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE snippet_pk_seq;
+CREATE SEQUENCE snippet_pk_seq START WITH 100501;
+
+--
+-- TOC Entry ID 119 (OID 18141593)
+--
+-- Name: snippet_package_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE snippet_package_pk_seq;
+CREATE SEQUENCE snippet_package_pk_seq START WITH 100035;
+
+--
+-- TOC Entry ID 121 (OID 18141648)
+--
+-- Name: snippet_package_item_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE snippet_package_item_pk_seq;
+CREATE SEQUENCE snippet_package_item_pk_seq START WITH 100100;
+
+--
+-- TOC Entry ID 123 (OID 18141684)
+--
+-- Name: snippet_package_ver_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE snippet_package_ver_pk_seq;
+CREATE SEQUENCE snippet_package_ver_pk_seq START WITH 100035;
+
+--
+-- TOC Entry ID 125 (OID 18141739)
+--
+-- Name: snippet_version_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE snippet_version_pk_seq;
+CREATE SEQUENCE snippet_version_pk_seq START WITH 100662;
+
+--
+-- TOC Entry ID 127 (OID 18142132)
+--
+-- Name: support_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE support_pk_seq;
+CREATE SEQUENCE support_pk_seq START WITH 109672;
+
+--
+-- TOC Entry ID 129 (OID 18142196)
+--
+-- Name: support_canned_res_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE support_canned_res_pk_seq;
+CREATE SEQUENCE support_canned_res_pk_seq START WITH 100088;
+
+--
+-- TOC Entry ID 131 (OID 18142247)
+--
+-- Name: support_category_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE support_category_pk_seq;
+CREATE SEQUENCE support_category_pk_seq START WITH 10699;
+
+--
+-- TOC Entry ID 133 (OID 18142298)
+--
+-- Name: support_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE support_history_pk_seq;
+CREATE SEQUENCE support_history_pk_seq START WITH 24027;
+
+--
+-- TOC Entry ID 135 (OID 18142354)
+--
+-- Name: support_messages_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE support_messages_pk_seq;
+CREATE SEQUENCE support_messages_pk_seq START WITH 122077;
+
+--
+-- TOC Entry ID 137 (OID 18142407)
+--
+-- Name: support_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE support_status_pk_seq;
+CREATE SEQUENCE support_status_pk_seq START WITH 3;
+
+--
+-- TOC Entry ID 139 (OID 18142455)
+--
+-- Name: supported_languages_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE supported_languages_pk_seq;
+CREATE SEQUENCE supported_languages_pk_seq START WITH 21;
+
+--
+-- TOC Entry ID 141 (OID 18142506)
+--
+-- Name: survey_question_types_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE survey_question_types_pk_seq;
+CREATE SEQUENCE survey_question_types_pk_seq START WITH 100;
+
+--
+-- TOC Entry ID 143 (OID 18142555)
+--
+-- Name: survey_questions_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE survey_questions_pk_seq;
+CREATE SEQUENCE survey_questions_pk_seq START WITH 14662;
+
+--
+-- TOC Entry ID 145 (OID 18142680)
+--
+-- Name: surveys_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE surveys_pk_seq;
+CREATE SEQUENCE surveys_pk_seq START WITH 11185;
+
+--
+-- TOC Entry ID 147 (OID 18142735)
+--
+-- Name: system_history_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE system_history_pk_seq;
+CREATE SEQUENCE system_history_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 149 (OID 18142787)
+--
+-- Name: system_machines_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE system_machines_pk_seq;
+CREATE SEQUENCE system_machines_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 151 (OID 18142836)
+--
+-- Name: system_news_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE system_news_pk_seq;
+CREATE SEQUENCE system_news_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 153 (OID 18142895)
+--
+-- Name: system_services_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE system_services_pk_seq;
+CREATE SEQUENCE system_services_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 155 (OID 18142944)
+--
+-- Name: system_status_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE system_status_pk_seq;
+CREATE SEQUENCE system_status_pk_seq START WITH 1;
+
+--
+-- TOC Entry ID 157 (OID 18143020)
+--
+-- Name: themes_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE themes_pk_seq;
+CREATE SEQUENCE themes_pk_seq START WITH 2;
+
+--
+-- TOC Entry ID 159 (OID 18143113)
+--
+-- Name: trove_cat_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE trove_cat_pk_seq;
+CREATE SEQUENCE trove_cat_pk_seq START WITH 281;
+
+--
+-- TOC Entry ID 161 (OID 18143176)
+--
+-- Name: trove_group_link_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE trove_group_link_pk_seq;
+CREATE SEQUENCE trove_group_link_pk_seq START WITH 111628;
+
+--
+-- TOC Entry ID 163 (OID 18143216)
+--
+-- Name: trove_treesums_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE trove_treesums_pk_seq;
+CREATE SEQUENCE trove_treesums_pk_seq START WITH 765;
+
+--
+-- TOC Entry ID 165 (OID 18143286)
+--
+-- Name: user_bookmarks_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE user_bookmarks_pk_seq;
+CREATE SEQUENCE user_bookmarks_pk_seq START WITH 23482;
+
+--
+-- TOC Entry ID 167 (OID 18143337)
+--
+-- Name: user_diary_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE user_diary_pk_seq;
+CREATE SEQUENCE user_diary_pk_seq START WITH 892;
+
+--
+-- TOC Entry ID 169 (OID 18143392)
+--
+-- Name: user_diary_monitor_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE user_diary_monitor_pk_seq;
+CREATE SEQUENCE user_diary_monitor_pk_seq START WITH 521;
+
+--
+-- TOC Entry ID 171 (OID 18143428)
+--
+-- Name: user_group_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE user_group_pk_seq;
+CREATE SEQUENCE user_group_pk_seq START WITH 27204;
+
+--
+-- TOC Entry ID 173 (OID 18143484)
+--
+-- Name: user_metric_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE user_metric_pk_seq;
+CREATE SEQUENCE user_metric_pk_seq START WITH 115;
+
+--
+-- TOC Entry ID 175 (OID 18143530)
+--
+-- Name: user_metric0_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE user_metric0_pk_seq;
+CREATE SEQUENCE user_metric0_pk_seq START WITH 5;
+
+--
+-- TOC Entry ID 177 (OID 18143608)
+--
+-- Name: users_pk_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE users_pk_seq;
+CREATE SEQUENCE users_pk_seq START WITH 120800;
+
+--
+-- TOC Entry ID 179 (OID 27311232)
+--
+-- Name: unix_uid_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE unix_uid_seq;
+CREATE SEQUENCE unix_uid_seq START WITH 21044;
+
+--
+-- TOC Entry ID 181 (OID 27311250)
+--
+-- Name: forum_thread_seq Type: SEQUENCE SET Owner: 
+--
+
+DROP SEQUENCE forum_thread_seq;
+CREATE SEQUENCE forum_thread_seq START WITH 59698;
+

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_auto.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_auto.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_auto.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,1400 @@
+
+CREATE OR REPLACE TRIGGER A_bug_pk_seq
+        BEFORE INSERT OR UPDATE of bug_id
+        ON bug FOR EACH ROW
+BEGIN
+        IF (:new.bug_id is null) then
+          IF INSERTING THEN
+            SELECT bug_pk_seq.nextval INTO :new.bug_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_id := :old.bug_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_bug_dependencies_pk_seq
+        BEFORE INSERT OR UPDATE of bug_depend_id
+        ON bug_bug_dependencies FOR EACH ROW
+BEGIN
+        IF (:new.bug_depend_id is null) then
+          IF INSERTING THEN
+            SELECT bug_bug_dependencies_pk_seq.nextval INTO :new.bug_depend_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_depend_id := :old.bug_depend_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_canned_responses_pk_seq
+        BEFORE INSERT OR UPDATE of bug_canned_id
+        ON bug_canned_responses FOR EACH ROW
+BEGIN
+        IF (:new.bug_canned_id is null) then
+          IF INSERTING THEN
+            SELECT bug_canned_responses_pk_seq.nextval INTO :new.bug_canned_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_canned_id := :old.bug_canned_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_category_pk_seq
+        BEFORE INSERT OR UPDATE of bug_category_id
+        ON bug_category FOR EACH ROW
+BEGIN
+        IF (:new.bug_category_id is null) then
+          IF INSERTING THEN
+            SELECT bug_category_pk_seq.nextval INTO :new.bug_category_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_category_id := :old.bug_category_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_filter_pk_seq
+        BEFORE INSERT OR UPDATE of filter_id
+        ON bug_filter FOR EACH ROW
+BEGIN
+        IF (:new.filter_id is null) then
+          IF INSERTING THEN
+            SELECT bug_filter_pk_seq.nextval INTO :new.filter_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.filter_id := :old.filter_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_group_pk_seq
+        BEFORE INSERT OR UPDATE of bug_group_id
+        ON bug_group FOR EACH ROW
+BEGIN
+        IF (:new.bug_group_id is null) then
+          IF INSERTING THEN
+            SELECT bug_group_pk_seq.nextval INTO :new.bug_group_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_group_id := :old.bug_group_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_history_pk_seq
+        BEFORE INSERT OR UPDATE of bug_history_id
+        ON bug_history FOR EACH ROW
+BEGIN
+        IF (:new.bug_history_id is null) then
+          IF INSERTING THEN
+            SELECT bug_history_pk_seq.nextval INTO :new.bug_history_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_history_id := :old.bug_history_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_resolution_pk_seq
+        BEFORE INSERT OR UPDATE of resolution_id
+        ON bug_resolution FOR EACH ROW
+BEGIN
+        IF (:new.resolution_id is null) then
+          IF INSERTING THEN
+            SELECT bug_resolution_pk_seq.nextval INTO :new.resolution_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.resolution_id := :old.resolution_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_status_pk_seq
+        BEFORE INSERT OR UPDATE of status_id
+        ON bug_status FOR EACH ROW
+BEGIN
+        IF (:new.status_id is null) then
+          IF INSERTING THEN
+            SELECT bug_status_pk_seq.nextval INTO :new.status_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.status_id := :old.status_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_bug_task_dependencies_pk_seq
+        BEFORE INSERT OR UPDATE of bug_depend_id
+        ON bug_task_dependencies FOR EACH ROW
+BEGIN
+        IF (:new.bug_depend_id is null) then
+          IF INSERTING THEN
+            SELECT bug_task_dependencies_pk_seq.nextval INTO :new.bug_depend_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bug_depend_id := :old.bug_depend_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_canned_responses_pk_seq
+        BEFORE INSERT OR UPDATE of response_id
+        ON canned_responses FOR EACH ROW
+BEGIN
+        IF (:new.response_id is null) then
+          IF INSERTING THEN
+            SELECT canned_responses_pk_seq.nextval INTO :new.response_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.response_id := :old.response_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_db_images_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON db_images FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT db_images_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_doc_data_pk_seq
+        BEFORE INSERT OR UPDATE of docid
+        ON doc_data FOR EACH ROW
+BEGIN
+        IF (:new.docid is null) then
+          IF INSERTING THEN
+            SELECT doc_data_pk_seq.nextval INTO :new.docid FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.docid := :old.docid;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_doc_groups_pk_seq
+        BEFORE INSERT OR UPDATE of doc_group
+        ON doc_groups FOR EACH ROW
+BEGIN
+        IF (:new.doc_group is null) then
+          IF INSERTING THEN
+            SELECT doc_groups_pk_seq.nextval INTO :new.doc_group FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.doc_group := :old.doc_group;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_doc_states_pk_seq
+        BEFORE INSERT OR UPDATE of stateid
+        ON doc_states FOR EACH ROW
+BEGIN
+        IF (:new.stateid is null) then
+          IF INSERTING THEN
+            SELECT doc_states_pk_seq.nextval INTO :new.stateid FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.stateid := :old.stateid;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_filemodule_monitor_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON filemodule_monitor FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT filemodule_monitor_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_forum_pk_seq
+        BEFORE INSERT OR UPDATE of msg_id
+        ON forum FOR EACH ROW
+BEGIN
+        IF (:new.msg_id is null) then
+          IF INSERTING THEN
+            SELECT forum_pk_seq.nextval INTO :new.msg_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.msg_id := :old.msg_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_forum_group_list_pk_seq
+        BEFORE INSERT OR UPDATE of group_forum_id
+        ON forum_group_list FOR EACH ROW
+BEGIN
+        IF (:new.group_forum_id is null) then
+          IF INSERTING THEN
+            SELECT forum_group_list_pk_seq.nextval INTO :new.group_forum_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.group_forum_id := :old.group_forum_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_forum_monitor_forums_pk_seq
+        BEFORE INSERT OR UPDATE of monitor_id
+        ON forum_monitored_forums FOR EACH ROW
+BEGIN
+        IF (:new.monitor_id is null) then
+          IF INSERTING THEN
+            SELECT forum_monitor_forums_pk_seq.nextval INTO :new.monitor_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.monitor_id := :old.monitor_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_forum_saved_place_pk_seq
+        BEFORE INSERT OR UPDATE of saved_place_id
+        ON forum_saved_place FOR EACH ROW
+BEGIN
+        IF (:new.saved_place_id is null) then
+          IF INSERTING THEN
+            SELECT forum_saved_place_pk_seq.nextval INTO :new.saved_place_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.saved_place_id := :old.saved_place_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_foundry_news_pk_seq
+        BEFORE INSERT OR UPDATE of foundry_news_id
+        ON foundry_news FOR EACH ROW
+BEGIN
+        IF (:new.foundry_news_id is null) then
+          IF INSERTING THEN
+            SELECT foundry_news_pk_seq.nextval INTO :new.foundry_news_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.foundry_news_id := :old.foundry_news_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_foundry_prefer_proj_pk_seq
+        BEFORE INSERT OR UPDATE of foundry_project_id
+        ON foundry_preferred_projects FOR EACH ROW
+BEGIN
+        IF (:new.foundry_project_id is null) then
+          IF INSERTING THEN
+            SELECT foundry_prefer_proj_pk_seq.nextval INTO :new.foundry_project_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.foundry_project_id := :old.foundry_project_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_foundry_projects_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON foundry_projects FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT foundry_projects_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_frs_file_pk_seq
+        BEFORE INSERT OR UPDATE of file_id
+        ON frs_file FOR EACH ROW
+BEGIN
+        IF (:new.file_id is null) then
+          IF INSERTING THEN
+            SELECT frs_file_pk_seq.nextval INTO :new.file_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.file_id := :old.file_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_frs_filetype_pk_seq
+        BEFORE INSERT OR UPDATE of type_id
+        ON frs_filetype FOR EACH ROW
+BEGIN
+        IF (:new.type_id is null) then
+          IF INSERTING THEN
+            SELECT frs_filetype_pk_seq.nextval INTO :new.type_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.type_id := :old.type_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_frs_package_pk_seq
+        BEFORE INSERT OR UPDATE of package_id
+        ON frs_package FOR EACH ROW
+BEGIN
+        IF (:new.package_id is null) then
+          IF INSERTING THEN
+            SELECT frs_package_pk_seq.nextval INTO :new.package_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.package_id := :old.package_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_frs_processor_pk_seq
+        BEFORE INSERT OR UPDATE of processor_id
+        ON frs_processor FOR EACH ROW
+BEGIN
+        IF (:new.processor_id is null) then
+          IF INSERTING THEN
+            SELECT frs_processor_pk_seq.nextval INTO :new.processor_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.processor_id := :old.processor_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_frs_release_pk_seq
+        BEFORE INSERT OR UPDATE of release_id
+        ON frs_release FOR EACH ROW
+BEGIN
+        IF (:new.release_id is null) then
+          IF INSERTING THEN
+            SELECT frs_release_pk_seq.nextval INTO :new.release_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.release_id := :old.release_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_frs_status_pk_seq
+        BEFORE INSERT OR UPDATE of status_id
+        ON frs_status FOR EACH ROW
+BEGIN
+        IF (:new.status_id is null) then
+          IF INSERTING THEN
+            SELECT frs_status_pk_seq.nextval INTO :new.status_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.status_id := :old.status_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_group_cvs_history_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON group_cvs_history FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT group_cvs_history_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_group_history_pk_seq
+        BEFORE INSERT OR UPDATE of group_history_id
+        ON group_history FOR EACH ROW
+BEGIN
+        IF (:new.group_history_id is null) then
+          IF INSERTING THEN
+            SELECT group_history_pk_seq.nextval INTO :new.group_history_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.group_history_id := :old.group_history_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_group_type_pk_seq
+        BEFORE INSERT OR UPDATE of type_id
+        ON group_type FOR EACH ROW
+BEGIN
+        IF (:new.type_id is null) then
+          IF INSERTING THEN
+            SELECT group_type_pk_seq.nextval INTO :new.type_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.type_id := :old.type_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_groups_pk_seq
+        BEFORE INSERT OR UPDATE of group_id
+        ON groups FOR EACH ROW
+BEGIN
+        IF (:new.group_id is null) then
+          IF INSERTING THEN
+            SELECT groups_pk_seq.nextval INTO :new.group_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.group_id := :old.group_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_mail_group_list_pk_seq
+        BEFORE INSERT OR UPDATE of group_list_id
+        ON mail_group_list FOR EACH ROW
+BEGIN
+        IF (:new.group_list_id is null) then
+          IF INSERTING THEN
+            SELECT mail_group_list_pk_seq.nextval INTO :new.group_list_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.group_list_id := :old.group_list_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_news_bytes_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON news_bytes FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT news_bytes_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_patch_pk_seq
+        BEFORE INSERT OR UPDATE of patch_id
+        ON patch FOR EACH ROW
+BEGIN
+        IF (:new.patch_id is null) then
+          IF INSERTING THEN
+            SELECT patch_pk_seq.nextval INTO :new.patch_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.patch_id := :old.patch_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_patch_category_pk_seq
+        BEFORE INSERT OR UPDATE of patch_category_id
+        ON patch_category FOR EACH ROW
+BEGIN
+        IF (:new.patch_category_id is null) then
+          IF INSERTING THEN
+            SELECT patch_category_pk_seq.nextval INTO :new.patch_category_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.patch_category_id := :old.patch_category_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_patch_history_pk_seq
+        BEFORE INSERT OR UPDATE of patch_history_id
+        ON patch_history FOR EACH ROW
+BEGIN
+        IF (:new.patch_history_id is null) then
+          IF INSERTING THEN
+            SELECT patch_history_pk_seq.nextval INTO :new.patch_history_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.patch_history_id := :old.patch_history_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_patch_status_pk_seq
+        BEFORE INSERT OR UPDATE of patch_status_id
+        ON patch_status FOR EACH ROW
+BEGIN
+        IF (:new.patch_status_id is null) then
+          IF INSERTING THEN
+            SELECT patch_status_pk_seq.nextval INTO :new.patch_status_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.patch_status_id := :old.patch_status_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_job_pk_seq
+        BEFORE INSERT OR UPDATE of job_id
+        ON people_job FOR EACH ROW
+BEGIN
+        IF (:new.job_id is null) then
+          IF INSERTING THEN
+            SELECT people_job_pk_seq.nextval INTO :new.job_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.job_id := :old.job_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_job_category_pk_seq
+        BEFORE INSERT OR UPDATE of category_id
+        ON people_job_category FOR EACH ROW
+BEGIN
+        IF (:new.category_id is null) then
+          IF INSERTING THEN
+            SELECT people_job_category_pk_seq.nextval INTO :new.category_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.category_id := :old.category_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_job_inventory_pk_seq
+        BEFORE INSERT OR UPDATE of job_inventory_id
+        ON people_job_inventory FOR EACH ROW
+BEGIN
+        IF (:new.job_inventory_id is null) then
+          IF INSERTING THEN
+            SELECT people_job_inventory_pk_seq.nextval INTO :new.job_inventory_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.job_inventory_id := :old.job_inventory_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_job_status_pk_seq
+        BEFORE INSERT OR UPDATE of status_id
+        ON people_job_status FOR EACH ROW
+BEGIN
+        IF (:new.status_id is null) then
+          IF INSERTING THEN
+            SELECT people_job_status_pk_seq.nextval INTO :new.status_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.status_id := :old.status_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_skill_pk_seq
+        BEFORE INSERT OR UPDATE of skill_id
+        ON people_skill FOR EACH ROW
+BEGIN
+        IF (:new.skill_id is null) then
+          IF INSERTING THEN
+            SELECT people_skill_pk_seq.nextval INTO :new.skill_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.skill_id := :old.skill_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_skill_inv_pk_seq
+        BEFORE INSERT OR UPDATE of skill_inventory_id
+        ON people_skill_inventory FOR EACH ROW
+BEGIN
+        IF (:new.skill_inventory_id is null) then
+          IF INSERTING THEN
+            SELECT people_skill_inv_pk_seq.nextval INTO :new.skill_inventory_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.skill_inventory_id := :old.skill_inventory_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_skill_level_pk_seq
+        BEFORE INSERT OR UPDATE of skill_level_id
+        ON people_skill_level FOR EACH ROW
+BEGIN
+        IF (:new.skill_level_id is null) then
+          IF INSERTING THEN
+            SELECT people_skill_level_pk_seq.nextval INTO :new.skill_level_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.skill_level_id := :old.skill_level_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_people_skill_year_pk_seq
+        BEFORE INSERT OR UPDATE of skill_year_id
+        ON people_skill_year FOR EACH ROW
+BEGIN
+        IF (:new.skill_year_id is null) then
+          IF INSERTING THEN
+            SELECT people_skill_year_pk_seq.nextval INTO :new.skill_year_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.skill_year_id := :old.skill_year_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_assigned_to_pk_seq
+        BEFORE INSERT OR UPDATE of project_assigned_id
+        ON project_assigned_to FOR EACH ROW
+BEGIN
+        IF (:new.project_assigned_id is null) then
+          IF INSERTING THEN
+            SELECT project_assigned_to_pk_seq.nextval INTO :new.project_assigned_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.project_assigned_id := :old.project_assigned_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_dependencies_pk_seq
+        BEFORE INSERT OR UPDATE of project_depend_id
+        ON project_dependencies FOR EACH ROW
+BEGIN
+        IF (:new.project_depend_id is null) then
+          IF INSERTING THEN
+            SELECT project_dependencies_pk_seq.nextval INTO :new.project_depend_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.project_depend_id := :old.project_depend_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_group_list_pk_seq
+        BEFORE INSERT OR UPDATE of group_project_id
+        ON project_group_list FOR EACH ROW
+BEGIN
+        IF (:new.group_project_id is null) then
+          IF INSERTING THEN
+            SELECT project_group_list_pk_seq.nextval INTO :new.group_project_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.group_project_id := :old.group_project_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_history_pk_seq
+        BEFORE INSERT OR UPDATE of project_history_id
+        ON project_history FOR EACH ROW
+BEGIN
+        IF (:new.project_history_id is null) then
+          IF INSERTING THEN
+            SELECT project_history_pk_seq.nextval INTO :new.project_history_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.project_history_id := :old.project_history_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_metric_pk_seq
+        BEFORE INSERT OR UPDATE of ranking
+        ON project_metric FOR EACH ROW
+BEGIN
+        IF (:new.ranking is null) then
+          IF INSERTING THEN
+            SELECT project_metric_pk_seq.nextval INTO :new.ranking FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.ranking := :old.ranking;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_metric_tmp1_pk_seq
+        BEFORE INSERT OR UPDATE of ranking
+        ON project_metric_tmp1 FOR EACH ROW
+BEGIN
+        IF (:new.ranking is null) then
+          IF INSERTING THEN
+            SELECT project_metric_tmp1_pk_seq.nextval INTO :new.ranking FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.ranking := :old.ranking;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_proj_metric_weekly_tm_pk_seq
+        BEFORE INSERT OR UPDATE of ranking
+        ON project_metric_weekly_tmp1 FOR EACH ROW
+BEGIN
+        IF (:new.ranking is null) then
+          IF INSERTING THEN
+            SELECT proj_metric_weekly_tm_pk_seq.nextval INTO :new.ranking FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.ranking := :old.ranking;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_status_pk_seq
+        BEFORE INSERT OR UPDATE of status_id
+        ON project_status FOR EACH ROW
+BEGIN
+        IF (:new.status_id is null) then
+          IF INSERTING THEN
+            SELECT project_status_pk_seq.nextval INTO :new.status_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.status_id := :old.status_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_task_pk_seq
+        BEFORE INSERT OR UPDATE of project_task_id
+        ON project_task FOR EACH ROW
+BEGIN
+        IF (:new.project_task_id is null) then
+          IF INSERTING THEN
+            SELECT project_task_pk_seq.nextval INTO :new.project_task_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.project_task_id := :old.project_task_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_project_weekly_metric_pk_seq
+        BEFORE INSERT OR UPDATE of ranking
+        ON project_weekly_metric FOR EACH ROW
+BEGIN
+        IF (:new.ranking is null) then
+          IF INSERTING THEN
+            SELECT project_weekly_metric_pk_seq.nextval INTO :new.ranking FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.ranking := :old.ranking;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_snippet_pk_seq
+        BEFORE INSERT OR UPDATE of snippet_id
+        ON snippet FOR EACH ROW
+BEGIN
+        IF (:new.snippet_id is null) then
+          IF INSERTING THEN
+            SELECT snippet_pk_seq.nextval INTO :new.snippet_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.snippet_id := :old.snippet_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_snippet_package_pk_seq
+        BEFORE INSERT OR UPDATE of snippet_package_id
+        ON snippet_package FOR EACH ROW
+BEGIN
+        IF (:new.snippet_package_id is null) then
+          IF INSERTING THEN
+            SELECT snippet_package_pk_seq.nextval INTO :new.snippet_package_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.snippet_package_id := :old.snippet_package_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_snippet_package_item_pk_seq
+        BEFORE INSERT OR UPDATE of snippet_package_item_id
+        ON snippet_package_item FOR EACH ROW
+BEGIN
+        IF (:new.snippet_package_item_id is null) then
+          IF INSERTING THEN
+            SELECT snippet_package_item_pk_seq.nextval INTO :new.snippet_package_item_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.snippet_package_item_id := :old.snippet_package_item_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_snippet_package_ver_pk_seq
+        BEFORE INSERT OR UPDATE of snippet_package_version_id
+        ON snippet_package_version FOR EACH ROW
+BEGIN
+        IF (:new.snippet_package_version_id is null) then
+          IF INSERTING THEN
+            SELECT snippet_package_ver_pk_seq.nextval INTO :new.snippet_package_version_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.snippet_package_version_id := :old.snippet_package_version_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_snippet_version_pk_seq
+        BEFORE INSERT OR UPDATE of snippet_version_id
+        ON snippet_version FOR EACH ROW
+BEGIN
+        IF (:new.snippet_version_id is null) then
+          IF INSERTING THEN
+            SELECT snippet_version_pk_seq.nextval INTO :new.snippet_version_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.snippet_version_id := :old.snippet_version_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_support_pk_seq
+        BEFORE INSERT OR UPDATE of support_id
+        ON support FOR EACH ROW
+BEGIN
+        IF (:new.support_id is null) then
+          IF INSERTING THEN
+            SELECT support_pk_seq.nextval INTO :new.support_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.support_id := :old.support_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_support_canned_res_pk_seq
+        BEFORE INSERT OR UPDATE of support_canned_id
+        ON support_canned_responses FOR EACH ROW
+BEGIN
+        IF (:new.support_canned_id is null) then
+          IF INSERTING THEN
+            SELECT support_canned_res_pk_seq.nextval INTO :new.support_canned_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.support_canned_id := :old.support_canned_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_support_category_pk_seq
+        BEFORE INSERT OR UPDATE of support_category_id
+        ON support_category FOR EACH ROW
+BEGIN
+        IF (:new.support_category_id is null) then
+          IF INSERTING THEN
+            SELECT support_category_pk_seq.nextval INTO :new.support_category_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.support_category_id := :old.support_category_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_support_history_pk_seq
+        BEFORE INSERT OR UPDATE of support_history_id
+        ON support_history FOR EACH ROW
+BEGIN
+        IF (:new.support_history_id is null) then
+          IF INSERTING THEN
+            SELECT support_history_pk_seq.nextval INTO :new.support_history_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.support_history_id := :old.support_history_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_support_messages_pk_seq
+        BEFORE INSERT OR UPDATE of support_message_id
+        ON support_messages FOR EACH ROW
+BEGIN
+        IF (:new.support_message_id is null) then
+          IF INSERTING THEN
+            SELECT support_messages_pk_seq.nextval INTO :new.support_message_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.support_message_id := :old.support_message_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_support_status_pk_seq
+        BEFORE INSERT OR UPDATE of support_status_id
+        ON support_status FOR EACH ROW
+BEGIN
+        IF (:new.support_status_id is null) then
+          IF INSERTING THEN
+            SELECT support_status_pk_seq.nextval INTO :new.support_status_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.support_status_id := :old.support_status_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_supported_languages_pk_seq
+        BEFORE INSERT OR UPDATE of language_id
+        ON supported_languages FOR EACH ROW
+BEGIN
+        IF (:new.language_id is null) then
+          IF INSERTING THEN
+            SELECT supported_languages_pk_seq.nextval INTO :new.language_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.language_id := :old.language_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_survey_question_types_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON survey_question_types FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT survey_question_types_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_survey_questions_pk_seq
+        BEFORE INSERT OR UPDATE of question_id
+        ON survey_questions FOR EACH ROW
+BEGIN
+        IF (:new.question_id is null) then
+          IF INSERTING THEN
+            SELECT survey_questions_pk_seq.nextval INTO :new.question_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.question_id := :old.question_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_surveys_pk_seq
+        BEFORE INSERT OR UPDATE of survey_id
+        ON surveys FOR EACH ROW
+BEGIN
+        IF (:new.survey_id is null) then
+          IF INSERTING THEN
+            SELECT surveys_pk_seq.nextval INTO :new.survey_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.survey_id := :old.survey_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_themes_pk_seq
+        BEFORE INSERT OR UPDATE of theme_id
+        ON themes FOR EACH ROW
+BEGIN
+        IF (:new.theme_id is null) then
+          IF INSERTING THEN
+            SELECT themes_pk_seq.nextval INTO :new.theme_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.theme_id := :old.theme_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_trove_cat_pk_seq
+        BEFORE INSERT OR UPDATE of trove_cat_id
+        ON trove_cat FOR EACH ROW
+BEGIN
+        IF (:new.trove_cat_id is null) then
+          IF INSERTING THEN
+            SELECT trove_cat_pk_seq.nextval INTO :new.trove_cat_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.trove_cat_id := :old.trove_cat_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_trove_group_link_pk_seq
+        BEFORE INSERT OR UPDATE of trove_group_id
+        ON trove_group_link FOR EACH ROW
+BEGIN
+        IF (:new.trove_group_id is null) then
+          IF INSERTING THEN
+            SELECT trove_group_link_pk_seq.nextval INTO :new.trove_group_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.trove_group_id := :old.trove_group_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_trove_treesums_pk_seq
+        BEFORE INSERT OR UPDATE of trove_treesums_id
+        ON trove_treesums FOR EACH ROW
+BEGIN
+        IF (:new.trove_treesums_id is null) then
+          IF INSERTING THEN
+            SELECT trove_treesums_pk_seq.nextval INTO :new.trove_treesums_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.trove_treesums_id := :old.trove_treesums_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_user_bookmarks_pk_seq
+        BEFORE INSERT OR UPDATE of bookmark_id
+        ON user_bookmarks FOR EACH ROW
+BEGIN
+        IF (:new.bookmark_id is null) then
+          IF INSERTING THEN
+            SELECT user_bookmarks_pk_seq.nextval INTO :new.bookmark_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.bookmark_id := :old.bookmark_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_user_diary_pk_seq
+        BEFORE INSERT OR UPDATE of id
+        ON user_diary FOR EACH ROW
+BEGIN
+        IF (:new.id is null) then
+          IF INSERTING THEN
+            SELECT user_diary_pk_seq.nextval INTO :new.id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.id := :old.id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_user_diary_monitor_pk_seq
+        BEFORE INSERT OR UPDATE of monitor_id
+        ON user_diary_monitor FOR EACH ROW
+BEGIN
+        IF (:new.monitor_id is null) then
+          IF INSERTING THEN
+            SELECT user_diary_monitor_pk_seq.nextval INTO :new.monitor_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.monitor_id := :old.monitor_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_user_group_pk_seq
+        BEFORE INSERT OR UPDATE of user_group_id
+        ON user_group FOR EACH ROW
+BEGIN
+        IF (:new.user_group_id is null) then
+          IF INSERTING THEN
+            SELECT user_group_pk_seq.nextval INTO :new.user_group_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.user_group_id := :old.user_group_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_user_metric_pk_seq
+        BEFORE INSERT OR UPDATE of ranking
+        ON user_metric FOR EACH ROW
+BEGIN
+        IF (:new.ranking is null) then
+          IF INSERTING THEN
+            SELECT user_metric_pk_seq.nextval INTO :new.ranking FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.ranking := :old.ranking;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+CREATE OR REPLACE TRIGGER A_user_metric0_pk_seq
+        BEFORE INSERT OR UPDATE of ranking
+        ON user_metric0 FOR EACH ROW
+BEGIN
+        IF (:new.ranking is null) then
+          IF INSERTING THEN
+            SELECT user_metric0_pk_seq.nextval INTO :new.ranking FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.ranking := :old.ranking;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/
+
+CREATE OR REPLACE TRIGGER A_users_pk_seq
+        BEFORE INSERT OR UPDATE of user_id
+        ON users FOR EACH ROW
+BEGIN
+        IF (:new.user_id is null) then
+          IF INSERTING THEN
+            SELECT users_pk_seq.nextval INTO :new.user_id FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.user_id := :old.user_id;
+          END IF;
+        END IF;
+END;
+
+
+/
+
+/
+
+/

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_er.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_er.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/SourceForge2.5oci8-Trigger_er.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,420 @@
+CREATE OR REPLACE TRIGGER user_group_user_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON user_group FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.user_id = users.user_id;
+        if (:new.user_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE user_group using non-existing user_id (user_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER user_group_group_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON user_group FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE user_group using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER forum_posted_by_fk 
+        AFTER INSERT OR UPDATE 
+        ON forum FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.posted_by = users.user_id;
+        if (:new.posted_by is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE forum using non-existing user_id (posted_by).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER forum_group_forum_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON forum FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from forum_group_list
+        where :new.group_forum_id = forum_group_list.group_forum_id;
+        if (:new.group_forum_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE forum using non-existing group_forum_id (group_forum_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER forum_group_list_group_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON forum_group_list FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE forum_group_list using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_group_group_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug_group FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug_group using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_category_group_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug_category FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug_category using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_submitted_by_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.submitted_by = users.user_id;
+        if (:new.submitted_by is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug using non-existing user_id (submitted_by).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_assigned_to_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.assigned_to = users.user_id;
+        if (:new.assigned_to is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug using non-existing user_id (assigned_to).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_status_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from bug_status
+        where :new.status_id = bug_status.status_id;
+        if (:new.status_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug using non-existing status_id (status_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_category_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from bug_category
+        where :new.category_id = bug_category.bug_category_id;
+        if (:new.category_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug using non-existing bug_category_id (category_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_resolution_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from bug_resolution
+        where :new.resolution_id = bug_resolution.resolution_id;
+        if (:new.resolution_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug using non-existing resolution_id (resolution_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER bug_group_fk 
+        AFTER INSERT OR UPDATE 
+        ON bug FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from bug_group
+        where :new.bug_group_id = bug_group.bug_group_id;
+        if (:new.bug_group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE bug using non-existing bug_group_id (bug_group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER forum_posted_by_fk 
+        AFTER INSERT OR UPDATE 
+        ON forum FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.posted_by = users.user_id;
+        if (:new.posted_by is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE forum using non-existing user_id (posted_by).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER forum_group_forum_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON forum FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from forum_group_list
+        where :new.group_forum_id = forum_group_list.group_forum_id;
+        if (:new.group_forum_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE forum using non-existing group_forum_id (group_forum_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER project_group_list_group_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON project_group_list FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE project_group_list using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER project_task_group_proj_id_f 
+        AFTER INSERT OR UPDATE 
+        ON project_task FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from project_group_list
+        where :new.group_project_id = project_group_list.group_project_id;
+        if (:new.group_project_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE project_task using non-existing group_project_id (group_project_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER project_task_created_by_fk 
+        AFTER INSERT OR UPDATE 
+        ON project_task FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.created_by = users.user_id;
+        if (:new.created_by is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE project_task using non-existing user_id (created_by).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER project_task_status_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON project_task FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from project_status
+        where :new.status_id = project_status.status_id;
+        if (:new.status_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE project_task using non-existing status_id (status_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER patch_status_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON patch FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from patch_status
+        where :new.patch_status_id = patch_status.patch_status_id;
+        if (:new.patch_status_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE patch using non-existing patch_status_id (patch_status_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER patch_category_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON patch FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from patch_category
+        where :new.patch_category_id = patch_category.patch_category_id;
+        if (:new.patch_category_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE patch using non-existing patch_category_id (patch_category_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER patch_submitted_by_fk 
+        AFTER INSERT OR UPDATE 
+        ON patch FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.submitted_by = users.user_id;
+        if (:new.submitted_by is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE patch using non-existing user_id (submitted_by).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER patch_assigned_to_fk 
+        AFTER INSERT OR UPDATE 
+        ON patch FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.assigned_to = users.user_id;
+        if (:new.assigned_to is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE patch using non-existing user_id (assigned_to).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER patch_category_group_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON patch_category FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE patch_category using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER support_status_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON support FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from support_status
+        where :new.support_status_id = support_status.support_status_id;
+        if (:new.support_status_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE support using non-existing support_status_id (support_status_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER support_category_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON support FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from support_category
+        where :new.support_category_id = support_category.support_category_id;
+        if (:new.support_category_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE support using non-existing support_category_id (support_category_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER support_submitted_by_fk 
+        AFTER INSERT OR UPDATE 
+        ON support FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.submitted_by = users.user_id;
+        if (:new.submitted_by is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE support using non-existing user_id (submitted_by).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER support_assigned_to_fk 
+        AFTER INSERT OR UPDATE 
+        ON support FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from users
+        where :new.assigned_to = users.user_id;
+        if (:new.assigned_to is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE support using non-existing user_id (assigned_to).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER support_category_group_id_fk 
+        AFTER INSERT OR UPDATE 
+        ON support_category FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from groups
+        where :new.group_id = groups.group_id;
+        if (:new.group_id is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE support_category using non-existing group_id (group_id).');
+        end if;
+end;
+
+/
+CREATE OR REPLACE TRIGGER users_languageid_fk 
+        AFTER INSERT OR UPDATE 
+        ON users FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from supported_languages
+        where :new.language = supported_languages.language_id;
+        if (:new.language is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE users using non-existing language_id (language).');
+        end if;
+end;
+
+/

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/database.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/database.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/database.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,506 @@
+<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id$
+//
+
+/*
+
+This document summarize the changes I made to SourceForge 2.5 code that 
+supports Oracle 8 (oci8) database replacing postgres. The change covers
+the oracle layer, namely the script database-oci8.php which is an ALPHA
+version as claimed in its header, the database schema that is converted
+from the postgres schema (file SourceForge.sql), and some PHP code with
+SQL statements that have wrong syntax, or with bugs.
+
+Part 1: database-oci8.php
+	
+	The changes are made to correct the defects/bugs in this ALPHA 
+	version of OCI8 support in SourceForge 2.5. I used PHP version 
+	4 OCI functions and the working environment includes apache 
+	1.3.14 and Sun Solaris 2.6
+
+	Summary of changes:
+
+	. Eliminated all @ in front of the OCI function calls;
+	. Added ocicommit($conn) after ociexecute. OCI_COMMIT_ON_SUCCESS
+	  should take care of that, but somehow certain INSERT/UPDATE
+	  queries do not commit unless I call ocicommit.
+	. I use column name instead of column index number to retrieve
+	  column values here, though both should work due to the mode
+	  OCI_ASSOC+OCI_NUM used in ocifetchinto. The reason I make
+	  the change is that column names are used in most of PHP codes
+	  of SourceForge (I recall that a few places use numbers though)
+	  and I want to make it consistent. There is a defect here that
+	  I did not fix: the db_query will return if the value of the
+	  first column is null. This would cause problem if it happens
+	  that the value is null, not because it is at the end of the
+	  rows. The function could return less rows than actual result.
+	  I do not have time to figure out a better way to detect if we
+	  are at the end of the rows, considering that function db_query
+	  applies to SELECT, INSERT, UPDATE, DELETE, all the queries.
+	. The ALPHA code uses the returned value of ociexecute as the
+	  array index of the returned result rows. Note that the returned
+	  value is always 1 (if execution is successful) and if I have
+ 	  two db_query calls and the result of the second call will 
+	  unexpectedly replace that of the first one. I use the returned
+	  handle of ociparse as the index instead, since the handle will
+	  be a different value for each db_query call. Then in all the 
+	  code of calling db_query, it would be nice to free that handle
+	  and the result array after the call. I guess it does not matter
+	  much since each PHP script runs once as a CGI program and then
+	  exit. If the PHP script is permanently loaded in web server
+	  after the call, that would cause memory leak problem. I will 
+	  try to clean the SourceForge PHP code that calls db_query later.
+
+	. There was a problem with $sys_db_row_pointer, fixed that.
+
+	. Oracle likes UPPER case names. If you try to SELECT rows from
+	  an oracle table, most likely you will get a upper case column
+	  name, which means you have to retrieve a column value like
+	  $x[USER_ID] or $x['USER_ID'] or $x["USER_ID"], and $x[user_id]
+	  or $x['user_id'] or $x["user_id"] will not work. I noticed that
+	  almost all of the SourceForge codes use lower case names. 
+	  A solution could be defining oracle tables like:
+
+		create table users ("user_id" varchar2(20), ...)
+
+	  In this case the field user_id is created in lower case in Oracle.
+	  As a result $x["user_id"] is correct.
+
+	  I personally does not like it due to that I have to do SELECT as:
+
+		select "user_id" from users
+
+	  Another solution is to make a copy of the returned rows and
+	  replace the upper case names to lower case when copying.
+	  Then make both result arrays available to the caller of db_query.
+	  I prefer this generic approach even it costs a little bit of
+	  memory and cpu. I have not done that though.
+
+	  What I did here is accepting upper case column names and changed
+	  all of the places in SourceForge that call db_query, or uses the
+	  result arrays. Anyhow I want to find out the places and free the
+	  arrays later when I have more time.
+
+Part 2: Database Schema
+
+	The schema enclosed in SF 2.5 is for postgres. I wrote a perl
+	script that converts the postgres SQL statements to Oracle.
+
+	The results are 3 separate files. File SourceForge_oci8.sql includes 
+	all the tables, sequences, indices. Table session has been renamed 
+	to session1, since it is a key word in Oracle DDL. Also all the 
+	fields date has been renamed to date1. Corresponding changes need 
+	to be made in places that refer to the table and/or fields.
+
+	File Trigger_auto.sql are triggers that used to implement the auto 
+	insertion of sequence numbers. Oracle does not allow 
+
+		"bug_id" integer DEFAULT nextval('bug_pk_seq'::text) NOT NULL,
+
+	So the triggers are necessary here. With these triggers, you can
+	insert a record without specify the sequence number, and the
+	trigger will get the next one and insert for you. If you do want
+	to specify sequences in your INSERT/UPDATE queries, the trigger
+	will take you number. 
+
+	File Trigger_er.sql is integrity constraint triggers defining the 
+	E-R among tables. I did not apply those in my case due to that I 
+	would not be able to insert the default rows after that. I will 
+	apply the constraints later.
+
+	Many fields are defined as text in postgres and I had trouble 
+	deciding what to do with it. There are a lot of limitation in 
+	Oracle to LONG and LOB fields. I use varchar2() to replace text 
+	even though the maximum bytes for varchar2() is 4000 (?). Most 
+	likely we will not run that limit and if any case, I can simply 
+	change it to LONG or LOB.
+
+Part 3: Misc Changes Fixing SQL Syntax or Bugs (incomplete)
+
+	File Name	Changes
+	------------------------------------------------------------------
+
+	account/login.php	
+
+			added lines to set the hask cookie. Also added 
+			the 3rd parameters to session_login_valid. 
+			changed table name session to session1
+
+
+	account/logout.php
+
+			changed table name session to session1
+
+	admin/lastlogins.php
+
+			changed table name session to session1
+
+	admin/search.php
+
+			changed "distinctrow" to "unique"
+
+	admin/userlist.php
+
+			added select before insert statement
+
+	developer/monitor.php
+
+			changed variable user to user_id
+
+	docman/doc_utils.php
+
+			defined count(*) as cnt
+
+	forum/forum.php
+
+			changed table field date to date1
+
+	forum/forum_utils.php
+
+			changed table field date to date1. changed the
+			SELECT nextval('forum_thread_seq') to 
+			SELECT forum_thread_seq.nextval from dual
+
+	include/User.class
+
+			added select statement to get a user object
+
+	include/cache.php
+
+			comment out flock statements due to access rights.
+
+	include/osdn.php
+
+			image changed to /image. commented out some ads.
+
+	include/session.php
+
+			$allowingpending=0 changed to allowpending. added 
+			UPDATE statement to activate pending user accounts.
+			changed session to session1
+
+	include/user_home.php
+
+			changed user= to user_id=
+
+	my/diary.php
+
+			added a section to retrieve user object to set
+			$G_SESSION
+	
+	news/news_utils.php
+
+			changed date to date1. changed a few http to https.
+
+	news/submit.php
+
+			changed date to date1
+
+	project/memberlist.php
+
+			changed the join to outer join in query
+
+	softwaremap/trove_list.php
+
+			changed the LEFT JOIN to outer join in Oracle.
+
+
+*/
+$sys_db_oci_commit_mode='OCI_COMMIT_ON_SUCCESS';
+
+/**
+ *
+ *  Connect to the database
+ *  Notice the global vars that must be set up
+ *  Sets up a global $conn variable which is used 
+ *  in other functions in this library
+ *
+ */
+function db_connect() {
+	global $sys_dbuser,$sys_dbpasswd,$conn,$sys_dbname;
+	$conn = ocilogon($sys_dbuser,$sys_dbpasswd,$sys_dbname);
+	#return $conn;
+}
+
+/**
+ *
+ *  Query the database
+ *
+ *  @param qstring - SQL statement
+ *  @param limit - how many rows do you want returned
+ *  @param offset - of matching rows, return only rows starting here
+ *
+ *
+ *  NOTE - the OCI version of this may be somewhat inefficient
+ *  for large result sets (hundreds or thousands of rows selected)
+ *  However - most queries are returning 25-50 rows
+ *
+ */
+
+function db_query($qstring,$limit='-1',$offset=0) {
+
+	global $conn,$QUERY_COUNT,$sys_db_results;
+        global $sys_db_row_pointer,$sys_db_oci_commit_mode;
+
+	$QUERY_COUNT++;
+
+	$stmt=ociparse($conn,$qstring);
+
+	if (!$stmt) {
+		return 0;
+	} else {
+		if ($limit > 0) {
+			if (!$offset || $offset < 0) {
+				$offset=0;
+			}
+		}
+
+		$res=ociexecute($stmt,$sys_db_oci_commit_mode);
+                ocicommit($conn);
+
+		if (!$res) {
+			return 0;
+		} else {
+			//if offset, seek to starting point
+			//potentially expensive if large offset
+			//however there is no data_seek feature AFAICT
+                        $col_name  = OCIColumnName($stmt,1);
+
+			$more_data=true;
+			if ($offset > 0) {
+				for ($i=0; $i<$offset; $i++) {
+					//burn them off
+					ocifetchinto($stmt,&$x,OCI_ASSOC+OCI_NUM);
+					if (!$x[$col_name]) {
+						//if no data be returned
+						//get out of loop
+						$more_data=false;
+						break;
+					}
+				}
+			}
+
+			$i=0;
+			while ($more_data) {
+
+                                unset($x);
+				$ret = ocifetchinto($stmt,&$x,OCI_ASSOC+OCI_NUM);
+				if (!$ret) {
+                                  //if no data be returned
+                                  //get out of loop
+                                  $more_data=false;
+                                  break;
+                                }
+
+				$i++;
+
+				$sys_db_results[$stmt][$i-1]=$x;
+
+				//see if data is being returned && we are 
+				//still within the requested $limit
+				if (count($x) < 1 || (($limit > 0) && 
+                                   ($i >= $limit))) 
+                                {
+					$more_data=false;
+				}
+			}
+			$sys_db_row_pointer[$stmt]=0;
+
+			return $stmt;
+		}
+	}
+}
+
+/**
+ *      db_begin()
+ *
+ *      begin a transaction
+ */
+function db_begin() {
+	global $sys_db_oci_commit_mode;
+	$sys_db_oci_commit_mode='OCI_DEFAULT';
+}
+
+/**
+ *      db_commit()
+ *
+ *      commit a transaction
+ */
+function db_commit() {
+	global $sys_db_oci_commit_mode,$conn;
+	$sys_db_oci_commit_mode='OCI_COMMIT_ON_SUCCESS';
+	return ocicommit($conn);
+}
+
+/**
+ *      db_rollback()
+ *
+ *      rollback a transaction
+ */
+function db_rollback() {
+	global $sys_db_oci_commit_mode,$conn;
+	$sys_db_oci_commit_mode='OCI_COMMIT_ON_SUCCESS';
+	return ocirollback($conn);
+}
+
+/**
+ *
+ *  Returns the number of rows in this result set
+ *
+ *  @param qhandle query result set handle
+ *
+ */
+function db_numrows($qhandle) {
+	global $sys_db_results;
+	// return only if qhandle exists, otherwise 0
+
+	if ($qhandle) {
+
+		return count($sys_db_results[$qhandle]);
+	} else {
+		return 0;
+	}
+}
+
+/**
+ *
+ *  Frees a database result properly 
+ *
+ *  @param qhandle query result set handle
+ *
+ */
+
+function db_free_result($qhandle) {
+	global $sys_db_results;
+	unset($sys_db_results[$qhandle]);
+	return ocifreestatement($qhandle);
+}
+
+/**
+ *
+ *  Reset is useful for db_fetch_array
+ *  sometimes you need to start over
+ *
+ *  @param qhandle query result set handle
+ *  @param row - integer row number
+ *
+ */
+
+function db_reset_result($qhandle,$row=0) {
+	global $sys_db_row_pointer;
+	return $sys_db_row_pointer[$qhandle]=$row;
+}
+
+/**
+ *
+ *  Returns a field from a result set
+ *
+ *  @param qhandle query result set handle
+ *  @param row - integer row number
+ *  @param field - text field name
+ *
+ */
+
+function db_result($qhandle,$row,$field) {
+	global $sys_db_results;
+        $fieldu = strtoupper($field);
+
+	return $sys_db_results[$qhandle][$row][$fieldu];
+}
+
+/**
+ *
+ *  Returns the number of fields in this result set
+ *
+ *  @param qhandle query result set handle
+ *
+ */
+
+function db_numfields($lhandle) {
+	return ocinumcols($lhandle);
+}
+
+/**
+ *
+ *  Returns the number of rows changed in the last query
+ *
+ *  @param qhandle - query result set handle
+ *  @param fnumber - column number
+ *
+ */
+
+function db_fieldname($lhandle,$fnumber) {
+	   return ocicolumnname($lhandle,$fnumber);
+}
+
+/**
+ *
+ *  Returns the number of rows changed in the last query
+ *
+ *  @param qhandle query result set handle
+ *
+ */
+
+function db_affected_rows($qhandle) {
+	return ocirowcount($qhandle);
+}
+
+/**
+ *
+ *  Returns an associative array from 
+ *  the current row of this database result
+ *  Use db_reset_result to seek a particular row
+ *
+ *  @param qhandle query result set handle
+ *
+ */
+
+function db_fetch_array($qhandle) {
+	global $sys_db_results,$sys_db_row_pointer;
+        $row = $sys_db_row_pointer[$qhandle];
+        $sys_db_row_pointer[$qhandle] = $sys_db_row_pointer[$qhandle] + 1;
+        //$sys_db_row_pointer = $sys_db_row_pointer + 1;
+	return $sys_db_results[$qhandle][$row];
+}
+
+/**
+ *
+ *  Returns the last primary key from an insert
+ *
+ *  @param qhandle query result set handle
+ *  @param table_name is the name of the table you inserted into
+ *  @param pkey_field_name is the field name of the primary key
+ *
+ */
+
+function db_insertid($qhandle,$table_name,$pkey_field_name) {
+	$res=db_query("SELECT max($pkey_field_name) AS id FROM $table_name");
+	if ($res && db_numrows($res) > 0) {
+		return db_result($res,0,'id');
+	} else {
+		return 0;
+	}
+}
+
+/**
+ *
+ *  Returns the last error from the database
+ *
+ */
+
+function db_error() {
+	global $conn;
+	$err= ocierror($conn);
+	if ($err) {
+		return $err['message'];
+	} else {
+		return false;
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/pgdb-convert.pl
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/pgdb-convert.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/oci8port/shaguo/pgdb-convert.pl	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,223 @@
+#!/usr/local/bin/perl
+
+#conver the postgres schema to oracle 8
+
+$postgres_file = "SourceForge.sql";
+$oracle_file = "SourceForge_oci8.sql";
+$trigger_auto = "Trigger_auto.sql";
+$trigger_er = "Trigger_er.sql";
+$drop_file = "Drop.sql";
+
+if (!(open (POSTGRES, "<$postgres_file")))
+{
+  die "Can not open $postgres_file\n";
+}
+if (!(open (ORACLE, ">$oracle_file")))
+{
+  die "Can not open $oracle_file\n";
+}
+if (!(open (TRIGGER_AUTO, ">$trigger_auto")))
+{
+  die "Can not open $trigger_auto\n";
+}
+if (!(open (TRIGGER_ER, ">$trigger_er")))
+{
+  die "Can not open $trigger_er\n";
+}
+if (!(open (DROP , ">$drop_file")))
+{
+  die "Can not open $drop_file\n";
+}
+
+$table = '';
+
+while (<POSTGRES>)
+{
+  # filter "
+  $_ =~ s/\"//g;
+
+  if ($_ =~ /CREATE\s+TABLE\s+(\w+)/i)
+  {
+    $table = $1;
+    if ($table =~ /session/i)
+    {
+      $table = 'session1';
+    }
+    $_ =~ s/session/session1/g;
+
+    print DROP "drop table $table;\n";
+
+    if (length($table) > 30)
+    {
+      print STDOUT "TAB NAME: $table\n";
+    }
+  }
+
+  # change the sequence creation statement
+  if ($_ =~ /CREATE\s+SEQUENCE (\w+)/i)
+  {
+    $_ = "CREATE SEQUENCE $1 START WITH 1;\n";
+    print DROP "drop sequence $1;\n";
+  }
+
+  # change the index creation statement
+  $_ =~ s/ using btree//g;
+  $_ =~ s/ int4_ops//g;
+  $_ =~ s/ text_ops//g;
+  $_ =~ s/ varchar_ops//g;
+  $_ =~ s/ bpchar_ops//g;
+
+  if ($_ =~ /CREATE\s+INDEX\s+(\w+)/i)
+  {
+    if (length($1) > 30)
+    {
+      print STDOUT "IND NAME: $1\n";
+    }
+    if ($1 =~ /session/i)
+    {
+      $_ =~ s/session/session1/g;
+    }
+  }
+
+  # replace the nextval with a trigger
+  if ($_ =~ /\s+(\w+)\s+\w+\s+DEFAULT\s+nextval\(\'(\w+)\'/i)
+  {
+
+    if (length($2) > 30)
+    {
+      print STDOUT "SEQ NAME: $2\n";
+    }
+
+    if (length($2) > 28)
+    {
+      print STDOUT "N_T NAME: A_$2\n";
+    }
+
+    $trigger = <<ENDTRIGGER;
+
+CREATE OR REPLACE TRIGGER A_$2
+        BEFORE INSERT OR UPDATE of $1
+        ON $table FOR EACH ROW
+BEGIN
+        IF (:new.$1 is null) then
+          IF INSERTING THEN
+            SELECT $2.nextval INTO :new.$1 FROM DUAL;
+          ELSIF UPDATING THEN
+            :new.$1 := :old.$1;
+          END IF;
+        END IF;
+END;
+
+ENDTRIGGER
+
+    $_ =~ s/DEFAULT\s+nextval\(\'\w+\'::text\) //g;
+    $_ =~ s/DEFAULT\s+nextval\(\'\w+\'::text\)//g;
+  }
+  # replace integer with number(*)
+  $_ =~ s/ integer,/ number(\*),/g;
+  $_ =~ s/ integer / number(\*) /g;
+
+  # replace text with long varchar2
+  if ($_ =~ / text\s*\((\d+)\)/i)
+  {
+    $_ =~ s/ text/ varchar2/g;
+  }
+  else
+  {
+    $_ =~ s/ text,/ varchar2(4000),/g;
+    $_ =~ s/ text / varchar2(4000) /g;
+  }
+  
+  # replace field name date with date1
+  $_ =~ s/date number/date1 number/g;
+  $_ =~ s/ date / date1 /g;
+  $_ =~ s/_date1 /_date /g;
+
+  # replace trigger statements
+  $_ =~ s/ CONSTRAINT / OR REPLACE /g;
+
+  # set the sequence current value: oracle has no setval
+  # so we drop the sequence and then re-create it with new
+  # start value
+
+  if ($_ =~ /SELECT\s+setval\s+\('(\w+)',\s+(\d+)/i)
+  {
+    $new_seq = <<ENDSEQ;
+DROP SEQUENCE $1;
+CREATE SEQUENCE $1 START WITH $2;
+ENDSEQ
+    print ORACLE $new_seq;
+  }
+  elsif ($_ =~ /(\w+)\s+AFTER\s+INSERT\s+OR\s+UPDATE\s+ON\s+(\w+)/i)
+  {
+    $t_name = $1;
+    $tab_name = $2;
+
+    if (length($t_name) > 30)
+    {
+      print STDOUT "R_T NAME: $t_name\n";
+    }
+
+    if ($_ =~ /\('(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)'\)/i)
+    {
+      $trigger_new  = <<ENDTRIGGER;
+CREATE OR REPLACE TRIGGER $t_name 
+        AFTER INSERT OR UPDATE 
+        ON $tab_name FOR EACH ROW
+declare numrows INTEGER;
+begin
+        select count(*) into numrows from $3
+        where :new.$5 = $3.$6;
+        if (:new.$5 is not null and numrows = 0) then
+          raise_application_error(-20001, 
+            'Cannot INSERT/UPDATE $tab_name using non-existing $6 ($5).');
+        end if;
+end;
+ENDTRIGGER
+      print TRIGGER_ER $trigger_new;
+      print TRIGGER_ER "\n\/\n";
+    }
+  }
+  elsif ($_ =~ /(\w+)\s+AFTER\s+UPDATE\s+ON\s+(\w+)/i)
+  {
+    $t_name = $1;
+    $tab_name = $2;
+
+    if ($_ =~ /\('(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)'\)/i)
+    {
+      $trigger_new  = '';
+      #print TRIGGER_ER $trigger_new;
+      #print TRIGGER_ER "\n\/\n";
+    }
+  }
+  elsif ($_ =~ /(\w+)\s+AFTER\s+DELETE\s+ON\s+(\w+)/i)
+  {
+    $t_name = $1;
+    $tab_name = $2;
+
+    if ($_ =~ /\('(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)',\s+'(\w+)'\)/i)
+    {
+      $trigger_new  = '';
+      #print TRIGGER_ER $trigger_new;
+      #print TRIGGER_ER "\n\/\n";
+    }
+  }
+  else
+  {
+    print ORACLE $_;
+  }
+
+  if ($_ =~ /;/ && $table)
+  {
+    print TRIGGER_AUTO $trigger;
+    print TRIGGER_AUTO "\n\/\n";
+    $table = '';
+    $trigger = '';
+  }
+}
+
+close (POSTGRES);
+close (ORACLE);
+close (TRIGGER_AUTO);
+close (TRIGGER_ER);
+close (DROP);

Added: trunk/gforge_base/evolvisforge/gforge/db/replicate.sh
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/replicate.sh	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/replicate.sh	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# SourceForge: Breaking Down the Barriers to Open Source Development
+# Copyright 1999-2001 (c) VA Linux Systems
+# http://sourceforge.net 
+#
+# $Id: replicate.sh,v 1.5 2001/06/19 16:50:06 jbyers Exp $	
+#
+
+MasterInit alexandria
+SlaveInit --host=sf-db2 stats
+
+MasterAddTable alexandria stats_site oid
+MasterAddTable alexandria stats_project oid
+MasterAddTable alexandria stats_project_developers oid
+MasterAddTable alexandria stats_project_metric oid
+MasterAddTable alexandria frs_dlstats_file_agg oid
+MasterAddTable alexandria stats_subd_pages oid
+MasterAddTable alexandria stats_agg_logo_by_group oid
+MasterAddTable alexandria stats_cvs_group oid
+MasterAddTable alexandria stats_agg_site_by_group oid
+MasterAddTable alexandria stats_site_pages_by_day oid
+MasterAddTable alexandria frs_package package_id
+MasterAddTable alexandria frs_release release_id
+MasterAddTable alexandria frs_file file_id
+MasterAddTable alexandria frs_processor processor_id
+MasterAddTable alexandria frs_filetype type_id
+MasterAddTable alexandria project_weekly_metric group_id
+MasterAddTable alexandria trove_cat trove_cat_id
+MasterAddTable alexandria trove_group_link trove_group_id
+MasterAddTable alexandria groups group_id
+MasterAddTable alexandria users user_id
+MasterAddTable alexandria foundry_projects id
+SlaveAddTable --host=sf-db2 stats foundry_projects id
+SlaveAddTable --host=sf-db2 stats stats_site oid
+SlaveAddTable --host=sf-db2 stats stats_project oid
+SlaveAddTable --host=sf-db2 stats stats_project_developers oid
+SlaveAddTable --host=sf-db2 stats stats_project_metric oid
+SlaveAddTable --host=sf-db2 stats frs_dlstats_file_agg oid
+SlaveAddTable --host=sf-db2 stats stats_subd_pages oid
+SlaveAddTable --host=sf-db2 stats stats_agg_logo_by_group oid
+SlaveAddTable --host=sf-db2 stats stats_cvs_group oid
+SlaveAddTable --host=sf-db2 stats stats_agg_site_by_group oid
+SlaveAddTable --host=sf-db2 stats stats_site_pages_by_day oid
+SlaveAddTable --host=sf-db2 stats frs_package package_id
+SlaveAddTable --host=sf-db2 stats frs_release release_id
+SlaveAddTable --host=sf-db2 stats frs_file file_id
+SlaveAddTable --host=sf-db2 stats frs_processor processor_id
+SlaveAddTable --host=sf-db2 stats frs_filetype type_id
+SlaveAddTable --host=sf-db2 stats project_weekly_metric group_id
+SlaveAddTable --host=sf-db2 stats trove_cat trove_cat_id
+SlaveAddTable --host=sf-db2 stats trove_group_link trove_group_id
+SlaveAddTable --host=sf-db2 stats groups group_id
+SlaveAddTable --host=sf-db2 stats users user_id


Property changes on: trunk/gforge_base/evolvisforge/gforge/db/replicate.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/db/replication-master.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/replication-master.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/replication-master.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,65 @@
+--
+--	SourceForge: Breaking Down the Barriers to Open Source Development
+--	Copyright 1999-2001 (c) VA Linux Systems
+--	http://sourceforge.net
+--
+--	$Id: replication-master.sql,v 1.7 2001/06/27 00:11:20 tperdue Exp $	
+--
+
+COPY stats_site WITH OIDS TO '/home/tperdue/dumpfiles/stats_site.dump';
+COPY stats_project WITH OIDS TO '/home/tperdue/dumpfiles/stats_project.dump';
+COPY stats_project_developers WITH OIDS TO '/home/tperdue/dumpfiles/stats_project_developers.dump';
+COPY stats_project_metric WITH OIDS TO '/home/tperdue/dumpfiles/stats_project_metric.dump';
+COPY frs_dlstats_file_agg WITH OIDS TO '/home/tperdue/dumpfiles/frs_dlstats_file_agg.dump';
+COPY stats_subd_pages WITH OIDS TO '/home/tperdue/dumpfiles/stats_subd_pages.dump';
+COPY stats_agg_logo_by_group WITH OIDS TO '/home/tperdue/dumpfiles/stats_agg_logo_by_group.dump';
+COPY stats_cvs_group WITH OIDS TO '/home/tperdue/dumpfiles/stats_cvs_group.dump';
+COPY stats_agg_site_by_group WITH OIDS TO '/home/tperdue/dumpfiles/stats_agg_site_by_group.dump';
+COPY stats_site_pages_by_day WITH OIDS TO '/home/tperdue/dumpfiles/stats_site_pages_by_day.dump';
+COPY frs_package WITH OIDS TO '/home/tperdue/dumpfiles/frs_package.dump';
+COPY frs_release WITH OIDS TO '/home/tperdue/dumpfiles/frs_release.dump';
+COPY frs_processor WITH OIDS TO '/home/tperdue/dumpfiles/frs_processor.dump';
+COPY frs_filetype WITH OIDS TO '/home/tperdue/dumpfiles/frs_filetype.dump';
+COPY frs_file WITH OIDS TO '/home/tperdue/dumpfiles/frs_file.dump';
+COPY project_weekly_metric WITH OIDS TO '/home/tperdue/dumpfiles/project_weekly_metric.dump';
+COPY trove_cat WITH OIDS TO '/home/tperdue/dumpfiles/trove_cat.dump';
+COPY trove_group_link WITH OIDS TO '/home/tperdue/dumpfiles/trove_group_link.dump';
+COPY users WITH OIDS TO '/home/tperdue/dumpfiles/users.dump';
+COPY groups WITH OIDS TO '/home/tperdue/dumpfiles/groups.dump';
+COPY foundry_projects WITH oids to '/home/tperdue/dumpfiles/foundry_projects.dump';
+
+
+DROP INDEX frs_release_date;
+DROP INDEX frs_file_name;
+DROP INDEX frs_file_processor;
+DROP INDEX frs_file_type;
+DROP INDEX frs_release_by;
+
+CREATE UNIQUE INDEX statssite_oid ON stats_site(oid);
+CREATE UNIQUE INDEX statsproject_oid ON stats_project(oid);
+CREATE UNIQUE INDEX statsprojectdevelop_oid ON stats_project_developers(oid);
+CREATE UNIQUE INDEX statsprojectmetric_oid ON stats_project_metric(oid);
+CREATE UNIQUE INDEX frsdlfileagg_oid ON frs_dlstats_file_agg(oid);
+CREATE UNIQUE INDEX statssubdpages_oid ON stats_subd_pages(oid);
+CREATE UNIQUE INDEX statsagglogobygrp_oid ON stats_agg_site_by_group(oid);
+CREATE UNIQUE INDEX statscvsgrp_oid ON stats_cvs_group(oid);
+CREATE UNIQUE INDEX statsaggsitebygrp_oid ON stats_agg_site_by_group(oid);
+CREATE UNIQUE INDEX statssitepgsbyday_oid ON stats_site_pages_by_day(oid);
+
+DROP TABLE frs_dlstats_filetotal_agg;
+DROP TABLE frs_dlstats_grouptotal_agg;
+DROP TABLE frs_dlstats_group_agg;
+DROP TABLE stats_project_months;
+DROP TABLE stats_project_all;
+DROP TABLE stats_project_last_30;
+DROP TABLE stats_project_developers_last30;
+DROP TABLE stats_site_pages_by_month;
+DROP TABLE stats_site_last_30;
+DROP TABLE stats_site_months;
+DROP TABLE stats_site_all;
+DROP TABLE trove_agg;
+DROP TABLE trove_treesums;
+
+DROP TABLE foundry_project_rankings_agg;
+DROP TABLE foundry_project_downloads_agg;
+

Added: trunk/gforge_base/evolvisforge/gforge/db/replication-reset-master.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/replication-reset-master.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/replication-reset-master.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,43 @@
+BEGIN;
+
+--
+--	reloid's get lost during dump/restore - reset them
+--
+UPDATE _rserv_tables_ 
+SET reloid=
+(select oid 
+FROM pg_class pgc
+WHERE relname=_rserv_tables_.tname);
+
+--
+--	Purge pending sync logs
+--
+DELETE FROM _rserv_log_;
+DELETE FROM _rserv_sync_;
+
+--
+--	Get a dump of all tables inside a transaction to guarantee integrity
+--
+COPY stats_site WITH OIDS TO '/home/tperdue/dumpfiles/stats_site.dump';
+COPY stats_project WITH OIDS TO '/home/tperdue/dumpfiles/stats_project.dump';
+COPY stats_project_developers WITH OIDS TO '/home/tperdue/dumpfiles/stats_project_developers.dump';
+COPY stats_project_metric WITH OIDS TO '/home/tperdue/dumpfiles/stats_project_metric.dump';
+COPY frs_dlstats_file_agg WITH OIDS TO '/home/tperdue/dumpfiles/frs_dlstats_file_agg.dump';
+COPY stats_subd_pages WITH OIDS TO '/home/tperdue/dumpfiles/stats_subd_pages.dump';
+COPY stats_agg_logo_by_group WITH OIDS TO '/home/tperdue/dumpfiles/stats_agg_logo_by_group.dump';
+COPY stats_cvs_group WITH OIDS TO '/home/tperdue/dumpfiles/stats_cvs_group.dump';
+COPY stats_agg_site_by_group WITH OIDS TO '/home/tperdue/dumpfiles/stats_agg_site_by_group.dump';
+COPY stats_site_pages_by_day WITH OIDS TO '/home/tperdue/dumpfiles/stats_site_pages_by_day.dump';
+COPY frs_package WITH OIDS TO '/home/tperdue/dumpfiles/frs_package.dump';
+COPY frs_release WITH OIDS TO '/home/tperdue/dumpfiles/frs_release.dump';
+COPY frs_processor WITH OIDS TO '/home/tperdue/dumpfiles/frs_processor.dump';
+COPY frs_filetype WITH OIDS TO '/home/tperdue/dumpfiles/frs_filetype.dump';
+COPY frs_file WITH OIDS TO '/home/tperdue/dumpfiles/frs_file.dump';
+COPY project_weekly_metric WITH OIDS TO '/home/tperdue/dumpfiles/project_weekly_metric.dump';
+COPY trove_cat WITH OIDS TO '/home/tperdue/dumpfiles/trove_cat.dump';
+COPY trove_group_link WITH OIDS TO '/home/tperdue/dumpfiles/trove_group_link.dump';
+COPY users WITH OIDS TO '/home/tperdue/dumpfiles/users.dump';
+COPY groups WITH OIDS TO '/home/tperdue/dumpfiles/groups.dump';
+COPY foundry_projects WITH oids to '/home/tperdue/dumpfiles/foundry_projects.dump';
+
+COMMIT;

Added: trunk/gforge_base/evolvisforge/gforge/db/replication-reset-slave.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/replication-reset-slave.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/replication-reset-slave.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,58 @@
+--
+--	reloid's get lost during a dump/restore - reset them
+--
+UPDATE _rserv_slave_tables_ 
+SET reloid=
+(select oid 
+FROM pg_class pgc
+WHERE relname=_rserv_slave_tables_.tname);
+
+--
+--	Blank out all the tables
+--
+TRUNCATE foundry_projects ;
+TRUNCATE stats_site ;
+TRUNCATE stats_project ;
+TRUNCATE stats_project_developers ;
+TRUNCATE stats_project_metric ;
+TRUNCATE frs_dlstats_file_agg ;
+TRUNCATE stats_subd_pages ;
+TRUNCATE stats_agg_logo_by_group ;
+TRUNCATE stats_cvs_group ;
+TRUNCATE stats_agg_site_by_group ;
+TRUNCATE stats_site_pages_by_day ;
+TRUNCATE frs_package ;
+TRUNCATE frs_release ;
+TRUNCATE frs_processor ;
+TRUNCATE frs_filetype ;
+TRUNCATE frs_file ;
+TRUNCATE users ;
+TRUNCATE groups ;
+TRUNCATE project_weekly_metric ;
+TRUNCATE trove_cat ;
+TRUNCATE trove_group_link ;
+
+COPY foundry_projects WITH oids from '/home/tperdue/dumpfiles/foundry_projects.dump';
+COPY stats_site WITH OIDS FROM '/home/tperdue/dumpfiles/stats_site.dump';
+COPY stats_project WITH OIDS FROM '/home/tperdue/dumpfiles/stats_project.dump';
+COPY stats_project_developers WITH OIDS FROM '/home/tperdue/dumpfiles/stats_project_developers.dump';
+COPY stats_project_metric WITH OIDS FROM '/home/tperdue/dumpfiles/stats_project_metric.dump';
+COPY frs_dlstats_file_agg WITH OIDS FROM '/home/tperdue/dumpfiles/frs_dlstats_file_agg.dump';
+COPY stats_subd_pages WITH OIDS FROM '/home/tperdue/dumpfiles/stats_subd_pages.dump';
+COPY stats_agg_logo_by_group WITH OIDS FROM '/home/tperdue/dumpfiles/stats_agg_logo_by_group.dump';
+COPY stats_cvs_group WITH OIDS FROM '/home/tperdue/dumpfiles/stats_cvs_group.dump';
+COPY stats_agg_site_by_group WITH OIDS FROM '/home/tperdue/dumpfiles/stats_agg_site_by_group.dump';
+COPY stats_site_pages_by_day WITH OIDS FROM '/home/tperdue/dumpfiles/stats_site_pages_by_day.dump';
+COPY frs_package WITH OIDS FROM '/home/tperdue/dumpfiles/frs_package.dump';
+COPY frs_release WITH OIDS FROM '/home/tperdue/dumpfiles/frs_release.dump';
+COPY frs_processor WITH OIDS FROM '/home/tperdue/dumpfiles/frs_processor.dump';
+COPY frs_filetype WITH OIDS FROM '/home/tperdue/dumpfiles/frs_filetype.dump';
+COPY frs_file WITH OIDS FROM '/home/tperdue/dumpfiles/frs_file.dump';
+COPY users WITH OIDS FROM '/home/tperdue/dumpfiles/users.dump';
+COPY groups WITH OIDS FROM '/home/tperdue/dumpfiles/groups.dump';
+COPY project_weekly_metric WITH OIDS FROM '/home/tperdue/dumpfiles/project_weekly_metric.dump';
+COPY trove_cat WITH OIDS FROM '/home/tperdue/dumpfiles/trove_cat.dump';
+COPY trove_group_link WITH OIDS FROM '/home/tperdue/dumpfiles/trove_group_link.dump';
+
+DELETE FROM _rserv_slave_sync_;
+

Added: trunk/gforge_base/evolvisforge/gforge/db/replication-slave.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/replication-slave.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/replication-slave.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,349 @@
+--
+--	SourceForge: Breaking Down the Barriers to Open Source Development
+--	Copyright 1999-2001 (c) VA Linux Systems
+--	http://sourceforge.net
+--
+--	$Id: replication-slave.sql,v 1.8 2001/06/27 00:11:20 tperdue Exp $	
+--
+
+CREATE TABLE "stats_site" (
+        "month" integer,
+        "day" integer,
+        "uniq_users" integer,
+        "sessions" integer,
+        "total_users" integer,
+        "new_users" integer,
+        "new_projects" integer
+);
+CREATE UNIQUE INDEX "statssite_month_day" on "stats_site" using btree ( "month" "int4_ops", "day" "int4_ops" );
+
+
+CREATE TABLE "stats_project" (
+        "month" integer DEFAULT 0 NOT NULL,
+        "day" integer DEFAULT 0 NOT NULL,
+        "group_id" integer DEFAULT 0 NOT NULL,
+        "file_releases" integer DEFAULT 0,
+        "msg_posted" integer DEFAULT 0,
+        "msg_uniq_auth" integer DEFAULT 0,
+        "bugs_opened" integer DEFAULT 0,
+        "bugs_closed" integer DEFAULT 0,
+        "support_opened" integer DEFAULT 0,
+        "support_closed" integer DEFAULT 0,
+        "patches_opened" integer DEFAULT 0,
+        "patches_closed" integer DEFAULT 0,
+        "artifacts_opened" integer DEFAULT 0,
+        "artifacts_closed" integer DEFAULT 0,
+        "tasks_opened" integer DEFAULT 0,
+        "tasks_closed" integer DEFAULT 0,
+        "help_requests" integer DEFAULT 0
+);
+CREATE UNIQUE INDEX "statsproject_month_day_group" on "stats_project" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "stats_project_developers" (
+        "month" integer DEFAULT 0 NOT NULL,
+        "day" integer DEFAULT 0 NOT NULL,
+        "group_id" integer DEFAULT 0 NOT NULL,
+        "developers" integer DEFAULT 0 NOT NULL
+);
+CREATE UNIQUE INDEX "statsprojectdev_month_day_group" on "stats_project_developers" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "stats_project_metric" (
+        "month" integer DEFAULT 0 NOT NULL,
+        "day" integer DEFAULT 0 NOT NULL,
+        "ranking" integer DEFAULT 0 NOT NULL,
+        "percentile" double precision DEFAULT 0 NOT NULL,
+        "group_id" integer DEFAULT 0 NOT NULL
+);
+CREATE UNIQUE INDEX "statsprojectmetric_month_day_gr" on "stats_project_metric" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "frs_dlstats_file_agg" (
+        "month" integer,
+        "day" integer,
+        "file_id" integer,
+        "downloads" integer
+);
+CREATE UNIQUE INDEX "frsdlfileagg_month_day_file" on "frs_dlstats_file_agg" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "file_id" "int4_ops" );
+
+
+CREATE TABLE "stats_subd_pages" (
+        "month" integer DEFAULT 0 NOT NULL,
+        "day" integer DEFAULT 0 NOT NULL,
+        "group_id" integer DEFAULT 0 NOT NULL,
+        "pages" integer DEFAULT 0 NOT NULL
+);
+CREATE UNIQUE INDEX "statssubdpages_month_day_group" on "stats_subd_pages" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "stats_agg_logo_by_group" (
+        "month" integer,
+        "day" integer,
+        "group_id" integer,
+        "count" integer
+);
+CREATE UNIQUE INDEX "statslogobygroup_month_day_grou" on "stats_agg_logo_by_group" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "stats_cvs_group" (
+        "month" integer DEFAULT 0 NOT NULL,
+        "day" integer DEFAULT 0 NOT NULL,
+        "group_id" integer DEFAULT 0 NOT NULL,
+        "checkouts" integer DEFAULT 0 NOT NULL,
+        "commits" integer DEFAULT 0 NOT NULL,
+        "adds" integer DEFAULT 0 NOT NULL
+);
+CREATE UNIQUE INDEX "statscvsgroup_month_day_group" on "stats_cvs_group" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "stats_agg_site_by_group" (
+        "month" integer,
+        "day" integer,
+        "group_id" integer,
+        "count" integer
+);
+CREATE UNIQUE INDEX "statssitebygroup_month_day_grou" on "stats_agg_site_by_group" 
+	using btree ( "month" "int4_ops", "day" "int4_ops", "group_id" "int4_ops" );
+
+
+CREATE TABLE "stats_site_pages_by_day" (
+        "month" integer,
+        "day" integer,
+        "site_page_views" integer
+);
+CREATE  INDEX "statssitepagesbyday_month_day" on "stats_site_pages_by_day" 
+	using btree ( "month" "int4_ops", "day" "int4_ops" );
+
+
+CREATE TABLE "frs_package" (
+        "package_id" integer DEFAULT nextval('frs_package_pk_seq'::text) NOT NULL,
+        "group_id" integer DEFAULT '0' NOT NULL,
+        "name" text,
+        "status_id" integer DEFAULT '0' NOT NULL,
+        Constraint "frs_package_pkey" Primary Key ("package_id")
+);
+CREATE  INDEX "package_group_id" on "frs_package" using btree ( "group_id" "int4_ops" );
+
+
+CREATE TABLE "frs_release" (
+        "release_id" integer DEFAULT nextval('frs_release_pk_seq'::text) NOT NULL,
+        "package_id" integer DEFAULT '0' NOT NULL,
+        "name" text,
+        "notes" text,
+        "changes" text,
+        "status_id" integer DEFAULT '0' NOT NULL,
+        "preformatted" integer DEFAULT '0' NOT NULL,
+        "release_date" integer DEFAULT '0' NOT NULL,
+        "released_by" integer DEFAULT '0' NOT NULL,
+        Constraint "frs_release_pkey" Primary Key ("release_id")
+);
+CREATE  INDEX "frs_release_package" on "frs_release" using btree ( "package_id" "int4_ops" );
+
+
+CREATE TABLE "frs_file" (
+        "file_id" integer DEFAULT nextval('frs_file_pk_seq'::text) NOT NULL,
+        "filename" text,
+        "release_id" integer DEFAULT '0' NOT NULL,
+        "type_id" integer DEFAULT '0' NOT NULL,
+        "processor_id" integer DEFAULT '0' NOT NULL,
+        "release_time" integer DEFAULT '0' NOT NULL,
+        "file_size" integer DEFAULT '0' NOT NULL,
+        "post_date" integer DEFAULT '0' NOT NULL,
+        Constraint "frs_file_pkey" Primary Key ("file_id")
+);
+CREATE  INDEX "frs_file_date" on "frs_file" using btree ( "post_date" "int4_ops" );
+CREATE  INDEX "frs_file_release_id" on "frs_file" using btree ( "release_id" "int4_ops" );
+
+
+CREATE TABLE "users" (
+        "user_id" integer DEFAULT nextval('users_pk_seq'::text) NOT NULL,
+        "user_name" text DEFAULT '' NOT NULL,
+        "email" text DEFAULT '' NOT NULL,
+        "user_pw" character varying(32) DEFAULT '' NOT NULL,
+        "realname" character varying(32) DEFAULT '' NOT NULL,
+        "status" character(1) DEFAULT 'A' NOT NULL,
+        "shell" character varying(20) DEFAULT '/bin/bash' NOT NULL,
+        "unix_pw" character varying(40) DEFAULT '' NOT NULL,
+        "unix_status" character(1) DEFAULT 'N' NOT NULL,
+        "unix_uid" integer DEFAULT '0' NOT NULL,
+        "unix_box" character varying(10) DEFAULT 'shell1' NOT NULL,
+        "add_date" integer DEFAULT '0' NOT NULL,
+        "confirm_hash" character varying(32),
+        "mail_siteupdates" integer DEFAULT '0' NOT NULL,
+        "mail_va" integer DEFAULT '0' NOT NULL,
+        "authorized_keys" text,
+        "email_new" text,
+        "people_view_skills" integer DEFAULT '0' NOT NULL,
+        "people_resume" text DEFAULT '' NOT NULL,
+        "timezone" character varying(64) DEFAULT 'GMT',
+        "language" integer DEFAULT '1' NOT NULL,
+        Constraint "users_pkey" Primary Key ("user_id")
+);
+CREATE UNIQUE INDEX "users_namename_uniq" on "users" using btree ( "user_name" "text_ops" );
+CREATE  INDEX "users_status" on "users" using btree ( "status" "bpchar_ops" );
+CREATE  INDEX "users_user_pw" on "users" using btree ( "user_pw" "varchar_ops" );
+
+
+CREATE TABLE "groups" (
+        "group_id" integer DEFAULT nextval('groups_pk_seq'::text) NOT NULL,
+        "group_name" character varying(40),
+        "homepage" character varying(128),
+        "is_public" integer DEFAULT '0' NOT NULL,
+        "status" character(1) DEFAULT 'A' NOT NULL,
+        "unix_group_name" character varying(30) DEFAULT '' NOT NULL,
+        "unix_box" character varying(20) DEFAULT 'shell1' NOT NULL,
+        "http_domain" character varying(80),
+        "short_description" character varying(255),
+        "cvs_box" character varying(20) DEFAULT 'cvs1' NOT NULL,
+        "license" character varying(16),
+        "register_purpose" text,
+        "license_other" text,
+        "register_time" integer DEFAULT '0' NOT NULL,
+        "dead1" integer DEFAULT '1' NOT NULL,
+        "rand_hash" text,
+        "use_mail" integer DEFAULT '1' NOT NULL,
+        "use_survey" integer DEFAULT '1' NOT NULL,
+        "dead2" integer DEFAULT '1' NOT NULL,
+        "use_forum" integer DEFAULT '1' NOT NULL,
+        "use_pm" integer DEFAULT '1' NOT NULL,
+        "use_cvs" integer DEFAULT '1' NOT NULL,
+        "use_news" integer DEFAULT '1' NOT NULL,
+        "dead3" integer DEFAULT '1' NOT NULL,
+        "dead4" text DEFAULT '' NOT NULL,
+        "dead5" text DEFAULT '' NOT NULL,
+        "dead6" text DEFAULT '' NOT NULL,
+        "type" integer DEFAULT '1' NOT NULL,
+        "use_docman" integer DEFAULT '1' NOT NULL,
+        "dead7" integer DEFAULT '0' NOT NULL,
+        "dead8" integer DEFAULT '0' NOT NULL,
+        "dead9" integer DEFAULT '0' NOT NULL,
+        "new_task_address" text DEFAULT '' NOT NULL,
+        "send_all_tasks" integer DEFAULT '0' NOT NULL,
+        "dead10" integer DEFAULT '1' NOT NULL,
+        "use_pm_depend_box" integer DEFAULT '1' NOT NULL,
+        "dead11" integer,
+        "dead12" integer,
+        "dead13" integer,
+        Constraint "groups_pkey" Primary Key ("group_id")
+);
+CREATE UNIQUE INDEX "group_unix_uniq" on "groups" using btree ( "unix_group_name" "varchar_ops" );
+CREATE  INDEX "groups_type" on "groups" using btree ( "type" "int4_ops" );
+CREATE  INDEX "groups_public" on "groups" using btree ( "is_public" "int4_ops" );
+CREATE  INDEX "groups_status" on "groups" using btree ( "status" "bpchar_ops" );
+
+
+CREATE TABLE "frs_processor" (
+        "processor_id" integer DEFAULT nextval('frs_processor_pk_seq'::text) NOT NULL,
+        "name" text,
+        Constraint "frs_processor_pkey" Primary Key ("processor_id")
+);
+
+
+CREATE TABLE "frs_filetype" (
+        "type_id" integer DEFAULT nextval('frs_filetype_pk_seq'::text) NOT NULL,
+        "name" text,
+        Constraint "frs_filetype_pkey" Primary Key ("type_id")
+);
+
+
+CREATE TABLE "project_weekly_metric" (
+        "ranking" integer DEFAULT nextval('project_weekly_metric_pk_seq'::text) NOT NULL,
+        "percentile" double precision,
+        "group_id" integer DEFAULT '0' NOT NULL,
+        Constraint "project_weekly_metric_pkey" Primary Key ("ranking")
+);
+CREATE  INDEX "projectweeklymetric_ranking" on "project_weekly_metric" using btree ( "ranking" "int4_ops" );
+CREATE  INDEX "project_metric_weekly_group" on "project_weekly_metric" using btree ( "group_id" "int4_ops" );
+
+
+CREATE TABLE "trove_group_link" (
+        "trove_group_id" integer DEFAULT nextval('trove_group_link_pk_seq'::text) NOT NULL,
+        "trove_cat_id" integer DEFAULT '0' NOT NULL,
+        "trove_cat_version" integer DEFAULT '0' NOT NULL,
+        "group_id" integer DEFAULT '0' NOT NULL,
+        "trove_cat_root" integer DEFAULT '0' NOT NULL,
+        Constraint "trove_group_link_pkey" Primary Key ("trove_group_id")
+);
+CREATE  INDEX "trove_group_link_group_id" on "trove_group_link" using btree ( "group_id" "int4_ops" );
+CREATE  INDEX "trove_group_link_cat_id" on "trove_group_link" using btree ( "trove_cat_id" "int4_ops" );
+
+
+CREATE TABLE "trove_cat" (
+        "trove_cat_id" integer DEFAULT nextval('trove_cat_pk_seq'::text) NOT NULL,
+        "version" integer DEFAULT '0' NOT NULL,
+        "parent" integer DEFAULT '0' NOT NULL,
+        "root_parent" integer DEFAULT '0' NOT NULL,
+        "shortname" character varying(80),
+        "fullname" character varying(80),
+        "description" character varying(255),
+        "count_subcat" integer DEFAULT '0' NOT NULL,
+        "count_subproj" integer DEFAULT '0' NOT NULL,
+        "fullpath" text DEFAULT '' NOT NULL,
+        "fullpath_ids" text,
+        Constraint "trove_cat_pkey" Primary Key ("trove_cat_id")
+);
+CREATE  INDEX "parent_idx" on "trove_cat" using btree ( "parent" "int4_ops" );
+CREATE  INDEX "root_parent_idx" on "trove_cat" using btree ( "root_parent" "int4_ops" );
+CREATE  INDEX "version_idx" on "trove_cat" using btree ( "version" "int4_ops" );
+
+
+CREATE SEQUENCE "trove_treesums_pk_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+CREATE TABLE "trove_treesums" (
+        "trove_treesums_id" integer DEFAULT nextval('trove_treesums_pk_seq'::text) NOT NULL,
+        "trove_cat_id" integer DEFAULT '0' NOT NULL,
+        "limit_1" integer DEFAULT '0' NOT NULL,
+        "subprojects" integer DEFAULT '0' NOT NULL,
+        Constraint "trove_treesums_pkey" Primary Key ("trove_treesums_id")
+);
+
+CREATE TABLE "foundry_projects" (
+        "id" integer DEFAULT nextval('foundry_projects_pk_seq'::text) NOT NULL,
+        "foundry_id" integer DEFAULT '0' NOT NULL, 
+        "project_id" integer DEFAULT '0' NOT NULL, 
+        Constraint "foundry_projects_pkey" Primary Key ("id")
+);
+CREATE  INDEX "foundry_projects_foundry" on "foundry_projects" using btree (
+"foundry_id" "int4_ops" );
+
+COPY foundry_projects WITH oids from '/home/tperdue/dumpfiles/foundry_projects.dump';
+COPY stats_site WITH OIDS FROM '/home/tperdue/dumpfiles/stats_site.dump';
+COPY stats_project WITH OIDS FROM '/home/tperdue/dumpfiles/stats_project.dump';
+COPY stats_project_developers WITH OIDS FROM '/home/tperdue/dumpfiles/stats_project_developers.dump';
+COPY stats_project_metric WITH OIDS FROM '/home/tperdue/dumpfiles/stats_project_metric.dump';
+COPY frs_dlstats_file_agg WITH OIDS FROM '/home/tperdue/dumpfiles/frs_dlstats_file_agg.dump';
+COPY stats_subd_pages WITH OIDS FROM '/home/tperdue/dumpfiles/stats_subd_pages.dump';
+COPY stats_agg_logo_by_group WITH OIDS FROM '/home/tperdue/dumpfiles/stats_agg_logo_by_group.dump';
+COPY stats_cvs_group WITH OIDS FROM '/home/tperdue/dumpfiles/stats_cvs_group.dump';
+COPY stats_agg_site_by_group WITH OIDS FROM '/home/tperdue/dumpfiles/stats_agg_site_by_group.dump';
+COPY stats_site_pages_by_day WITH OIDS FROM '/home/tperdue/dumpfiles/stats_site_pages_by_day.dump';
+COPY frs_package WITH OIDS FROM '/home/tperdue/dumpfiles/frs_package.dump';
+COPY frs_release WITH OIDS FROM '/home/tperdue/dumpfiles/frs_release.dump';
+COPY frs_processor WITH OIDS FROM '/home/tperdue/dumpfiles/frs_processor.dump';
+COPY frs_filetype WITH OIDS FROM '/home/tperdue/dumpfiles/frs_filetype.dump';
+COPY frs_file WITH OIDS FROM '/home/tperdue/dumpfiles/frs_file.dump';
+COPY users WITH OIDS FROM '/home/tperdue/dumpfiles/users.dump';
+COPY groups WITH OIDS FROM '/home/tperdue/dumpfiles/groups.dump';
+COPY project_weekly_metric WITH OIDS FROM '/home/tperdue/dumpfiles/project_weekly_metric.dump';
+COPY trove_cat WITH OIDS FROM '/home/tperdue/dumpfiles/trove_cat.dump';
+COPY trove_group_link WITH OIDS FROM '/home/tperdue/dumpfiles/trove_group_link.dump';
+
+drop index project_weekly_metric_pkey;
+
+CREATE UNIQUE INDEX statssite_oid ON stats_site(oid);
+CREATE UNIQUE INDEX statsproject_oid ON stats_project(oid);
+CREATE UNIQUE INDEX statsprojectdevelop_oid ON stats_project_developers(oid);
+CREATE UNIQUE INDEX statsprojectmetric_oid ON stats_project_metric(oid);
+CREATE UNIQUE INDEX frsdlfileagg_oid ON frs_dlstats_file_agg(oid);
+CREATE UNIQUE INDEX statssubdpages_oid ON stats_subd_pages(oid);
+CREATE UNIQUE INDEX statsagglogobygrp_oid ON stats_agg_logo_by_group(oid);
+CREATE UNIQUE INDEX statscvsgrp_oid ON stats_cvs_group(oid);
+CREATE UNIQUE INDEX statsaggsitebygrp_oid ON stats_agg_site_by_group(oid);
+CREATE UNIQUE INDEX statssitepgsbyday_oid ON stats_site_pages_by_day(oid);

Added: trunk/gforge_base/evolvisforge/gforge/db/replication.plan
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/replication.plan	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/replication.plan	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,54 @@
+#
+# SourceForge: Breaking Down the Barriers to Open Source Development
+# Copyright 1999-2001 (c) VA Linux Systems
+# http://sourceforge.net
+#
+# $Id: replication.plan,v 1.3 2001/06/19 16:50:06 jbyers Exp $	
+#
+
+Replicate Tables:
+
+stats_site
+stats_project
+stats_project_developers
+stats_project_metric
+frs_dlstats_file_agg
+stats_subd_pages
+stats_agg_logo_by_group
+stats_cvs_group
+stats_agg_site_by_group
+stats_site_pages_by_day
+
+project_weekly_metric
+trove_cat
+trove_group_link
+
+frs_package
+frs_release
+frs_file
+frs_processor
+frs_filetype
+users
+groups
+
+foundry_projects
+
+Slave-only tables:
+
+frs_dlstats_filetotal_agg
+frs_dlstats_grouptotal_agg
+frs_dlstats_group_agg
+stats_project_months
+stats_project_all
+stats_project_last_30
+stats_project_developers_last30
+stats_site_pages_by_month
+stats_site_last_30
+stats_site_months
+stats_site_all
+
+trove_agg
+trove_treesums
+
+foundry_project_rankings_agg
+foundry_project_downloads_agg

Added: trunk/gforge_base/evolvisforge/gforge/db/sfdocs.sql
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/sfdocs.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/sfdocs.sql	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,89 @@
+# MySQL dump 8.8
+#
+# Host: localhost    Database: sourceforge
+#--------------------------------------------------------
+# Server version	3.23.22-beta
+
+#
+# Dumping data for table 'doc_groups'
+#
+
+INSERT INTO doc_groups VALUES (793,'About SourceForge',1);
+INSERT INTO doc_groups VALUES (794,'SourceForge Development',1);
+INSERT INTO doc_groups VALUES (801,'Account Information',1);
+INSERT INTO doc_groups VALUES (802,'CVS - General Information',1);
+INSERT INTO doc_groups VALUES (803,'CVS - OS Specific Information',1);
+INSERT INTO doc_groups VALUES (804,'Database Information',1);
+INSERT INTO doc_groups VALUES (805,'General Documentation',1);
+INSERT INTO doc_groups VALUES (806,'Project Administration',1);
+INSERT INTO doc_groups VALUES (807,'Translated Documentation',1);
+INSERT INTO doc_groups VALUES (808,'Website Hosting Information',1);
+
+# MySQL dump 8.8
+#
+# Host: localhost    Database: sourceforge
+#--------------------------------------------------------
+# Server version	3.23.22-beta
+
+#
+# Dumping data for table 'doc_states'
+#
+
+INSERT INTO doc_states VALUES (1,'active');
+INSERT INTO doc_states VALUES (2,'deleted');
+INSERT INTO doc_states VALUES (3,'pending');
+INSERT INTO doc_states VALUES (4,'hidden');
+INSERT INTO doc_states VALUES (5,'private');
+
+# MySQL dump 8.8
+#
+# Host: localhost    Database: sourceforge
+#--------------------------------------------------------
+# Server version	3.23.22-beta
+
+#
+# Dumping data for table 'doc_data'
+#
+
+INSERT INTO doc_data VALUES (753,1,'SourceForge services','&lt;H1&gt;Summary of SourceForge Services&lt;/H1&gt;\r\n\r\n&lt;P&gt;Following is a list of the services which \r\nwe currently provide to SourceForge projects.\r\nWe expect to continually add services and improve upon\r\nthe services on this list.\r\n\r\n&lt;P&gt;&lt;B&gt;The SourceForge Team Development Environment (TDE)&lt;/B&gt;\r\na\r\n&lt;UL&gt;\r\n&lt;li&gt;&lt;B&gt;TDE Web Administrative Tools&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;Advanced web-based administrative tools\r\nprovide easy maintenance for all facets of your project.&lt;/I&gt;\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Web Server&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;&lt;P&gt;Each project receives its own Apache-style htdocs and cgi-bin directories.\r\nCGI can be executed only from the cgi-bin directory and is ScriptAliased to\r\nhttp://yourproject.SourceForge.net/cgi-bin/. Your domain is hosted on\r\na name-based VirtualHost on the main project web server.\r\n\r\n&lt;P&gt;The Apache server is compiled with PHP3/MySQL support and is able to\r\naccess your MySQL database.\r\n\r\n&lt;P&gt;There is a 100MB soft quota for your web site and anonymous FTP directory.\r\n(The high-capacity file server has no limit.) More space can be requested.\r\n&lt;/l&gt;\r\n&lt;LI&gt;&lt;B&gt;MySQL Database&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;Your shell account and web server have access to your project\'s own MySQL database.&lt;/I&gt;\r\n&lt;BR&gt;&lt;A href=&quot;display_topic.php?topicid=11&quot;&gt;[Details...]&lt;/A&gt;\r\n&lt;BR&gt;&lt;LI&gt;&lt;B&gt;Your Own Domain&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;If you make the registration with Internic, we can\r\nanswer for your domain. That is, we can configure our webserver to respond for [whatevername.{com,net,org}.  We currently\r\naren\'t providing primary/secondary DNS hosting.\r\nThis will affect all domains that would otherwise be\r\nreferenced by yourproject.SourceForge.net.&lt;/I&gt;\r\n&lt;!--&lt;BR&gt;&lt;LI&gt;&lt;B&gt;Mail Aliases&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;A web interface provides unlimited control over mail aliases at\r\nalias at yourproject.SourceForge.net.&lt;/I&gt;--&gt;\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;E-mail Lists&lt;/B&gt; (Public &amp; Private)\r\n&lt;BR&gt;&lt;I&gt;The Mailman mailing list manager and majordomo are available\r\nfor your mailing lists.&lt;/I&gt;\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;CVS Repository&lt;/B&gt; \r\n&lt;BR&gt;&lt;I&gt;Each project has its own CVS repository (with separate CVSROOT).\r\nDevelopers are granted secure access to the tree through SSH. Anonymous\r\nCVS/pserver access is granted to the general public.&lt;/I&gt;\r\n\r\n&lt;P&gt;This means that your cvs logs, history files, and behavior\r\nare unique to your repository. This allows us to customize certain\r\nprojects on request. The old method of housing several directories\r\nin one CVS tree also led to the mixing of log files and inability\r\nto separate certain parts of projects easily.\r\n\r\n&lt;P&gt;We\'ve made custom changes to the CVS code to allow us to host\r\nthis many CVS Repositories through one access point, and to\r\nclean up the handling of anonymous CVS users.\r\n\r\n&lt;P&gt;We have chosen to allow developers to access the CVS reponsitories\r\nthrough SSH, which the CVS client can easily do by setting one\r\nenvironment variable (and installing SSH).\r\n\r\n&lt;P&gt;While normally this would open up the CVS box to shell access,\r\nan in-house developed custom shell ensures that only SSH/CVS access\r\nis allowed.\r\n\r\n&lt;P&gt;We open up the repositories for anonymous access through pserver.\r\nNo passwords are sent in anonymous CVS access.\r\n\r\n&lt;li&gt;&lt;B&gt;High-capacity File Server&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;Released versions of your project are stored on our\r\nextreme-capacity fileserver. Current capacity for this server\r\nis 1000 concurrent ftp and 3000 concurrent http connections.&lt;/I&gt;\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Mid-capacity FTP directory&lt;/I&gt;\r\n&lt;BR&gt;&lt;I&gt;Full read/write access to your own FTP directory, available\r\nanonymously to the outside world.&lt;/I&gt;\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Project Management Software&lt;/B&gt;\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Support system&lt;/B&gt;\r\n&lt;l&gt;The support tools bundled with your project will allow you to help users in a recorded forum, so that your prior\r\nuser problems will be indexed for later tracking.\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Patch Manager&lt;/B&gt;\r\n&lt;l&gt;The patch manager allows for people external to the project to submit patches, allowing you to accept external developer support.\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Bug-Tracking System&lt;/B&gt; (Public &amp; Private)\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;Discussion Forums&lt;/B&gt; (Public &amp; Private)\r\n&lt;BR&gt;&lt;li&gt;&lt;B&gt;SSH Account&lt;/B&gt;\r\n&lt;BR&gt;&lt;I&gt;A restricted SSH account provides basic shell functions, your own crontab,\r\nand access to your HTTP account for you and all of your developers.&lt;/I&gt;\r\n&lt;/p&gt;     ',968792095,968791939,1458,793,'aka \'What do I get?\'');
+INSERT INTO doc_data VALUES (754,1,'Harware behind SourceForge','        &lt;p&gt; &lt;P&gt;&lt;H1&gt;SourceForge Hardware Summary&lt;/H1&gt;&lt;/P&gt;\r\n\r\n&lt;P&gt;\r\n&lt;TABLE&gt;\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Load Balancing Firewall Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;PII 350&lt;BR&gt;128MB RAM&lt;BR&gt; 4.5GB U2W SCSI HDD&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;SourceForge Web Server 1&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PIII 600&lt;BR&gt;512MB RAM&lt;BR&gt; 18GB U2W SCSI HDD&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;SourceForge Web Server 2&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PIII 600&lt;BR&gt;512MB RAM&lt;BR&gt; 18GB U2W SCSI HDD&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;SourceForge Database Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Quad PII-Xeon 400&lt;BR&gt;2GB RAM&lt;BR&gt;75GB RAID-5&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;SourceForge File Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Quad PII-Xeon 400&lt;BR&gt;2GB RAM&lt;BR&gt;850GB on 5 Mylex ExtremeRaid Controllers&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;SourceForge Mail/DNS Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PII-350&lt;BR&gt;512MB RAM&lt;BR&gt;54GB U2W SCSI HDD&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Geocrawler Mail Archiver&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PIII-500&lt;BR&gt;1GB RAM&lt;BR&gt;154GB RAID-5&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Sitewide Backup Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;PII-350&lt;BR&gt;128MB RAM&lt;BR&gt;18GB U2W SCSI HDD&lt;BR&gt;5 Seagate 25GB Native AIT Tape Drives&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Project CVS Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PIII-600&lt;BR&gt;1GB RAM&lt;BR&gt;75GB RAID-5&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Project Web Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PIII-600&lt;BR&gt;512MB RAM&lt;BR&gt;2 18GB U2W SCSI HDD&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Project Database Server&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;Dual PIII-Xeon 500&lt;BR&gt;1GB RAM&lt;BR&gt;35GB RAID-5&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;TR valign=top&gt;\r\n&lt;TD&gt;&lt;B&gt;Totals (Rough)&lt;/B&gt;&lt;/TD&gt;\r\n&lt;TD&gt;CPU: 11.4Gz&lt;BR&gt;RAM: 9.5GB&lt;BR&gt;Storage: 1.34TB (Formatted Storage, After RAID)&lt;/TD&gt;\r\n&lt;/TR&gt;\r\n\r\n&lt;/TABLE&gt;\r\n',968792102,968792041,1458,793,'aka\' How many boxen ya got?\'');
+INSERT INTO doc_data VALUES (755,1,'Software behind SourceForge','&lt;P&gt;\r\n&lt;h1&gt;The Software behind SourceForge&lt;/h1&gt;\r\n\r\n&lt;P&gt;In addition to writing much of our own software, we utilized the\r\nefforts of many great software developers, and would like to \r\nrecognize their products here. These are all fantastic products and\r\nwe would be happy to talk about how we have implemented them to any\r\ninterested parties. \r\n\r\n&lt;HR&gt;\r\n\r\n&lt;table border=0 cellspacing=2 cellpadding=2 bgcolor=&quot;&quot; valign=&quot;bottom&quot;&gt;\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.amanda.org/&quot;&gt;Amanda&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that allows the administrator of a LAN to set up a single master backup server to back up multiple hosts to a single large capacity tape drive.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.apache.org/&quot;&gt;Apache&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;Apache is an award winning webserver that made this site possible.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.boa.org/&quot;&gt;Boa&lt;/a&gt;*&lt;/td&gt;\r\n&lt;td&gt;Boa is a single-tasking HTTP server. That means that unlike traditional web servers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.cyclic.com/&quot;&gt;CVS&lt;/a&gt;*&lt;/td&gt;\r\n&lt;td&gt;CVS is the Version Control system that we use, for both our development and that of the projects.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://stud.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi/&quot;&gt;cvsweb&lt;/a&gt;*&lt;/td&gt;\r\n&lt;td&gt;A script to allow easy viewing of live CVS repositories.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.leonine.com/~ltemplin/&quot;&gt;Grap&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;General execution wRAPper. Grap is a wrapper designed to verify commands before executing them.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.linuxvirtualserver.org/&quot;&gt;IPVS&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;Virtual server is a scalable and highly available server built on a cluster of real servers. The architecture of the cluster is transparent to end users, and the users see only a single virtual server.&lt;/td&gt;\r\n&lt;/td&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.list.org/&quot;&gt;GNU MailMan&lt;/a&gt;*&lt;/td&gt;\r\n&lt;td&gt;Mailman is software to help manage email discussion lists, much like Majordomo and Smartmail. Unlike most similar products, Mailman gives each mailing list a web page, and allows users to subscribe, unsubscribe, etc. over the web.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.modssl.org/&quot;&gt;ModSSL&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;The mod_ssl project provides strong cryptography for the Apache 1.3 webserver via the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols by the help of the Open Source SSL/TLS toolkit OpenSSL, which is based on SSLeay from Eric A. Young and Tim J. Hudson.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;MySQL is a true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular and standardized database language in the world. MySQL is a client/server implementation that consists of a server daemon mysqld and many different client programs and libraries.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.php.net/&quot;&gt;PHP&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;PHP is a server-side, cross-platform, HTML embedded scripting language.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.redhat.com/&quot;&gt;Redhat Linux&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;Red Hat Linux is a powerful, extremely stable, next-generation computer operating system that provides a high performance computing environment for both server and desktop PCs.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=http://sourceforge.net/project/?group_id=1&gt;SourceForge&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;A bundle of the home made software that runs www.sourceforge.net, distributed\r\nunder the GPL license.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;tr valign=top&gt;\r\n&lt;td&gt;&lt;a href=&quot;http://www.ssh.fi/&quot;&gt;SSH&lt;/a&gt;&lt;/td&gt;\r\n&lt;td&gt;Secure Shell is a program that allows you to open an encrypted connection to another computer.  It allows remote execution of command and copying of files from one machine to another.&lt;/td&gt;\r\n&lt;/tr&gt;\r\n\r\n&lt;/table&gt;\r\n',968792386,968792185,1458,793,'Open Source is a good thing');
+INSERT INTO doc_data VALUES (756,1,'Frequently Asked Questions','&lt;P&gt;&lt;H1&gt;SourceForge Frequently Asked Questions (FAQ)&lt;/h1&gt;\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;#what-main&quot;&gt;What is SourceForge?&lt;/A&gt;\r\n        &lt;UL&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#what-os&quot;&gt;What is Open Source software?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#what-beta&quot;&gt;What is this &quot;public beta&quot;? When is your full release?&lt;/A&gt;\r\n        &lt;/UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;#whodev-main&quot;&gt;Who develops SourceForge?&lt;/A&gt;\r\n        &lt;UL&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whodev-why&quot;&gt;Why did you create SourceForge?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whodev-pays&quot;&gt;Who pays for SourceForge?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whodev-mot&quot;&gt;What is the motivation to pay for something like this?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whodev-catch&quot;&gt;This seems like an awful lot of free stuff. What\'s the catch?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whodev-help&quot;&gt;That\'s cool! I\'d really like to help. Can I?&lt;/A&gt;\r\n        &lt;/UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;#whohost-main&quot;&gt;Who can host with SourceForge?&lt;/A&gt;\r\n        &lt;UL&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whohost-web&quot;&gt;What if I don\'t have software, but wanted you to host my web site?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whohost-rest&quot;&gt;Are there any restrictions on the types of software I can host here?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whohost-com&quot;&gt;Can I host commercial software on SourceForge?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whohost-owns&quot;&gt;Who owns the source code on SourceForge?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whohost-stop&quot;&gt;What if I host with SourceForge, then decide to stop?&lt;/A&gt;\r\n        &lt;/UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;#whyhost-main&quot;&gt;Why should I host my software with SourceForge?&lt;/A&gt;\r\n        &lt;UL&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whyhost-secure&quot;&gt;Is SourceForge secure?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whyhost-backup&quot;&gt;What is your backup strategy?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whyhost-all&quot;&gt;Do I have to use all of your services? Can I just use mailing lists, or bug tracking?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whyhost-root&quot;&gt;Won\'t I lose a lot of control if I don\'t have root access?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whyhost-cvs&quot;&gt;I already have a cvs tree. Can you import it?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#whyhost-files&quot;&gt;I have a lot of file releases already. Can I make them available on the main file server?&lt;/A&gt;\r\n        &lt;/UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;#big-main&quot;&gt;So how big is all this, really?&lt;/A&gt;\r\n        &lt;UL&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-fad&quot;&gt;Isn\'t Open Source a fad? Can it really work?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-cap&quot;&gt;How much capacity does SourceForge have right now?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-scale&quot;&gt;Wow. That\'s a lot. Can it scale?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-mirror&quot;&gt;Are you going to mirror SourceForge? (and can I pay for it?)&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-ready&quot;&gt;I thought Linux wasn\'t ready for the enterprise. What was your setup experience like?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-wait&quot;&gt;What improvements in Linux/Open Source software are you still waiting for? &lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#big-future&quot;&gt;What is the future of SourceForge?&lt;/A&gt;\r\n        &lt;/UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;#whowrote&quot;&gt;Who wrote this FAQ? Are you available?&lt;/A&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;HR noshade&gt;\r\n\r\n&lt;P&gt;&lt;A name=&quot;what-main&quot;&gt; &lt;/A&gt;&lt;B&gt;What is SourceForge?&lt;/B&gt;\r\n&lt;P&gt;SourceForge is a free hosting service for &lt;A href=&quot;http://www.opensource.org&quot;&gt;Open Source&lt;/A&gt; \r\ndevelopers which offers, among other things, a CVS repository, mailing lists,\r\nbug tracking, message forums, task management software, web site hosting,\r\npermanent file archival, full backups, and total web-based administration.\r\nA more &lt;A href=&quot;services.php&quot;&gt;complete description of services&lt;/A&gt; is\r\navailable. \r\n\r\n&lt;P&gt;&lt;A name=&quot;what-os&quot;&gt; &lt;/A&gt;&lt;B&gt;What is Open Source software?&lt;/B&gt;\r\n&lt;P&gt;In short, Open Source software is software with source code made available to the public,\r\nwith no fees or royalties for use or distribution. The official definition, as well\r\nas the rationale and history behind open source software, can be found\r\nat &lt;A href=&quot;http://www.opensource.org&quot;&gt;The Open Source Initiative&lt;/A&gt;\'s web site.\r\n&lt;P&gt;In the near future we will have an Open Source FAQ, with discussion\r\nabout the legalities of Open Source software, business justification,\r\nand market trends.\r\n\r\n&lt;P&gt;&lt;A name=&quot;what-beta&quot;&gt; &lt;/A&gt;&lt;B&gt;What is this &quot;public beta&quot;? When is your full release?&lt;/B&gt;\r\n&lt;P&gt;SourceForge includes a lot of components, from the scripts that run behind\r\nthe scenes, to administrative pages for project leaders, to front-end material\r\nfor casual browsers. We have reached a stability point in most of the backend\r\ncode that we would like to start receiving input from developers on SourceForge.\r\n&lt;P&gt;SourceForge is now a very functional site/system, and in fact many developers\r\nare now working on projects from within the SourceForge framework. We now need\r\nyour help to mold SourceForge into a tool that will truly benefit\r\nOpen Source developers.\r\n&lt;P&gt;We will call ourselves a full release when we think the site is worthy of it.\r\nThe services are available now, however. The &quot;full release&quot; will be more of a\r\nsymbolic occasion than anything else.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whodev-main&quot;&gt; &lt;/A&gt;&lt;B&gt;Who develops SourceForge?&lt;/B&gt;\r\n&lt;P&gt;The &lt;A href=&quot;http://sourceforge.net/staff.php&quot;&gt;SourceForge admin staff&lt;/A&gt;, Tony, Drew, Tim, and Uriah,\r\ndeveloped most of what you see on SourceForge now. We of course owe a lot of credit\r\nto the &lt;A href=&quot;http://sourceforge.net/docs/site/software.php&quot;&gt;software&lt;/A&gt; that made our work a lot easier,\r\nand to the &lt;A href=&quot;http://sourceforge.net/thanks.php&quot;&gt;people and organizations&lt;/A&gt; that donated time\r\nand hardware to make SourceForge possible. \r\n&lt;P&gt;SourceForge started out as a small idea that just refused to stop growing. \r\nMany people have been incredibly helpful along the way. We would like to thank\r\nthe entire open source community for the support that they are known for.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whodev-why&quot;&gt; &lt;/A&gt;&lt;B&gt;Why did you create SourceForge?&lt;/B&gt;\r\n&lt;P&gt;Strangely, a system this big wasn\'t our original intention. We really had no idea\r\nthat there would be such a reception for this kind of innovation in hosting\r\nopen source software.\r\n&lt;P&gt;As open source developers ourselves, we have run into the kinds of obstacles\r\nthat still plague many would-be developers. It was our intent to remove many\r\nof those obstacles and let developers focus on software development.\r\n(An odd concept, but easier to get used to than you\'d think.) \r\n&lt;P&gt;A suite of tools isn\'t enough, though. In the end, you need the hardware\r\npower for the whole setup, which might lead to your next question:\r\n\r\n&lt;P&gt;&lt;A name=&quot;whodev-pays&quot;&gt; &lt;/A&gt;&lt;B&gt;Who pays for SourceForge?&lt;/B&gt;\r\n&lt;P&gt;&lt;A href=&quot;http://valinux.com&quot;&gt;VA Linux Systems&lt;/A&gt; has supported this project\r\nfrom the beginning. Some of us were employed by VA before the conception\r\nof SourceForge (although none had ever worked in the same department), others\r\nwere hired specifically for this project.\r\n&lt;P&gt;The &lt;A href=&quot;hardware.php&quot;&gt;hardware behind this site&lt;/A&gt; is truly\r\nimpressive, and has proven to us VA\'s dedication to this project and to Open Source\r\ndevelopment.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whodev-mot&quot;&gt; &lt;/A&gt;&lt;B&gt;What is the motivation to pay for something like this?&lt;/B&gt;\r\n&lt;P&gt;Stop looking for ulterior motives or fantasies about world domination.\r\nThere are some good business reasons why a Linux company would\r\nbenefit from a site such as this.\r\n&lt;P&gt;VA Linux Systems thrives upon the success of Open Source software in\r\ngeneral. They sell Linux systems, installed with a myriad of Open Source\r\ntools and applications, to clients that require enterprise-ready\r\ncomponents and software. They also sell support for these systems.\r\nIf the selection and quality of Open Source\r\nsoftware improves, VA can offer its customers more competitive solutions.\r\n&lt;P&gt;On a more personal note, VA is not a behemoth with no sense\r\nof the community which made it grow. I joined VA because they would allow\r\nme to continue to spend significant amounts of my time in Open Source development.\r\nThey have never taken that freedom from me, and in fact have encouraged\r\nemployees to take part in community endeavors. This site is the real \r\nthing. -drew\r\n\r\n&lt;P&gt;&lt;A name=&quot;whodev-catch&quot;&gt; &lt;/A&gt;&lt;B&gt;This seems like an awful lot of free stuff. What\'s the catch?&lt;/B&gt;\r\n&lt;P&gt;There\'s no catch.\r\n&lt;P&gt;I\'m an Open Source developer. I work on a project to aid other Open Source developers.\r\nSo do many other developers. An Open Source friendly company pays for it, and we thank them a lot.\r\n&lt;P&gt;Do you always ask this many questions?\r\n\r\n&lt;P&gt;&lt;A name=&quot;whodev-help&quot;&gt; &lt;/A&gt;&lt;B&gt;That\'s cool! I\'d really like to help. Can I?&lt;/B&gt;\r\n&lt;P&gt;Of course.\r\n&lt;P&gt;We\'re working on a lot of ways that we can utilize the help of the\r\nrest of the community.\r\n&lt;P&gt;As soon as we can clean up some of this code and package it in some recognizable\r\nformat, we\'ll be releasing many of the SourceForge web-based tools as\r\nOpen Source projects in SourceForge. (That still confuses me, but\r\nsomehow the logic works.) This means that we can take on developers on \r\nthese projects, and as the tools improve, the new versions will automatically\r\nbe available to other SourceForge project developers.\r\n&lt;P&gt;There will also be a place for other users of SourceForge to help.\r\nWe expect to eventually have some sort of news system that will require maintenance,\r\nwe could definitely use help answering emails, and we could always\r\nuse help with site design. (Don\'t laugh. We\'re software developers, not artists.)\r\n&lt;P&gt;Everyone can help by answering the site surveys that we will\r\noccasionally post. Answers to these questions will directly influence\r\nthe direction of our development.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whohost-main&quot;&gt; &lt;/A&gt;&lt;B&gt;Who can host with SourceForge?&lt;/B&gt;\r\n&lt;P&gt;We\'re trying to keep it simple, and chose to rely on the work of a\r\nvery talented group, the &lt;A href=&quot;http://www.opensource.org&quot;&gt;Open Source Initiative&lt;/A&gt;.\r\nIf your software utilizes one of the OSI\'s \r\n&lt;A href=&quot;http://www.opensource.org/licenses/&quot;&gt;approved licenses&lt;/A&gt;, we\'d\r\nlove to offer you hosting at SourceForge. Software that falls under\r\nother licenses will require further scrutiny, but is not altogether ruled out.\r\nIn the end, we\'re looking to further Open Source software development,\r\nand will approve projects accordingly.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whohost-web&quot;&gt; &lt;/A&gt;&lt;B&gt;What if I don\'t have software, but wanted you to host my web site?&lt;/B&gt;\r\n&lt;P&gt;If you\'re site is oriented towards the Open Source community, we\'d\r\nprobably be happy to offer you hosting. Please be careful with this one, though.\r\nWe\'re not here to host personal homepages, or your Southpark picture\r\narchive (despite how much we all love Southpark). There are plenty of\r\nfree site hosting services for these sites. Our goal is the advancement\r\nof Open Source, and if your web site does that, we\'d love to have you.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whohost-rest&quot;&gt; &lt;/A&gt;&lt;B&gt;Are there any restrictions on the types of software I can host here?&lt;/B&gt;\r\n&lt;P&gt;For legal reasons, we can\'t host strong-encryption products with code\r\nthat originated outside of the US. We\'re working on a system to allow the hosting\r\nUS-originated strong-encryption, with restricted access to downloads.\r\n&lt;P&gt;We are also not set up with the right age-checking mechanisms to host\r\nmaterial/software of a pornographic nature. (As nice as a local connection\r\nto your porn archive might be to us, we just can\'t do it.) There is a more complete definition\r\nof these restrictions in the terms of service agreement, presented \r\nduring project registration.\r\n&lt;P&gt;Cut us some slack on this one. We\'re trying to keep ourselves and the\r\ncompany that provided all of this hardware and bandwidth out of trouble.\r\nWe\'re not here to start a political discussion.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whohost-com&quot;&gt; &lt;/A&gt;&lt;B&gt;Can I host commercial software on SourceForge?&lt;/B&gt;\r\n&lt;P&gt;Maybe.\r\n&lt;P&gt;If your commercially developed software is Open Source, then yes.\r\n&lt;P&gt;If your commercially developed software is not yet Open Source, but will be later, then probably yes.\r\n&lt;P&gt;If your commercially developed software is not Open Source, but may help\r\nto advance other Open Source software, then maybe.\r\n&lt;P&gt;If you just like our tools so much that you want to use them, then\r\ngo ahead. We\'ll be releasing many of them as Open Source soon. If this\r\n\r\nprospect overwhelms you, then contact VA Linux Professional\r\nServices, they\'ll be glad to help you. (Shameless plug for\r\nour sponsors.)\r\n\r\n&lt;P&gt;&lt;A name=&quot;whohost-owns&quot;&gt; &lt;/A&gt;&lt;B&gt;Who owns the source code on SourceForge?&lt;/B&gt;\r\n&lt;P&gt;The individual authors hold the copyright on their own software. Because\r\nof the nature of Open Source licenses, we are allowed to give people access\r\nto that software; however, all license disputes and issues are the responsibilities\r\nof the individual authors.\r\n&lt;P&gt;There is often a misconception that Open Source software does not actually\r\nhave a license holder, because of its free nature. This is not the case, however,\r\nand software hosted on SourceForge is responsible for its own licensing.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whohost-stop&quot;&gt; &lt;/A&gt;&lt;B&gt;What if I host with SourceForge, then decide to stop?&lt;/B&gt;\r\n&lt;P&gt;We would of course like to solve any problems you were having before it came\r\nto this, but in the end, you are free to leave at anytime. After all, we\'re not\r\nthe copyright holders.\r\n&lt;P&gt;Because your software was/is Open Source, however, we will probably still\r\nhave the right to continue to make existing versions of your software available\r\nto the public. If we didn\'t, someone else probably would anyway.\r\n&lt;P&gt;We\'re happy people here. Can\'t we all just Open Source and be happy together?\r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-main&quot;&gt; &lt;/A&gt;&lt;B&gt;Why should I host my software with SourceForge?&lt;/B&gt;\r\n&lt;P&gt;...mumble...free...mumble...gift horse....\r\n&lt;P&gt;But seriously, we\'re not trying to force anything on anybody here. We would\r\nlove people to host with SourceForge because we are a superior hosting service.\r\nIn the spirit of Open Source, we want any popularity we gain to be merit-based.\r\n&lt;P&gt;As we grow, we will also be able to provide you with traffic to your project.\r\nThere is a lot of benefit to giving end-users a window into your development\r\nenvironment. There will be more peer review of your source, and potential developers\r\nwill be wandering by.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-secure&quot;&gt; &lt;/A&gt;&lt;B&gt;Is SourceForge secure?&lt;/B&gt;\r\n&lt;P&gt;Yes, we have taken extreme caution in the methods we use for SourceForge\r\nservices. No system is uncrackable, but we continuously monitor the software\r\nwe use for bugs and security holes, and audit our own software regularly.\r\n&lt;P&gt;Encryption is available and enforced on all parts of the SourceForge site\r\nexcept mailing lists. (These passwords should be different than your site\r\npasswords. We are in the process of modifying GNU Mailman to use our own \r\nsecure authentication system.)\r\n&lt;P&gt;We give SSH accounts rather than telnet, SCP rather than ftp, and\r\nCVS/SSH instead of pserver. Site logins are via SSL and site passwords\r\nare never stored nor communicated in plaintext. Because it is possible\r\nto change your site password by confirming your email address (via\r\na partial MD5 hash sent to your registered address), we recommend that\r\nyou also keep your own mail account secure.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-backup&quot;&gt; &lt;/A&gt;&lt;B&gt;What is your backup strategy?&lt;/B&gt;\r\n&lt;P&gt;We perform a full backup of all site and project data daily, and rotate\r\nbackups off-site weekly through a large company that specializes in\r\nstoring backup tapes. \r\nWe also have access to a fireproof safe for storage of\r\ndaily tapes.\r\n&lt;P&gt;The exception to this rotation is the mega-file-server, which cannot be fully\r\nbacked up (when full) by less than 34 25GB AIT tapes (our medium of\r\nchoice). It gets a full backup once per month and incrementals otherwise. \r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-all&quot;&gt; &lt;/A&gt;&lt;B&gt;Do I have to use all of your services? \r\nCan I just use mailing lists, or bug tracking?&lt;/B&gt;\r\n&lt;P&gt;You can use whatever you want. If you don\'t need all of the services now,\r\ndon\'t use them. They are there when you need them.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-root&quot;&gt; &lt;/A&gt;&lt;B&gt;Won\'t I lose a lot of control if I don\'t have root access?&lt;/B&gt;\r\n&lt;P&gt;Yes and no.\r\n&lt;P&gt;The tradeoff is the security and stability of a professionally managed server.\r\n&lt;P&gt;Once initial setup is through, there really isn\'t much need for root\r\naccess except for security and maintenance upgrades, which we are taking\r\ncare of. We would like to implement all other functions for which you would\r\nnormally require root access via a web interface.\r\n&lt;P&gt;Obviously we can\'t give root access to everyone, or your own security\r\nis at the disposal of any other project admin. We\'re trying to find a happy\r\nmedium. In general we\'ll try to give as much access as we can without damaging\r\nthe security of other projects within SourceForge.\r\n&lt;P&gt;In the end, we\'re here to serve you. VA Linux Systems now pays our salary to\r\noffer you these services. We\'re a pretty responsive bunch. We\'d like to work\r\nthrough any issues you have, just let us know what we need to do. We hope\r\nthat you\'ll find our web administration tools powerful and easy to use. We\'re \r\nconstantly continuing to develop and improve these tools.\r\nIf there is some feature we can add that you think we\'ve forgotten, \r\nplease let us know.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-cvs&quot;&gt; &lt;/A&gt;&lt;B&gt;I already have a cvs tree. Can you import it?&lt;/B&gt;\r\n&lt;P&gt;Yes. Register a new project normally and let us know you need to import a\r\nCVS tree. We\'ll need a tar/gzip of your entire document root, including CVSROOT\r\ndirectory. This will preserve your revision history.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whyhost-files&quot;&gt; &lt;/A&gt;&lt;B&gt;I have a lot of file releases already. \r\nCan I make them available on the main file server?&lt;/B&gt;\r\n&lt;P&gt;Yes, when releasing new files via the project admin interface, there\r\nis an option to set the release date of each file. You may back-populate\r\nyour release history in this manner. That way all previous revisions of your\r\nsoftware are available on the main file server.\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-main&quot;&gt; &lt;/A&gt;&lt;B&gt;So how big is all this, really?&lt;/B&gt;\r\n&lt;P&gt;We are all of course biased, but it is this writer\'s opinion that this is one\r\nof the best opportunities for Open Source developers in history.\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-fad&quot;&gt; &lt;/A&gt;&lt;B&gt;Isn\'t Open Source a fad? Can it really work?&lt;/B&gt;\r\n&lt;P&gt;Ack! \r\n&lt;P&gt;This site\'s developers and the company behind it believe deeply in the concepts\r\nof Open Source software.\r\n&lt;P&gt;Open Source is not a fad. Open Source can and does work. This site is proof of\r\nthat. We would not have been able to offer many of our functions without modifications\r\nto many programs we use. Their open source let us make these modifications (which\r\nwere sent back to the original authors for inclusion in the next versions of their\r\nsoftware).\r\n&lt;P&gt;&lt;RANT&gt;I can\'t believe that after BIND, Apache, Samba, PERL, Linux, and the\r\nGNU toolset, you can still ask that question.&lt;/RANT&gt;\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-cap&quot;&gt; &lt;/A&gt;&lt;B&gt;How much capacity does SourceForge have right now?&lt;/B&gt;\r\n&lt;P&gt;A quick look at our &lt;A href=&quot;hardware.php&quot;&gt;hardware list&lt;/A&gt; will partially\r\nanswer that question.\r\n&lt;P&gt;We\'ve performed many real-world benchmarks of the various parts of our systems.\r\nWe are capable of handling many projects now, and will scale our systems\r\nto meet demand. Nobody likes a slow server, especially us.\r\n&lt;P&gt;If you want some quick stats on our current systems, here you go:\r\n&lt;UL&gt;\r\n&lt;LI&gt;At 100% usage, our main web servers can handle approximately 8.6 million PHP pageviews\r\ndaily. (Including all of the site authentication necessary for each view.)\r\n&lt;LI&gt;The project web server can handle about 12 million pageviews daily with simple PHP\r\npages, and some unknown (think large numbers) millions of static pages.\r\n&lt;LI&gt;We can\'t properly benchmark our main file server, because we keep saturating its\r\ncurrent 100Mbit connection. We\'ve managed to get 93.8Mbit with 5000 concurrent HTTP\r\nconnections with it though (using only one of its four processors). If we start\r\napproaching our facility bandwidth (a couple of DS-3\'s and a T-1 right now), then we\'ll start\r\nlooking at gigabit and more digital drops. (Don\'t tell the CFO.)\r\n&lt;LI&gt;The 1.3 terabytes of storage in the room gets very loud.\r\n&lt;LI&gt;We blew many circuit-breakers when we were building this thing. Dedicated\r\n220V/30A power circuits solved this problem.\r\n&lt;LI&gt;Our UPS weighs about as much as our entire team.\r\n&lt;LI&gt;VA systems rock. (Another shameless sponsor plug)\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-scale&quot;&gt; &lt;/A&gt;&lt;B&gt;Wow. That\'s a lot. Can it scale?&lt;/B&gt;\r\n&lt;P&gt;Yes, and don\'t threaten us or we\'ll do it.\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-mirror&quot;&gt; &lt;/A&gt;&lt;B&gt;Are you going to mirror SourceForge? (and can I pay for it?)&lt;/B&gt;\r\n&lt;P&gt;We will probably be mirroring the main file server sometime in the near\r\nfuture. The real problem is the databases behind the main website and synchronization\r\nof all the other servers in real-time.\r\n&lt;P&gt;For now, we\'re content to have good backups, and spare hardware to put\r\nin place if something should fail. \r\n&lt;P&gt;We do take reliability seriously, and a non-west-coast mirror does seem like\r\na good idea. In lieu of a realtime mirror, we\'re considering setting up a \r\nfailover mirror that would lag a few minutes behind the live site.\r\nWe\'re pursuing our options here and will keep you posted.\r\n&lt;P&gt;As for the second question... VA\'s CFO says, yes, you may pay for it.\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-ready&quot;&gt; &lt;/A&gt;&lt;B&gt;I thought Linux wasn\'t ready for the \r\nenterprise. What was your setup experience like?&lt;/B&gt;\r\n&lt;P&gt;We\'re working on a paper detailing our experience setting up this system.\r\nWe expect to publish it soon.\r\n&lt;P&gt;For those of you that can\'t wait, it can be summarized, &quot;Yay Open Source.&quot;\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-wait&quot;&gt; &lt;/A&gt;&lt;B&gt;What improvements in Linux/Open Source software are you still waiting for? &lt;/B&gt;\r\n&lt;P&gt;We\'re especially anxious to see shared disk arrays over fibre channel,\r\na journalled file system (although we\'re looking at promising ones now),\r\n32-bit UIDs (should be fixed with the new file system),\r\nbetter scheduling (apparent in the development Linux kernels),\r\nand support for my Philips PC Camera.\r\n\r\n&lt;P&gt;&lt;A name=&quot;big-future&quot;&gt; &lt;/A&gt;&lt;B&gt;What is the future of SourceForge?&lt;/B&gt;\r\n&lt;P&gt;It is looking good, my friend.\r\n&lt;P&gt;VA is committed, we\'re committed, and we\'ve already got ideas that will\r\ncontinue to drive us for months.\r\n&lt;P&gt;The rest is up to you. Help us to help you, and we can all help to advance\r\nOpen Source to new heights.\r\n\r\n&lt;P&gt;&lt;A name=&quot;whowrote&quot;&gt; &lt;/A&gt;&lt;B&gt;Who wrote this FAQ? Are you available?&lt;/B&gt;\r\n&lt;P&gt;This FAQ was written by &lt;A href=&quot;mailto:dtype at valinux.com&quot;&gt;Drew Streib&lt;/A&gt; (dtype),\r\nalthough I\'m sure it will be modified by many people in the future, especially\r\nafter they see what I\'ve written.\r\n&lt;P&gt;Yes.',968792394,968792324,1458,793,'FAQ');
+INSERT INTO doc_data VALUES (757,1,'VA Linux Affiliate Underground','&lt;h1&gt;VA LINUX AFFILIATE UNDERGROUND &lt;/h1&gt;&lt;P&gt;VA Linux has rolled out a VA Linux/Community banner program. By displaying VA Linux and Open Source\r\nproject banners on your content pages (hosted on SourceForge or anywhere else), you can earn points redeemable for Debian T-shirts, Geek,\r\nGnome and Tux hats, a Tux Polo shirt, Quake III for Linux...and the much sought after VA Linux and Themes.org T-shirts. (It\'s not that hard, you get a\r\npoint per banner impression, and prizes start at 5000 points.) You can read more and sign up at: http://www.valinux.com/about/affiliates/affiliate.html ',968792399,968792373,1458,793,'Earn swag by displaying VA and Open Source banners');
+INSERT INTO doc_data VALUES (782,1,'Local installation guide',' &lt;B&gt;Local installation guide&lt;/b&gt;\r\n\r\n &lt;p&gt;This is an installation guide for the SourceForge software as found\r\non &lt;a href=http://sourceforge.net/project/?group_id=1&gt;SourceForge&lt;/a&gt;.\r\nThis is not yet complete but allows to experiment everything not involving\r\nDNS, CVS, cvsweb, ftp.\r\n\r\n&lt;pre&gt;\r\n-------------------------------------------------------------------------------\r\nCreating the MySQL database (assuming MySQL version &gt;= 3.22.25)\r\n\r\n1) Install MySQL from http://www.mysql.com/\r\n\r\n2) Choose a database name (let\'s say \'sourceforge\' for the rest of\r\n   this document).\r\n\r\n   mysql -e &quot;create database sourceforge&quot;\r\n\r\n3) Create the tables.\r\n\r\n   mysql sourceforge &lt; db/SourceForge.sql \r\n\r\n   This script also populates the following tables\r\n\r\n   bug_resolution\r\n   bug_status\r\n   patch_category\r\n   patch_status\r\n   project_status\r\n   survey_question_types\r\n   user\r\n\r\n-------------------------------------------------------------------------------\r\nConfiguring Apache with SSL (assuming Apache version &gt;= 1.3.9 \r\n                                      openssl version &gt;= 0.9.4\r\n                                      mod_ssl version &gt;= 2.4.10-1.3.9)\r\n\r\nThe best starting point is http://www.modssl.org/. There is very\r\nlittle chance that your installed Apache server contains SSL, you\'ll\r\nhave to recompile and reinstall. I highly recommend to install Apache\r\nit in a non-standard place. It won\'t interfere with your working\r\nApache, if any. And, more important, the installation process will \r\ninstall sample configuration files instead of keeping them in the\r\nsource directory because you already have some installed. \r\n\r\n1) Install openssl\r\n\r\n2) Configure mod_ssl\r\n\r\n3) Install Apache\r\n\r\n-------------------------------------------------------------------------------\r\nConfiguring Apache with PHP (assuming Apache version &gt;= 1.3.9 and \r\n                                      php3 version &gt;=  3.0.12) \r\n\r\n1) Create a file in the Apache document root named phpinfo.php\r\n\r\n   echo \'&lt;? phpinfo(); ?&gt;\' &gt; .../phpinfo.php \r\n\r\n   Try to load it with your browser using http://localhost/phpinfo.php. \r\n   If it shows an HTML page you already have php3 installed.\r\n   If the page shown contains the word MySQL you have php3 compiled\r\n   with MySQL support. \r\n   If you see the page and find MySQL in it, you\'re finished with this\r\n   chapter. Otherwise proceed to the following steps.\r\n\r\n2) Make sure php3 is compiled in.\r\n   Try to access http://localhost/server-info and search for php3. If\r\n   it\'s found somewhere in the page, the php3 module is available. \r\n   If http://localhost/server-info does not work add the following lines to \r\n   the access.conf file:\r\n\r\n   #\r\n   # Allow remote server configuration reports, with the URL of\r\n   #  http://servername/server-info (requires that mod_info.c be loaded).\r\n   # Change the &quot;.your_domain.com&quot; to match your domain to enable.\r\n   #\r\n   &lt;Location /server-info&gt;\r\n       SetHandler server-info\r\n       Order deny,allow\r\n       Deny from all\r\n       Allow from localhost\r\n   &lt;/Location&gt;\r\n\r\n   If you did not find php3 you\'ll have to recompile it yourself. See\r\n   http://www.php.net/ and remember that you must re-compile php3 with\r\n   MySQL support.\r\n\r\n3) Activate php3.\r\n\r\n   In order to activate php3 the following lines must be found in the\r\n   httpd.conf file:\r\n\r\n   LoadModule php3_module        modules/libphp3.so\r\n   AddModule mod_php3.c\r\n\r\n4) Enable index.php as a directory index in srm.conf. \r\n\r\n   DirectoryIndex index.html index.shtml index.cgi index.php\r\n\r\n5) Add .php extension to srm.conf.\r\n\r\n   AddType application/x-httpd-php3 .php3 .php .phtml \r\n   AddType application/x-httpd-php3-source .phps \r\n\r\n6) Try loading http://localhost/phpinfo.php again.\r\n\r\n-------------------------------------------------------------------------------\r\nConfiguring php3 and Apache for SourceForge\r\n\r\n1) Change the DocumentRoot\r\n\r\n   Since some scripts assume that the document root starts at the\r\n   www directory, just say that the document root is this directory.\r\n\r\n   In srm.conf\r\n\r\n   DocumentRoot /home/loic/local/ports/SourceForge/www\r\n\r\n   In access.conf substitute/clone the &lt;Directory&gt; block for the\r\n   new document root.\r\n\r\n2) Type the URL http://localhost/ in your navigator.\r\n\r\n   You should see an error message like this:\r\n\r\n   Fatal error: Failed opening required \'pre.php\' in /home/httpd/html/sf/index.php on line 9\r\n   meaning that Apache is properly configured as far as php is concerned.\r\n\r\n3) Specify the include path.\r\n\r\n   You must tell php where the include files are. Add the full path to\r\n   ../SourceForge/www/include to the include_path variable of the\r\n   php.ini file. Something like\r\n\r\n   include_path = /home/php:/home/loic/local/ports/SourceForge/www/include\r\n\r\n   Alternatively you can add the following lines in httpd.conf:\r\n\r\n   &lt;Directory /&gt; \r\n   php3_include_path /usr/local/htdocs/alexandria/www/include:. \r\n   &lt;/Directory&gt;\r\n\r\n4) Include magic in php.ini.\r\n\r\n   magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data \r\n   magic_quotes_runtime = Off ; magic quotes for runtime-generated data, e.g. data from SQL, \r\n   track_vars = On ; enable $HTTP_GET_VARS[], $HTTP_POST_VARS[] and $HTTP_COOKIE_VARS[] arrays \r\n\r\n5) Restart httpd\r\n\r\n6) Type the URL http://localhost/ in your navigator. Two things\r\n    may happen at that point:\r\n\r\n    a) You\'re redirected to http://sourceforge.net/ since that\'s what the library does\r\n       when you\'re not using localhost in the URL.\r\n\r\n    b) You see an error message like this:\r\n\r\n       Fatal error: Failed opening required \'/etc/local.inc\' in database.php on line 11\r\n\r\n    In either cases it means that the pre.php file was found and that the include\r\n    path is correct. \r\n\r\n-------------------------------------------------------------------------------\r\nConfiguring SourceForge\r\n\r\n1) Copy the SourceForge/etc/local.inc sample to /etc/local.inc. Edit\r\n   it to fit your system parameters. Variables should have self explanatory\r\n   names or comments to make it clearer.\r\n\r\n2) Look at the home page http://localhost/\r\n   It should display well.\r\n\r\n3) Create a user named admin\r\n\r\n   This user will automatically be assigned server wide administration permissions.\r\n\r\n\r\n&lt;/pre&gt;\r\n',968796599,968794910,1458,794,'How to setup SourceForge on your own box');
+INSERT INTO doc_data VALUES (783,1,'Local administrator\'s guide','&lt;b&gt;Local administrator\'s guide&lt;/b&gt;\r\n &lt;p&gt;This is an administrator guide to the SourceForge software as found\r\non &lt;a href=http://sourceforge.net/project/?group_id=1&gt;SourceForge&lt;/a&gt;.\r\nIt gives hints to successfully create a SourceForge service on a machine.\r\nIt assumes that you\'ve successfully installed the software as described\r\nin SourceForge-1.0.4 Installation Guide\r\n\r\n&lt;P&gt;&lt;B&gt;Prepare the testing environment&lt;/B&gt;&lt;P&gt;\r\n\r\nBefore doing anything run the &lt;a href=sffakeenv.txt&gt;Fake env. SQL script&lt;/a&gt;.\r\nIt will create a user &lt;b&gt;admin&lt;/b&gt; with password &lt;b&gt;admin1&lt;/b&gt; and \r\na project &lt;b&gt;test1&lt;/b&gt; owned by him. It will also minimaly populate\r\nthe &lt;b&gt;test1&lt;/b&gt; patch/bug/task list. If you want to do all this manually\r\nread the following chapters.\r\n\r\n&lt;P&gt;&lt;B&gt;Create the admin user&lt;/B&gt;&lt;P&gt;\r\n\r\n&lt;I&gt;This is not needed if you run the &lt;a href=sffakeenv.txt&gt;Fake env. SQL script&lt;/a&gt;.&lt;/I&gt;&lt;P&gt;\r\n\r\nSome users are granted site wide administration permissions based on their\r\nuser id. \r\nYou can create a user named &lt;b&gt;admin&lt;/b&gt; using the menus and afterwards set\r\nit\'s user id to &lt;b&gt;2&lt;/b&gt;. \r\n\r\n&lt;pre&gt;\r\nmysql -e &quot;update user set user_id = 2 where user_name = \'admin\'&quot; sourceforge\r\n&lt;/pre&gt;\r\n\r\nWhen you log in check that a &lt;b&gt;Site Administrator&lt;/b&gt; menu shows on the \r\npage.\r\n\r\n&lt;P&gt;&lt;B&gt;Create categories&lt;/B&gt;&lt;P&gt;\r\n&lt;I&gt;This is not needed if you run the &lt;a href=sffakeenv.txt&gt;Fake env. SQL script&lt;/a&gt;.&lt;/I&gt;&lt;P&gt;\r\n\r\nUnless some categories exist in the software map you won\'t be able to create\r\na new project. Create one or two categories using the &lt;b&gt;Site Administrator&lt;/b&gt; menu.\r\n\r\n&lt;P&gt;&lt;B&gt;Create a test project&lt;/B&gt;&lt;P&gt;\r\n&lt;I&gt;This is not needed if you run the &lt;a href=sffakeenv.txt&gt;Fake env. SQL script&lt;/a&gt;.&lt;/I&gt;&lt;P&gt;\r\n\r\nApply for a new project (test1 for instance), using the &lt;b&gt;Register\r\nNew Project&lt;/b&gt; link.  Once done, go to the &lt;b&gt;Site Admin&lt;/b&gt; link on\r\nthe home page and approve the project using the links that display &lt;b&gt;groups&lt;/b&gt;.\r\nA project is called a &lt;b&gt;group&lt;/b&gt; in the database. When displaying the \r\ndescription of the project, use the &lt;b&gt;Status&lt;/b&gt; popup menu and move the\r\nproject status from &lt;b&gt;Pending&lt;/b&gt; to &lt;b&gt;Active&lt;/b&gt;. Click on &lt;b&gt;Update&lt;/b&gt;.\r\n\r\n&lt;P&gt;&lt;B&gt;Default IDs&lt;/B&gt;&lt;P&gt;\r\n\r\nid=100 is used throughout the site as a default. user_id=100 is for a\r\nuser named &quot;none&quot;, which is referenced a lot. bug_group_id=100 is a\r\ndefault adefault as well. There are instances throughout the patch\r\nmanager, surveys, bugs, and task manager where this is used, as an\r\nFYI. Also bug_status, patch_status, project_status are tables (maybe\r\nmore), that we need to include default data for.',968796609,968794955,1458,794,'How to administer your local installation');
+INSERT INTO doc_data VALUES (794,1,'Additional contributor guidelines',' &lt;p&gt; &lt;p&gt;This is an contributor guide to the SourceForge software as found\r\non &lt;a href=http://sourceforge.net/project/?group_id=1&gt;SourceForge&lt;/a&gt;.\r\nIt explains how contributors should behave in order to see their \r\npatches accepted by the administrators of the project.\r\nIt assumes that you\'ve successfully installed the software as described\r\nin &lt;a href=sfinstall.php&gt;SourceForge-1.0.4 Installation Guide&lt;/a&gt; and\r\nthat you\'re running your own instance as explained in &lt;a href=sfusage.php&gt;SourceForge-1.0.4 Administrator Guide&lt;/a&gt;\r\n\r\n&lt;P&gt;\r\nYou must understand that integration of any kind of modification to the\r\ncode is subject to carefull reviewing by the SourceForge team. They will\r\nultimately be responsible for bugs or security problems, not you. At\r\npresent patches are processed using the patch manager and it is expected\r\nthat &lt;b&gt;very&lt;/b&gt; few people will have write access to the CVS repository.\r\n\r\n&lt;P&gt;\r\nAt present no software roadmap exists and no regression tests are implemented\r\nand therefore the following rules cannot apply fully. Hopefully a contributor\r\nwill make these two happen.\r\n\r\n&lt;P&gt;&lt;B&gt;Etiquette&lt;/B&gt;&lt;P&gt;\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Whatever your coding style is, mimic exactly the existing\r\n     style. Period. Here are some hints:\r\n     &lt;UL&gt;\r\n     &lt;LI&gt; Use tabulations instead of white space for indentation.\r\n     &lt;LI&gt; Tabulations are 4 spaces wide.\r\n     &lt;LI&gt; Indentation style is\r\n&lt;pre&gt;\r\nif (...) {\r\n    ...\r\n} else if (...) {\r\n} else {\r\n    ...\r\n}\r\n&lt;/pre&gt;\r\n          note the space after the if.\r\n          When an if expression is too long wrap to the next line when the\r\n          line is full. Do not wrap to next line for every boolean expression.\r\n          Not good:\r\n&lt;pre&gt;\r\nif (condition ||\r\n    condition ||\r\n    condition) \r\n&lt;/pre&gt;\r\n          Good:\r\n&lt;pre&gt;\r\nif (condition || condition ||\r\n    condition\r\n&lt;/pre&gt;\r\n     &lt;LI&gt; Array literals style is\r\n&lt;pre&gt;\r\narray(\'name\'=&gt;\'value\',\'name\'=&gt;\'value\')\r\n&lt;/pre&gt;\r\n          note that there are &lt;b&gt;no&lt;/b&gt; spaces.\r\n     &lt;LI&gt; Function arguments and definition style is\r\n&lt;pre&gt;\r\nfunction($arg, $arg, $arg)\r\n&lt;/pre&gt;\r\n          note the space after the comma.\r\n     &lt;LI&gt; Comments are either marked with /* */ or //, never with #\r\n     &lt;LI&gt; Comments are above the commented code and must &lt;b&gt;not&lt;/b&gt; \r\n          rephrase the code. Do not comment at all if just rephrasing.\r\n     &lt;LI&gt; Function definitions use a prefix to desambiguate the name\r\n          and are lower case words separated by underscore. Function names\r\n          may be long but must be explicit. For instance:\r\n&lt;pre&gt;\r\nfunction group_getname($group_id = 0) {\r\n&lt;/pre&gt;\r\n     &lt;/UL&gt;\r\n&lt;LI&gt; Fully review the code roadmap before modifying anything.\r\n     If you discover things that are not in the roadmap, contribute to\r\n     the roadmap document with updates or additions.\r\n&lt;LI&gt; Search carefully the forums and mailing list archives for discussions\r\n     related to the contribution/bugfix you\'re willing to make.\r\n&lt;LI&gt; Read all the code in www/include at least once and understand its\r\n     purpose. This is the library and you don\'t want to re-implement anything\r\n     it contains.\r\n&lt;LI&gt; Always update the ChangeLog file and be very precise.\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;New functionalities&lt;/B&gt;&lt;P&gt;\r\n\r\nSo, you\'re absolutely sure the functionality is not already implemented, \r\nthat it\'s not a task in progress. You should now convince at least one\r\nperson in the developper community that it\'s worth doing.\r\n&lt;P&gt;\r\nDescribe what you\'re planning to do in the forum.\r\nPrecisely describe algorithms, functionalities. Wait for approval from \r\nanother developper. In the meantime you can implement what you have in \r\nmind.\r\n&lt;P&gt;\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Add the task in the task list and update daily.\r\n&lt;LI&gt; Implement the functionality.\r\n&lt;LI&gt; Write a non-regression test for it.\r\n&lt;LI&gt; Run the non-regression tests for all the software until it says ok.\r\n&lt;LI&gt; Update the SourceForge documentation and roadmap to describe the new functionality.\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Bug Fixing&lt;/B&gt;&lt;P&gt;\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Assign the bug to yourself in the bug list. Never work on a bug\r\n   assigned to someone else, unless you\'re talking to the other\r\n   developper.\r\n&lt;LI&gt; Write a non-regression test for it. Should it pop again, the test\r\n   must detect it.\r\n&lt;LI&gt; Fix the problem.\r\n&lt;LI&gt; Run the non-regression tests for all the software until it says ok.\r\n&lt;/UL&gt;\r\n',968796616,968796441,1458,794,'     ');
+INSERT INTO doc_data VALUES (759,1,'Your SourceForge Email Address','&lt;b&gt;Your SourceForge email address &lt;/b&gt;&lt;P&gt;\r\n\r\nWith the activation of your user account, you were given an email address at loginname at users.sourceforge.net. \r\n&lt;P&gt;\r\nThroughout the site, when your email address is displayed, the SourceForge address is given rather than the email address under which you\r\nregistered. Changing your personal email address under &quot;Account Maintenance&quot; will change where this mail forwards. \r\n&lt;P&gt;\r\nThis keeps your own email private, but allows easy access to all site users through their SourceForge addresses. We also filter blacklisted spammers\r\nfrom sending mail to this address. \r\n&lt;P&gt;\r\nYou may also use your SourceForge email address outside of the site. Mail will forward as you would expect it to. Your username will never change,\r\nso this email address is yours to keep. ',968796657,968792565,1458,801,'yourname at users.sourceforge.net forwards email');
+INSERT INTO doc_data VALUES (760,1,'HELP! I\'ve lost my password!','&lt;b&gt;If you lose your password... &lt;/b&gt;\r\n&lt;P&gt;\r\nIf you lose your password simply visit the login page and click &quot;Lost Your Password?&quot;. A confirmation hash will be emailed to the address we have on\r\nfile for you. Load the URL in the email to reset your password. ',968796664,968792628,1458,801,'You\'re not the first...');
+INSERT INTO doc_data VALUES (761,1,'SSH Keys and CVS/Shell Accounts','&lt;b&gt;SSH Keys and CVS/Shell Accounts &lt;/b&gt;&lt;P&gt;\r\n\r\nIf you wish to use your ssh keys with CVS/Shell accounts - this is no problem. For your shell account, simply copy your identity.pub file to\r\n&quot;~username/.ssh/authorized_keys&quot; on shell1. Also cut/paste it into the web based account manager to have it synced across to the CVS server. ',968796669,968792682,1458,801,'You don\'t have to re-type, we can store them');
+INSERT INTO doc_data VALUES (762,1,'How do I use the compile farm?','&lt;b&gt;Accessing the compile farm&lt;/b&gt;&lt;P&gt;\r\n\r\n\r\nIf you have a account on our shell server then you have an account on the compile farm as the same username and password. Please be sure to\r\nread the /etc/motd when you log in. It has information you\'re going to need. If you have any problems please submit another support request. The\r\nhostnames for the current compile farm machines are listed on the CompileFarm page, along with more detailed instructions. Please see:\r\nhttp://sourceforge.net/compilefarm/',968796695,968792789,1458,801,'Build your software across distributions (and BSD)');
+INSERT INTO doc_data VALUES (763,1,'CVS HOWTO','       &lt;p&gt; &lt;P&gt;This very basic right now, but it will get you up and running.\r\n&lt;P&gt;For all developer (read/write) access, you will be using SSH.\r\nSSH (1.x) client must be available to your local machine. The local\r\nenvironment variable CVS_RSH must also be set to the path to ssh.\r\nThis is done on most linux (bash) systems by typing:\r\n&lt;UL&gt;&lt;B&gt;&lt;I&gt;export CVS_RSH=ssh&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;Anonymous CVS access uses CVS pserver and does not require SSH.\r\n\r\n&lt;P&gt;If you get \'permission denied\' errors with no prompt for a password,\r\nyou do not have this environment variable set properly or SSH is not\r\navailable to your system. Fix this before suspecting a password problem.\r\n\r\n&lt;P&gt;&lt;B&gt;How to import source code into your repository&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;On your local machine, change to the directory whose files (and subdirectories) \r\nyou want to import. Everything now in the current directory\r\nand all subdirectories will be imported into the tree.\r\n&lt;LI&gt;Type the following, where loginname is your SourceForge login name,\r\nyourproject is the unix group name of your project, and\r\ndirectoryname is the name of the new CVS root level directory.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -dloginname at cvs.yourproject.sourceforge.net:/cvsroot/yourproject import directoryname vendor start&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;How to check out source via SSH&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Type the following, making necessary obvious substitutions for\r\nyour username and project.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -dloginname at cvs.yourproject.sourceforge.net:/cvsroot/yourproject co directoryname&lt;/I&gt;&lt;/B&gt;\r\n&lt;LI&gt;After initial checkout, you can change into this directory and execute\r\ncvs commands without the -d tag. For example:\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs update&lt;BR&gt;cvs commit -m &quot;comments for this commit&quot;&lt;BR&gt;cvs add myfile.c&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;How to check out source anonymously through pserver&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Type the following, making necessary obvious substitutions for\r\nyour username and project.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -d:pserver:anonymous at cvs.yourproject.sourceforge.net:/cvsroot/yourproject login&lt;/I&gt;&lt;/B&gt;\r\n&lt;LI&gt;After anonymously logging in:\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -d:pserver:anonymous at cvs.yourproject.sourceforge.net:/cvsroot/yourproject co directoryname&lt;/I&gt;&lt;/B&gt;\r\n&lt;LI&gt;After initial checkout, you can change into this directory and execute\r\ncvs commands without the -d tag. For example:\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs update&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;How to use cvs when logged on shell.sourceforge.net&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Type the following, making necessary obvious substitutions for username and project.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -dloginname at cvs1:/cvsroot/yourproject co directoryname&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n&lt;DD&gt;See &lt;a href=&quot;/docman/display_doc.php?docid=765&amp;group_id=1&quot; &gt;CVS/SSH FAQ&lt;/a&gt; for more information.\r\n\r\n&lt;P&gt;&lt;B&gt;How to import an existing CVS tree&lt;/B&gt;&lt;P&gt;\r\n\r\nThis must be done manually by the SourceForge staff. Proceed as follow:\r\n&lt;UL&gt;\r\n&lt;LI&gt; Prepare a tar/gzip of your entire CVS tree.\r\n&lt;LI&gt; Make sure you include the CVSROOT directory if it contains information\r\n     you want to keep. If you\'re not sure, include it.\r\n&lt;LI&gt; Submit a support request asking them to include the tar/gzip in the CVS repository of your project.\r\n     Make sure you provide the necessary information in your request:\r\n     &lt;UL&gt;\r\n     &lt;LI&gt; The exact name of the project or the URL of its home page.\r\n          Something like &lt;a href=http://sourceforge.net/project/?group_id=1695&gt;\r\n          http://sourceforge.net/project/?group_id=1695&lt;/a&gt;.\r\n     &lt;LI&gt; The ftp or http location of the tar/gzip file, or its location on shell1.\r\nDouble check with your navigator that the file is available.\r\n     &lt;LI&gt; Your SourceForge login name.\r\n     &lt;LI&gt; Your project\'s unixname\r\n     &lt;LI&gt; Your mail address.\r\n     &lt;/UL&gt;\r\n&lt;LI&gt; You will be mailed by the SourceForge staff when the CVS tree is\r\n     ready for use.\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;How to get your CVS tree back&lt;/B&gt;&lt;P&gt;\r\n\r\nDaily tarballs of entire project CVS Repositories are available\r\nfor backup or mirroring purposes. These are available at:\r\nhttp://cvs.sourceforge.net/cvstarballs/projectname-cvsroot.tar.gz.\r\nWhere &lt;b&gt;projectname&lt;/b&gt; is the Unix name of your project.\r\n\r\n&lt;P&gt;&lt;B&gt;Additional References&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;/docman/display_doc.php?docid=765&amp;group_id=1&quot;&gt;SourceForge CVS/SSH FAQ&lt;/A&gt;\r\n&lt;LI&gt;&lt;A href=&quot;http://cvsbook.red-bean.com/&quot;&gt;The CVS Book&lt;/A&gt;\r\n&lt;LI&gt;&lt;A href=&quot;http://www.loria.fr/~molli/cvs/doc/cvs_toc.html&quot;&gt;CVS Docs at www.loria.fr&lt;/A&gt;\r\n&lt;/UL&gt;\r\n',968880603,968792962,1458,802,'The basics of CVS');
+INSERT INTO doc_data VALUES (764,1,'Getting daily CVS snapshots','&lt;B&gt;Getting Daily Snapshots of a CVS Tree &lt;/b&gt;&lt;P&gt;\r\n\r\nDaily tarballs of entire project CVS Repositories are now available for backup or mirroring purposes. \r\n&lt;P&gt;\r\nThese tarballs are generated daily, and ar available at : &lt;B&gt;http://cvs.sourceforge.net/cvstarballs/projectname-cvsroot.tar.gz \r\n&lt;/b&gt;&lt;P&gt;\r\nwhere projectname is the UNIX name of the project you want to download. ',968797189,968793052,1458,802,'Backup your code');
+INSERT INTO doc_data VALUES (765,1,'CVS/SSH FAQ','&lt;B&gt;CVS/SSH Frequently Asked Questions (FAQ)&lt;/B&gt;\r\n&lt;P&gt;\r\nThis FAQ is intended to help using CVS with SSH without reading the\r\ncomplete CVS and SSH documentation.\r\n\r\n&lt;UL&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#ssh&quot;&gt;How does CVS/SSH work?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#ssh-firewall&quot;&gt;Why cvs hangs forever?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#ssh-key&quot;&gt;Am I forced to enter my password for every cvs command?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#ssh-pass&quot;&gt;I updated my CVS/SSH shared key but I\'m still asked for a passphrase?&lt;/A&gt;\r\n        &lt;LI&gt;&lt;A href=&quot;#ssh-shell&quot;&gt;CVS does not work on shell.sourceforge.net?&lt;/A&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;HR noshade&gt;\r\n\r\n&lt;P&gt;&lt;A name=&quot;ssh&quot;&gt; &lt;/A&gt;&lt;B&gt;How does CVS/SSH work?&lt;/B&gt;\r\n&lt;P&gt;SSH is the authentication mechanism used to allow authorized users to have\r\nread/write access to the CVS repository. The protocol used is ssh protocol version 1.\r\nYou must not try to use ssh protocol version 2. If you have both ssh1 and ssh2 installed\r\non your machine, the ssh1 commands are all suffixed with a 1. For instance use ssh1 instead\r\nof ssh or ssh-keygen1 instead of ssh-keygen.\r\n&lt;P&gt;\r\nCVS will use SSH for authentification if you set the environment variable CVS_RSH to ssh.\r\nCVS_RSH=ssh or CVS_RSH=ssh1.\r\n\r\n&lt;P&gt;&lt;A name=&quot;ssh-firewall&quot;&gt; &lt;/A&gt;&lt;B&gt;Why cvs hangs forever?&lt;/B&gt;\r\n&lt;P&gt;If you\'re behind a firewall you may need to instruct ssh not to use a privileged port.\r\nInsert the \r\n&lt;br&gt;&lt;b&gt;\r\nUsePrivilegedPort no\r\n&lt;/b&gt;&lt;br&gt;\r\nline in your ~/.ssh/config file. This is equivalent to\r\nspecifying the -P option on the command line. You need to do that since you can\'t simply\r\nset CVS_RSH=\'ssh -P\'.\r\n\r\n&lt;P&gt;&lt;A name=&quot;ssh-key&quot;&gt; &lt;/A&gt;&lt;B&gt;Am I forced to enter my password for every cvs command?&lt;/B&gt;\r\n&lt;P&gt;No, you can upload a shared key that will allow SSH sessions to be established without\r\nthe need to enter you password every time. Go to your &lt;b&gt;Account Maintainance page&lt;/b&gt;, click on\r\nthe &lt;b&gt;Edit Keys&lt;/b&gt; link and follow the instructions.\r\n\r\n&lt;P&gt;&lt;A name=&quot;ssh-pass&quot;&gt; &lt;/A&gt;&lt;B&gt;I updated my CVS/SSH shared key but\r\nI\'m still asked for a passphrase?&lt;/B&gt;\r\n&lt;P&gt;A passphrase is not a password. When you used ssh-keygen (or\r\nssh-keygen1) to produce your shared key, you were asked for a\r\npassphrase. There are two possibilities to avoid cvs passphrase\r\nprompts: you can use ssh-agent tool or you can generate key pair\r\nwithout passphrase.\r\n&lt;P&gt;To use ssh-agent edit your .xsession (or .xstart) script and change\r\nline where window manager is started into:\r\n\r\n&lt;P&gt;   ssh-agent $WM\r\n\r\n&lt;P&gt;where $WM is your window manager. Logout-login to activate the\r\nssh-agent.  Use ssh-add to add your key to the ssh-agent (you must\r\nenter the passphrase). As long as the ssh-agent runs you will not be\r\nprompted for the passphrase again. For more details see the man pages\r\nof ssh-agent and ssh-add.\r\n\r\n&lt;P&gt;To generate unprotected key pair just type return at the ssh-keygen\r\npassphrase prompt. The drawback of the unprotected key pair is that\r\neverybody who has your private key will have access to the cvs\r\nrepository.\r\n\r\n&lt;P&gt;&lt;A name=&quot;ssh-shell&quot;&gt; &lt;/A&gt;&lt;B&gt;CVS does not work on shell.sourceforge.net?&lt;/B&gt;\r\n&lt;P&gt;\r\nWhen you\'re logged on shell.sourceforge.net using ssh1, you should use the\r\n&lt;b&gt;cvs1&lt;/b&gt; hostname instead of the full host name. For instance:\r\n&lt;P&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt; &lt;b&gt;Not good:&lt;/b&gt; cvs -dprecision at cvs.phpsysinfo.sourceforge.net:/cvsroot/phpsysinfo -z3 co phpsysinfo\r\n&lt;LI&gt; &lt;b&gt;Good:&lt;/b&gt; cvs -dprecision at cvs1:/cvsroot/phpsysinfo -z3 co phpsysinfo\r\n&lt;/UL&gt;\r\nThis has to do with the fact that both the shell\r\nservers and the cvs servers are firewalled behind the same firewall. Since you\'re inside\r\nthe firewall when you\'re logged on shell.sourceforge.net, the rules do not apply in the same\r\nway.',968797172,968793085,1458,802,'Basics of using CVS with SSH');
+INSERT INTO doc_data VALUES (768,1,'Importing existing CVS trees','&lt;b&gt;Importing existing CVS trees &lt;/b&gt;&lt;P&gt;\r\n\r\nWe can import your existing CVS tree fairly easily. Just upload it using SCP/ssh to your project\'s home directory on the primary shell server.\r\nAlternatively, put it somewhere visible via anonymous ftp or http. \r\n&lt;P&gt;\r\nLet us know the details when you are done (in a &lt;a href=&quot;http://sourceforge.net/support/?func=addsupport&amp;group_id=1&quot;&gt;support request&lt;/a&gt;). That is, your unix name, the project\'s unix name and the file address. \r\n&lt;P&gt;\r\n(e.g. &quot;Please import the CVS tree for project hal2000. My login is aphzen, the project\'s unix name is hal2000, and the CVS tree can be found on\r\nshell1, in /home/groups/hal2000/hal2000-cvs.tar.gz&quot;) Also see the CVS HowTo &amp; FAQ. ',968797212,968793272,1458,802,'Bring your existing code to its new home');
+INSERT INTO doc_data VALUES (772,1,'Getting email from CVS','&lt;p&gt; &lt;b&gt;Getting email from CVS&lt;/b&gt;\r\n\r\n&lt;p&gt;\r\nIn any large project, keeping track of changes is difficult.  CVS does\r\na reasonable job of allowing source changes to be controlled and\r\nmanaged, but does not provide tools to make it easier to work with a\r\nchanging code base.  The hardest part of working on a dynamic project\r\nwith many changing modules is knowing when changes occur, and what\r\nthose changes are.\r\n\r\n&lt;p&gt;\r\nSoftware developers often are heavy email users, spending huge amounts\r\nof time working with their email software.  Open source developers are\r\namong the most serious email addicts out there, sorting through\r\nhundreds of emails a day, since this is often the only way to stay in\r\ntouch with users and fellow developers.\r\n\r\n&lt;p&gt;\r\n&lt;em&gt;Clearly, we need more email.&lt;/em&gt;\r\n\r\n\r\n&lt;h2&gt;Set up a mailing list&lt;/h2&gt;\r\n\r\n&lt;p&gt;\r\nIf you haven\'t already created a mailing list to handle messages sent\r\nby CVS, follow these instructions to do so.\r\n\r\n&lt;p&gt;\r\nTo get started, surf to your project\'s &quot;Project Page.&quot;  If the &quot;Public\r\nAreas&quot; section of the page doesn\'t list &quot;Mailing Lists,&quot; click over to\r\nthe &lt;b&gt;Project Admin&lt;/b&gt; page, the to the &lt;b&gt;Edit Public Info&lt;/b&gt;\r\npage.  Make sure the &quot;Use Mailing Lists:&quot; checkbox is on, and click\r\n&quot;Update.&quot;  Now go back to your &quot;Project Page.&quot;\r\n\r\n&lt;p&gt;\r\nGo to the &lt;b&gt;Mailing Lists&lt;/b&gt; page and click through to the\r\n&lt;b&gt;Admin&lt;/b&gt; page.  Select &lt;b&gt;Add Mailing List&lt;/b&gt; to get a really\r\neasy-to-use form that asks you only &lt;em&gt;two questions&lt;/em&gt;:\r\n\r\n&lt;ol&gt;\r\n&lt;li&gt;&lt;b&gt;What do you want to name your list?&lt;/b&gt;\r\n&lt;br&gt;\r\nSince all SourceForge list names start with the Unix name of your\r\nproject and a hyphen, you don\'t even have to worry about that part!\r\nYou just decide on the hard part: &quot;Do I call it\r\n&lt;em&gt;myproject-cvs&lt;/em&gt;, or &lt;em&gt;myproject-checkins&lt;/em&gt;?&quot;  You can\r\nchoose other names, but those are well-recognized by active open\r\nsource developers.\r\n&lt;p&gt;\r\n&lt;li&gt;&lt;b&gt;Should I let just anyone subscribe?&lt;/b&gt;\r\n&lt;br&gt;\r\n&quot;Yes&quot; will already be checked for you, so leave it that way.  You want\r\nyour users to be able to subscribe so they\'ll know when you\'ve fixed\r\nthe bug they reported, because they want to try out the changes as\r\nsoon as they\'re in.\r\n&lt;/ol&gt;\r\n\r\n&lt;p&gt;\r\nOk, so you really only had to decide one thing -- that\'s even better.\r\nNow, click the &quot;Add This List&quot; button, and wait for your list to be\r\ncreated.\r\n\r\n\r\n&lt;h2&gt;Set up syncmail&lt;/h2&gt;\r\n\r\n&lt;p&gt;\r\n&lt;b&gt;syncmail&lt;/b&gt; is a &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt;\r\nscript written by Barry Warsaw to send mail to the\r\n&lt;tt&gt;python-checkins&lt;/tt&gt; list long ago, before the Python development\r\ntree moved to SourceForge.  It\'s undergone a bit of evolution, but\r\nessentially does one thing: send email based on CVS activity.  It\r\ntakes a little bit of information from CVS and generates messages that\r\ninclude useful information, such as the actual changes that happened\r\nto the modified files.  It shoves all this into email that gets sent\r\nto an email address passed on the command line.  For projects with\r\nenough developers that &lt;b&gt;syncmail&lt;/b&gt; becomes interesting, this will\r\ntypically be a mailing list.\r\n\r\n&lt;p&gt;\r\nFor your project, this will be\r\n&lt;tt&gt;yourproject-checkins at lists.sourceforge.net&lt;/tt&gt; or\r\n&lt;tt&gt;yourproject-cvs at lists.sourceforget.net&lt;/tt&gt;, depending on the name\r\nyou chose in the first part of these instructions.\r\n\r\n&lt;p&gt;\r\nTo install &lt;b&gt;syncmail&lt;/b&gt;, you need a working copy of the &lt;font\r\n\r\nface=&quot;sans serif&quot;&gt;CVSROOT&lt;/font&gt; directory from your CVS repository.\r\nCheck it out just like you did for your project modules, but with the\r\nmodule name &quot;CVSROOT&quot;.\r\n\r\n&lt;p&gt;\r\nNow, get the latest version of &lt;b&gt;syncmail&lt;/b&gt;.  The canonical copy is\r\nin the repository for the &lt;a href=&quot;http://www.list.org/&quot;&gt;GNU\r\nMailman&lt;/a&gt; mailing list manager (the one you\'re using for the\r\ncheckins list you set up earlier).  Get it from SourceForge:\r\n\r\n&lt;p&gt;\r\n&lt;a\r\n\r\nhref=&quot;http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/CVSROOT/syncmail?cvsroot=mailman&quot;\r\n&gt;http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/CVSROOT/syncmail?cvsroot=mailman&lt;/a&gt;\r\n\r\n&lt;p&gt;\r\nSave the most recent revision to your working copy of your project\'s\r\n&lt;font face=&quot;sans serif&quot;&gt;CVSROOT&lt;/font&gt; directory.  Use &lt;b&gt;chmod +x&lt;/b&gt;\r\nto set the executable bit for all users, and then add the file to your\r\nproject: &lt;b&gt;cvs add syncmail&lt;/b&gt;; &lt;b&gt;cvs commit syncmail&lt;/b&gt;.  You\r\nprobably want to mention in your comment message where the file came\r\nfrom and the revision number you picked up.\r\n\r\n&lt;p&gt;\r\nSend a support request to SourceForge asking the admin to check out a\r\nworking copy of &lt;b&gt;syncmail&lt;/b&gt; into your &lt;font face=&quot;sans\r\nserif&quot;&gt;CVSROOT&lt;/font&gt; directory and verify that it gets the proper\r\nexecutable permissions.  The admin only needs to execute &lt;b&gt;cd\r\n/cvsroot/yourproject/CVSROOT&lt;/b&gt;; &lt;b&gt;co syncmail&lt;/b&gt; to get the\r\ndesired behavior.  Copy those commands into your support request to\r\nmake it easy on the admin; they\'re busy people!  Be sure to change\r\n&quot;yourproject&quot; to the real Unix name for your project.\r\n\r\n\r\n&lt;h2&gt;Configure CVS to use syncmail&lt;/h2&gt;\r\n\r\n&lt;p&gt;\r\nNow that you\'ve spent the better part of a day (or night) reading\r\nthese instructions, and a few minutes following them, you have just a\r\ntiny bit more to do to get CVS to put &lt;b&gt;syncmail&lt;/b&gt; to work.\r\n\r\n&lt;p&gt;\r\n&lt;em&gt;After&lt;/em&gt; some stressed out, overworked SoruceForge administrator\r\nhas handled your request to checkout a working copy of &lt;b&gt;syncmail&lt;/b&gt;\r\ninto the repository, you need to modify your &lt;font face=&quot;sans\r\nserif&quot;&gt;CVSROOT/loginfo&lt;/font&gt; file to tell CVS to invoke\r\n&lt;b&gt;syncmail&lt;/b&gt; for all the interesting events CVS is willing to tell\r\nus about.\r\n\r\n&lt;p&gt;\r\nIf you have not modified the &lt;font face=&quot;sans serif&quot;\r\n&gt;CVSROOT/loginfo&lt;/font&gt; file from the stock file provided by\r\nSourceForge (which is very useful, as the comments include\r\ndocumentation), what you need to do is very simple: just add stuff to\r\nthe end.  Here\'s some example stuff to get you started:\r\n\r\n&lt;pre&gt;\r\nCVSROOT $CVSROOT/CVSROOT/syncmail %{sVv} you at someplace.else\r\n\r\nDEFAULT $CVSROOT/CVSROOT/syncmail %{sVv} myproject-checkins at lists.sourceforge.net\r\n&lt;/pre&gt;\r\n\r\n&lt;p&gt;\r\nThis will cause email to be sent to two different places, with which\r\ndepending on what files in the repository are affected.  For\r\nadministrative files in the &lt;font face=&quot;sans serif&quot;&gt;CVSROOT&lt;/font&gt;\r\ndirectory, email will be sent to &lt;tt&gt;you at someplace.else&lt;/tt&gt;; you\r\nshould probably list all your project administrators here.  For all\r\nother files, email will be sent to your mailing list (remember to\r\nchange the list name to match &lt;em&gt;your&lt;/em&gt; mailing list!).\r\n\r\n&lt;p&gt;\r\nIf you have several sub-products for which you want different checkin\r\nlists, you can change the &quot;DEFAULT&quot; label to match the subtree that\r\nyou want to go to each list, with a separate line for each distinct\r\nprefix.  For example, if your project includes the products &quot;one&quot; and\r\n&quot;two&quot;, you could use the following:\r\n\r\n&lt;pre&gt;\r\nCVSROOT $CVSROOT/CVSROOT/syncmail %{sVv} you at someplace.else\r\n\r\none/ $CVSROOT/CVSROOT/syncmail %{sVv} myproject-one-cvs at lists.sourceforge.net\r\ntwo/ $CVSROOT/CVSROOT/syncmail %{sVv} myproject-two-cvs at lists.sourceforge.net\r\n&lt;/pre&gt;\r\n\r\n&lt;p&gt;\r\nYou can still have a &quot;DEFAULT&quot; line that gets used for any additional\r\nsubprojects.\r\n\r\n&lt;p&gt;\r\nIf you do &lt;em&gt;not&lt;/em&gt; have a stock &lt;font face=&quot;sans serif&quot;\r\n&gt;CVSROOT/loginfo&lt;/font&gt; file, then you can probably figure out what\r\nyou need to do to combine the information above with your existing\r\nchanges.  You might not have even needed any of these instructions!\r\n\r\n&lt;p&gt;\r\nCheck in your changes to &lt;font face=&quot;sans serif&quot;&gt;CVSROOT/loginfo&lt;/font&gt;\r\nand check in some other change in your working directories to test your\r\nnew configuration.\r\n\r\n\r\n&lt;h2&gt;Read email!&lt;/h2&gt;\r\n\r\n&lt;p&gt;\r\nNow for the real test.  If you have started a successful Open Source\r\nproject, you will not be able to catch up with your email.  If you can\r\nkeep up with it and still have time to hack, you need to make your\r\nproject more attractive to others, so you can get more developers\r\nchecking in more changes.  Then you\'ll always have more email than you\r\nknow what to do with!',968797217,968793546,1458,802,'CVS can automatically send email updates ');
+INSERT INTO doc_data VALUES (766,1,'Win32/CVS/SSH Guide',' &lt;p&gt; &lt;b&gt;A Complete Guide to Using SourceForge for Windows Development&lt;b&gt;\r\n&lt;h2&gt;Introduction &lt;/h2&gt;\r\n&lt;p&gt;This is a guide that will allow you to setup, configure and use SourceForge\r\nfor developing Windows based projects. &lt;/p&gt;\r\n&lt;p&gt;OpenSource projects tend to usually be *NIX (any flavour of UNIX Linux,\r\nFreeBSD, etc.) based. This is great since UNIX provides a full set of tools for\r\ncommunicating with SourceForge, usually without having to install anything\r\nbeyond your normal system. If your project is firmly based in the Windows world,\r\nor has a Windows port to it, this may leave you scratching your head wondering\r\nhow to get CVS running, what SSH is and how you can upload your website right?\r\nThat\'s the purpose of this guide.&lt;/p&gt;\r\n&lt;p&gt;This guide is compiled from my own experience and information scattered on\r\nSourceForges forums. I am indebted to Jay Key and Joel Utting for their work in\r\ncompiling information that was used as input into this document, as well as\r\neveryone who posted messages on SourceForge. While this\r\ndocument is as complete as possible, there may be some errors or omissions.\r\nPlease feel free to &lt;a href=&quot;mailto:bsimser at home.com&quot;&gt;email&lt;/a&gt; me if you find\r\nanything. NOTE: This document does NOT cover generating or using an SSH keypair.\r\nThis is optional and doesn\'t work quite right under Windows.&lt;/p&gt;\r\n&lt;h2&gt;Setup&lt;/h2&gt;\r\n&lt;p&gt;This document assumes you\'ve done the following:&lt;/p&gt;\r\n&lt;ol&gt;\r\n  &lt;li&gt;Registered as a new user on SourceForge&lt;/li&gt;\r\n  &lt;li&gt;Created a project on SourceForge and received confirmation that the\r\n    project is setup&lt;/li&gt;\r\n&lt;/ol&gt;\r\n&lt;p&gt;If you haven\'t already done this, please do so now before proceeding.&lt;/p&gt;\r\n&lt;h2&gt;Tools of the Trade&lt;/h2&gt;\r\n&lt;p&gt;Since when did you see Bob Vila build a house without his trusty Black &amp;\r\n\r\nDecker tools? You\'ll need some tools of your own to get going with SourceForge\r\nas well.&lt;/p&gt;\r\n&lt;h3&gt;CVS&lt;/h3&gt;\r\n&lt;p&gt;CVS is the version control system used on SourceForge. This is where you\'ll\r\nstore your source code to all your revisions of your project. You use a CVS\r\nclient on your end to communicate with the CVS server (the repository) on the\r\nSourceForge end. &lt;/p&gt;\r\n&lt;p&gt;CVS keeps a record of every change made to the source code, along with\r\ncomments about that change. At any time you can see any previous version of any\r\nfile in the repository. It allows multiple people to work on the same files at\r\nthe same time, merging the changes as they are &quot;committed&quot;, and\r\nalarming the user if two changes conflict making sure the difference is resolved\r\nby a human being before allowing the new version of that file to be placed into\r\nthe repository.\r\n&lt;p&gt;This may take some getting used to however. Basically the development cycle\r\ngoes like this:&lt;/p&gt;\r\n&lt;ol&gt;\r\n  &lt;li&gt;Code is imported into the repository&lt;/li&gt;\r\n  &lt;li&gt;Everyone working on the project &quot;checks out&quot; a working copy of\r\n    the source tree (or a portion thereof) to their local drives&lt;/li&gt;\r\n  &lt;li&gt;Each person works in the comfort of their own computer generated reality,\r\n    and when they have a new feature working, they &quot;update&quot; their\r\n    local copy to be as much in sync with the current version as possible, and\r\n    then they &quot;commit&quot; the files that have changed, back into the\r\n    repository.&lt;/li&gt;\r\n&lt;/ol&gt;\r\n&lt;p&gt;Any problems CVS has with commiting the files will be mentioned, and you must\r\nthen go through the problem files and resolve the differences manually. In the\r\nfiles, the changed section is highlighted with &gt;&gt;&gt;&gt;&gt; and both\r\nversions are shown. Simply delete the old version (or edit to make it work how\r\nits supposed to), and re-commit the file. Once CVS has no problem, return to\r\nstep 2, and get back to work !&lt;/p&gt;\r\n&lt;p&gt;The manual for CVS can be found here: &lt;a href=&quot;http://www.fsf.org/manual/cvs-1.9/cvs.html&quot;&gt;http://www.fsf.org/manual/cvs-1.9/cvs.html&lt;/a&gt;.\r\nI suggest you take some time to read through it when you get a chance. It will\r\nhelp later.&lt;/p&gt;\r\n&lt;h3&gt;SSH&lt;/h3&gt;\r\n&lt;p&gt;SSH is a secure mechanism for connecting to SourceForge\'s servers. You can\r\nfind a copy of SSH for Windows &lt;a href=&quot;ftp://ftp.cs.hut.fi/pub/ssh/contrib/ssh-1.2.14-win32bin.zip&quot;&gt;here&lt;/a&gt;.\r\nIt\'s just like telnet but provides a secure connection to SourceForge.\r\n&lt;/p&gt;\r\n&lt;h3&gt;SCP&lt;/h3&gt;\r\n&lt;p&gt;SCP is like a secure FTP client and allows you to put files onto SourceForges\r\nsystem. SCP is usually bundled with SSH so the link\r\nabove will get you both programs.&lt;/p&gt;\r\n&lt;h2&gt;Setup&lt;/h2&gt;\r\n&lt;p&gt;Once you have all the files you\'re ready to setup your environment to connect\r\nto SourceForge. There\'s only a few things that need to be done, but it\'s\r\nimportant you do them or else your connection will probably not work.&lt;/p&gt;\r\n&lt;h3&gt;SSH&lt;/h3&gt;\r\n&lt;blockquote&gt;\r\n&lt;p&gt;1. You\'ll need to unpack the SSH distribution files somewhere in your path.\r\nEither unzip them to a directory already in your path or create a new path and\r\nadd it to your AUTOEXEC.BAT file. For example, if you put them in C:\\BIN\r\nthen add this to your AUTOEXEC.BAT file: &lt;/p&gt;\r\n&lt;pre&gt;SET PATH=%PATH%;C:\\BIN&lt;/pre&gt;\r\n&lt;p&gt;2. You\'ll need a &quot;home&quot; directory where SSH will store settings for\r\nyou. This can be anywhere but set it up by adding an environmental variable to\r\nyour AUTOEXEC.BAT file like this:&lt;/p&gt;\r\n&lt;pre&gt;SET HOME=D:\\HOME &lt;/pre&gt;\r\n&lt;p&gt;(or wherever you want your home directory to be)&lt;/p&gt;\r\n&lt;p&gt;3. You need to create an \\ETC directory on the same drive you set your HOME\r\ndirectory to. In the example above, create a directory on drive D: called ETC:&lt;/p&gt;\r\n&lt;pre&gt;D:\r\nMD \\ETC&lt;/pre&gt;\r\n&lt;p&gt;4. Create a text file in this new directory called PASSWD. The file should\r\nhave one line in it that looks something like this:&lt;/p&gt;\r\n&lt;pre&gt;bsimser:x:1:10:Simser, Bil:d:/home:c:/windows/command.com&lt;/pre&gt;\r\n&lt;p&gt;Each entry is separated by a colon (&quot;:&quot;). The first entry is your\r\nSourceForge username. Make sure it\'s all in lower case. Don\'t worry about the\r\nnext 4 entries. The 6th entry is the path to your HOME directory you setup in\r\nstep 2. This can include a drive letter but remember to use the &quot;/&quot;\r\ncharacter instead of the normal DOS &quot;\\&quot;. The next entry points to your\r\ncommand interpreter (command.com on Windows 95/98, cmd.exe on Windows NT). This\r\nisn\'t used but you need an entry here.\r\n&lt;p&gt;5. Restart your system so your environmental variables and path can be\r\nupdated.&lt;/p&gt;\r\n  &lt;p&gt;6. You\'re ready to test your connection to SourceForge. From a DOS prompt\r\n  enter the following command:&lt;/p&gt;\r\n  &lt;pre&gt;ssh -l bsimser projectname.sourceforge.net&lt;/pre&gt;\r\n  &lt;p&gt;Replace bsimser with your SourceForge username. If this is your first time\r\n  connecting you\'ll see a message saying SSH is adding the host to your known\r\n  hosts. &lt;/p&gt;\r\n  &lt;p&gt;7. Enter your password at the prompt. Congratulations! You should now be\r\n  logged into SourceForge through SSH.&lt;/p&gt;\r\n  &lt;p&gt;SSH will create a new directory the first time you log into SourceForge in\r\n  your HOME directory called &quot;.SSH&quot;. In this directory are two files.\r\n  &quot;random_seed&quot; is just a binary file so don\'t worry about it (let me\r\n  know if you know what it\'s used for). Each time you log into a project on\r\n  SourceForge through SSH, an entry will be added to a binary file called &quot;known_hosts&quot;\r\n  (remember the message when you logged in?). Again, I\'m not sure what this file\r\n  is used for.&lt;/p&gt;\r\n&lt;/blockquote&gt;\r\n&lt;h3&gt;CVS &lt;/h3&gt;\r\n&lt;p&gt;CVS comes in two flavours, command line version and Windows GUI. &lt;/p&gt;\r\n&lt;h4&gt;Command Line&lt;/h4&gt;\r\n&lt;blockquote&gt;\r\n&lt;p&gt;1. Download\r\nthe command line version of CVS for Windows &lt;a href=&quot;http://download.cyclic.com/pub/cvs-1.10/windows/cvs-1.10-win.zip&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;\r\n&lt;p&gt;2. Unpack the command line version (CVS.EXE) to a pathed directory of your\r\nchoosing. You can put it in the same directory as SSH for convenience.&lt;/p&gt;\r\n&lt;p&gt;3. Add the following environmental variables to your AUTOEXEC.BAT:&lt;/p&gt;\r\n&lt;pre&gt;SET CVSROOT=username at cvs.projectname.sourceforge.net:/cvsroot/projectname\r\nSET USERNAME=username\r\nSET HOMEDRIVE=d:\r\nSET HOME=\\home\r\nSET HOMEPATH=\\home\r\nSET CVS_RSH=ssh&lt;/pre&gt;\r\n  &lt;p&gt;Change the context to your own SourceForge username and the HOME and\r\n  HOMEPATH variables to the ones you used in the SSH setup. Change projectname\r\n  to the short name for your SourceForge project.&lt;/p&gt;\r\n  &lt;p&gt;4. You can now import your local source code to CVS on SourceForge. Switch\r\n  to the root directory of your project on your local hard drive like so:&lt;/p&gt;\r\n  &lt;pre&gt;CD \\SRC\\PROJECTNAME\r\ncvs -dusername at cvs.projectname.sourceforge.net:/cvsroot/projectname import directoryname vendor start&lt;/pre&gt;\r\n  &lt;p&gt;NOTE: The following has also been reported to work (let me know if it\r\n  does):&lt;/p&gt;\r\n  &lt;pre&gt;cvs -d:ext:username at cvs.projectname.sourceforge.net:/cvsroot/projectname import directoryname vendor start&lt;/pre&gt;\r\n  &lt;p&gt;Substitute your username and projectname as before. Directoryname is the\r\n  name of the new directory that will be created in your CVS repository -- you\'ll\r\n  probably want to use your project name for this as well.&lt;/p&gt;\r\n  &lt;p&gt;5. To checkout a copy of the latest source use this command:&lt;/p&gt;\r\n  &lt;pre&gt;cvs -dusername at cvs.projectname.sourceforge.net:/cvsroot/projectname co projectname&lt;/pre&gt;\r\n  After the initial checkout, you can change into this directory and execute cvs\r\n  commands without the -d tag. For example:\r\n  &lt;pre&gt;cvs update\r\ncvs commit -m &quot;comments for this commit&quot;\r\ncvs add myfile.c&lt;/pre&gt;\r\n&lt;/blockquote&gt;\r\n&lt;h4&gt;Windows GUI&lt;/h4&gt;\r\n&lt;blockquote&gt;\r\n&lt;p&gt;1. Download the Windows GUI client from &lt;a href=&quot;http://www.wincvs.org&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;\r\n&lt;p&gt;2. Unzip the file into a temporary directory and run SETUP.EXE.&lt;/p&gt;\r\n&lt;p&gt;3. Start the WinCvs client.&lt;/p&gt;\r\n&lt;p&gt;4. Restart your system.&lt;/p&gt;\r\n&lt;p&gt;4. Under Admin | Preferences enter the CVSROOT for your project:&lt;/p&gt;\r\n&lt;pre&gt;username at cvs.projectname.sourceforge.net:/cvsroot/projectname&lt;/pre&gt;\r\n&lt;p&gt;5. Under Admin | Login login to CVS. It will prompt you for your SourceForge password.&lt;/p&gt;\r\n\r\n&lt;p&gt;6. You can now use the menu commands to check in/out source code from the\r\nGUI.&lt;/p&gt;\r\n\r\n&lt;/blockquote&gt;\r\n&lt;h3&gt;Website&lt;/h3&gt;\r\n&lt;p&gt;So now that you have your source code imported and working how about setting\r\nup your projects website!&lt;/p&gt;\r\n&lt;blockquote&gt;\r\n&lt;p&gt;1. Create your website locally using whatever HTML editor you want.&lt;/p&gt;\r\n&lt;p&gt;2. Upload the file(s) with the following command:&lt;/p&gt;\r\n&lt;pre&gt;scp filename.htm username at shell.sourceforge.net:/home/groups/projectname/htdocs&lt;/pre&gt;\r\n&lt;/blockquote&gt;\r\n&lt;p&gt;That\'s it! If you have a lot of files you might want to use gzip to compress\r\nthem into one file and upload them instead of doing it file by file. Follow\r\nthese instructions for this technique:&lt;/p&gt;\r\n&lt;blockquote&gt;\r\n  &lt;p&gt;1. You\'ll need to ZIP your files up with something like WinZip. Don\'t\r\n  worry, gunzip on the Unix side can handle ZIP files (or at least it should).\r\n  You can find WinZip &lt;a href=&quot;http://www.winzip.com&quot;&gt;here&lt;/a&gt;. Create your ZIP\r\n  file of all your HTML, GIF, etc. files.&lt;/p&gt;\r\n&lt;p&gt;2. Upload the ZIP file to SourceForge:&lt;/p&gt;\r\n&lt;pre&gt;scp filename.zip username at shell.sourceforge.net:/home/groups/projectname/htdocs&lt;/pre&gt;\r\n&lt;p&gt;3. Login to SourceForge with the SSH command:&lt;/p&gt;\r\n&lt;pre&gt;ssh -l username projectname.sourceforge.net&lt;/pre&gt;\r\n&lt;p&gt;You will now be in your home directory. From here all group files are stored\r\nin /home/groups/projectname. Change to this directory. All your web pages are\r\nstored in the htdocs directory.&lt;/p&gt;\r\n&lt;p&gt;4. Unzip the file on SourceForge:&lt;/p&gt;\r\n&lt;pre&gt;gunzip -d filename.zip&lt;/pre&gt;\r\n  &lt;p&gt;5. Make sure your files were unzipped successfully with the command:&lt;/p&gt;\r\n  &lt;pre&gt;ls -l&lt;/pre&gt;\r\n  &lt;p&gt;6. Remove the ZIP file from SourceForge:&lt;/p&gt;\r\n  &lt;pre&gt;rm filename.zip&lt;/pre&gt;\r\n&lt;/blockquote&gt;\r\n&lt;p&gt;That\'s it! You now can import your source code, work with CVS and upload your\r\nwebsite. That should be enough to keep you going on SourceForge.&lt;/p&gt;\r\n&lt;h2&gt;Links&lt;/h2&gt;\r\n&lt;ul&gt;\r\n  &lt;li&gt;Joel Utting\'s &lt;a href=&quot;https://sourceforge.net/docs/site/user/newproject-howto.php&quot;&gt;SourceForge New Project HOWTO&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;Jay Andrew Key\'s &lt;a href=&quot;http://akrip.sourceforge.net/cvs-ssh-win32-howto.txt&quot;&gt;win32 on SourceForge HOWTO&lt;/a&gt;&lt;/li&gt;\r\n&lt;/ul&gt;\r\n',968797222,968793133,1458,803,'Open Source is for Windows too');
+INSERT INTO doc_data VALUES (767,1,'Win32/CVS/SSH HowTo','&lt;p&gt; &lt;pre&gt;\r\nTitle: cvs/ssh/win32 on SourceForge HowTo\r\nVersion: 0.3\r\nDate: 03-Jan-2000\r\nAuthor: Jay A. Key, scsiprog at geocities.com\r\n\r\n\r\nI. Introduction\r\nThis document intends to provide a quick and dirty guide to using SSH and\r\nCVS on SourceForge in a Win32 environment.  These steps worked for me, and\r\nit is my hope that they will provide a starting point for others as well.\r\nIt took a fair amount of trial and error to find two distributions of SSH\r\nand CVS that would work together to access the CVS repository on SourceForge.\r\nWith the setup described below, I am able to access the repository both\r\nthrough a permanent connection through a firewall and via a dialup connection.\r\n\r\n\r\nII. Files\r\nThese are the versions of cvs and ssh that I have made to work together:\r\n  ssh:  ftp://ftp.cs.hut.fi/pub/ssh/contrib/ssh-1.2.14-win32bin.zip\r\n  cvs:  http://download.cyclic.com/pub/cvs-1.10/windows/cvs-1.10-win.zip\r\nAdditionally, you may want to download a different SSH archive to be able\r\nto generate an SSH keypair (Optional).  One such archive can be found at\r\n  http://dome.weeg.uiowa.edu/sos/ssh-without-cygwin.html \r\n\r\n\r\nIII. Setup\r\n  Setup for SSH\r\n  1. Create directories for the SSH executables and config files\r\n       md c:\\usr\\local\\bin\r\n       md c:\\etc\r\n  2. If you don\'t have a \'home\' directory for yourself, create it now.  For\r\n     example, my home directory is c:\\users\\ak.  In the home directory, \r\n     create a .ssh directory -- this is where your ssh keys will be stored.\r\n       md c:\\users\r\n       md c:\\users\\ak\r\n       md c:\\users\\ak\\.ssh\r\n  3. Unpack the ssh-1.2.14-win32bin.zip archive into c:\\usr\\local\\bin\r\n  4. Add c:\\usr\\local\\bin to your path.  You may wish to add this to your\r\n     autoexec.bat:\r\n       set path=%path%;c:\\usr\\local\\bin\r\n  5. Using your favorite text editor, create a PASSWD file in c:\\etc.  The\r\n     format of a line the file is:\r\n       keyja:x:1:10:Key, Jay A.:/users/ak/:/windows/command.com\r\n     The important items are #1, #6.  #1 is the login name on the local\r\n     machine.  #6 is your home directory.  #7 is the command shell on your\r\n     system (command.com on Win95 and cmd.exe on NT) -- but since it is not\r\n     a *NIX shell, it\'s probably useless to put it in there :-).\r\n  6. Set your HOME environment variable (again, remember to add it to\r\n     autoexec.bat as well) to the same directory you entered as item #6 in\r\n     the /etc/passwd file:\r\n       set HOME=c:\\users\\ak\r\n  7. Optional: Generate an ssh keypair.  Unfortunately, the ssh-keygen in \r\n     the ssh-1.2.14-win32bin.zip archive doesn\'t appear to work.  You can \r\n     fortunately use the ssh-keygen executable from a different SSH archive.\r\n     This step is not strictly necessary, since you\'ll have to type in\r\n     either your password or your passphrase every time you use it.\r\n       ssh-keygen\r\n     After running this command, verify that identity and identity.pub are\r\n     present in your .ssh directory.\r\n  8. Test your connection to SourceForge:\r\n       ssh -l username projectname.sourceforge.net\r\n     Of course, substitute your SourceForge username and projectname for\r\n     username and projectname in the command above.\r\n  9. Accept the key from SourceForge, and when prompted, enter your \r\n     password for SourceForge.\r\n\r\n  If you have gotten this far, then SSH is now working and configured on\r\n  your system.\r\n\r\n  CVS setup:\r\n  1. Follow the instructions in the README file in the CVS distribution.\r\n\r\n  Optional steps (not necessary nor even necessarily advantageous):\r\n  2. On your user page at SourceForge, you should find a place to upload\r\n     your SSH public key.  Copy the file identity.pub into the text entry\r\n     box on the page -- be sure not to add any line breaks or it will not\r\n     work.\r\n  3. After the requisite 6 hour wait, you should be able to use CVS with\r\n     SSH without using your password.  Of course, under windows I still\r\n     haven\'t found a working ssh-agent for Win32, so you\'ll have to type\r\n     your passphrase instead -- since my passphrase is *much* longer than\r\n     my password, it\'s easier for me to use the password instead.\r\n\r\n\r\nIV. Importing your source code\r\n  At this point, you should be able to check in your source following the \r\n  instructions in the CVS documentation on SourceForge.\r\n\r\n  1. Switch to the root directory of your project on your local hard drive.\r\n  2. Check in the initial version of your software to CVS:\r\n       cvs -d:ext:username at cvs.projectname.sourceforge.net:/cvsroot/projectname import directoryname vendor start\r\n     Substitute your username and projectname as before.  Directoryname is\r\n     the name of the new directory that will be created in your CVS\r\n     repository -- you\'ll probably want to use your project name for this\r\n     as well.\r\n\r\n\r\nHistory:\r\nv0.3, 03-Jan-2000: Added &quot;:ext:&quot; to -d parameter for the cvs initial import.\r\n\r\nv0.2, 15-Dec-1999: Added missing HOME environment variable.\r\n\r\nv0.1, 15-Dec-1999: Initial version\r\n&lt;/pre&gt;\r\n',968797226,968793182,1458,803,'A &quot;quick &amp; dirty&quot; guide');
+INSERT INTO doc_data VALUES (769,1,'Win32/CVS/SSH addendum for WinCVS','&lt;b&gt;Win32/CVS/SSH addendum for WinCVS&lt;/b&gt; \r\n&lt;p&gt;\r\nThis note was written to expand a little more on the existing documents\r\n&lt;a href=&quot;http://sfdocs.sourceforge.net/sfdocs/display_topic.php?topicid=19&quot;&gt;Win32/CVS/SSH Guide&lt;/a&gt; and\r\n&lt;a href=&quot;http://sfdocs.sourceforge.net/sfdocs/display_topic.php?topicid=19&quot;&gt;Win32/CVS/SSH HOW-TO&lt;/a&gt;\r\nwith regard to using the WinCVS GUI front-end. (Disclaimer: my experiences were under WinNT. It is possible\r\nthat Win9x will misbehave in new strange and wonderful ways!)\r\n&lt;/p&gt;\r\n\r\n&lt;h2&gt;Setting things up from scratch&lt;/h2&gt;\r\n\r\n&lt;p&gt;\r\nLet us suppose you (with SourceForge username &quot;&lt;code&gt;your-username&lt;/code&gt;&quot;) have set\r\nSSH up successfully and are able to SSH to your SourceForge project (named\r\n&quot;&lt;code&gt;your-project&lt;/code&gt;&quot;.) You have also installed WinCVS, have started it up, and you want\r\nto get it to talk to your SourceForge CVS repository. This is not too difficult, although you might\r\nnot discover it straight away by trial and error.\r\n&lt;/p&gt;\r\n\r\n&lt;ul&gt;\r\n&lt;li&gt;Select CVS Admin-&gt;Preferences ...&lt;/li&gt;\r\n&lt;li&gt;In the \'General\' tab,\r\n &lt;ul&gt;\r\n &lt;li&gt;Set the \'CVSROOT\' to &quot;&lt;code&gt;:ext:your-username at cvs.your-project.sourceforge.net:/cvsroot/your-project&lt;/code&gt;&quot;.&lt;/li&gt;\r\n &lt;li&gt;Set the \'Authentication\' to &quot;SSH Server&quot;&lt;/li&gt;\r\n &lt;/ul&gt;&lt;/li&gt;\r\n&lt;li&gt;In the \'Ports\' tab, set \'Check for an alternative rsh name\' to &quot;&lt;code&gt;ssh&lt;/code&gt;&quot;&lt;/li&gt;\r\n&lt;/ul&gt;\r\n\r\n&lt;p&gt;\r\nYou will be tempted now to try to log in using the CVS Admin-&gt;Login\r\noption; however, this will just result in a misleading error message,\r\n&quot;Set the password authentication first in the preferences !&quot; We\'ve\r\nset up our preferences just fine, password authentification works\r\ndifferently for an SSH server. So &lt;strong&gt;don\'t&lt;/strong&gt; use\r\nCVS Admin-&gt;Login.\r\n&lt;/p&gt; \r\n\r\n&lt;p&gt;\r\nInstead, whenever you perform some CVS operation that requires authentification, WinCVS will invoke your SSH\r\nclient, albeit in a rather unhelpful way. The invocation of the SSH client is silent and may take a \r\nbit of time. Eventually (for me at least) it appears in a minimised blank DOS shell window and sits there silently\r\nwaiting for me to type in my SourceForge password without any echo... nonetheless it works if I do this.\r\nAfter a brief pause to authenticate WinCVS carries out its communications with the repository as usual.\r\n&lt;/p&gt;\r\n\r\n&lt;h2&gt;Correcting an existing mess&lt;/h2&gt;\r\n\r\n&lt;p&gt;\r\nThis seems simple enough (if a little awkward!) but if you have experimented with the various other options, you may have\r\nalready fallen foul of a gotcha that certainly gotch me. If you optimistically set your CVSROOT instead to\r\n&lt;code&gt;:pserver:your-username at cvs.your-project.sourceforge.net:/cvsroot/your-project&lt;/code&gt; and selected &quot;.passwd\r\nfile on the CVS server&quot; for \'Authentication\', you will have found to your delight that you can then use CVS Admin-&gt;Login...,\r\nand then enter your SourceForge password just the once, after which you can talk successfully to the repository, doing such\r\npleasant read-only things as checking out existing modules, updating them, and diffing your changes. However,\r\nWinCVS has trapped you and is giggling. You will find that when you come to commit your changes back to the repository\r\nfor everyone to play with, you will not be able to do so: you will hear the complaint \'&lt;code&gt;cvs [server aborted]: &quot;commit&quot; requires write\r\naccess to the repository&lt;/code&gt;\'.\r\n&lt;/p&gt;\r\n\r\n&lt;p&gt;\r\nThe reason this can cause particular problems is that by this point, simply switching to the correct Preferences settings\r\ngiven above isn\'t enough. As a result of checking stuff out with different settings in place,\r\nyou now have lots of &lt;code&gt;CVS/Root&lt;/code&gt; metadata files that know the material they control was\r\nchecked out from a &lt;code&gt;:pserver:&lt;/code&gt; CVSROOT. As a result, even after changing your Preferences\r\nas required, WinCVS won\'t launch SSH and give you a chance to prove you have write permission since it thinks\r\nyou have already identified yourself; it will just continue to flake out with the &quot;...&lt;code&gt;requires write access&lt;/code&gt;...&quot;\r\ncomplaint. The simplest solution is to undo your crimes completely, and start again by checking the stuff out with the\r\ncorrect &lt;code&gt;:ext:&lt;/code&gt; CVSROOT. However, if you\'re feeling adventurous, you can edit all the existing\r\n&lt;code&gt;CVS/Root&lt;/code&gt; metadata files to achieve the same effect without compromising your existing\r\nchanges. (It worked for me - the resulting change to the files\' modification dates seemed to do no harm.)\r\n&lt;/p&gt;\r\n\r\n&lt;dl&gt;\r\n\r\n&lt;dt&gt;2000.07.07&lt;/dt&gt;\r\n&lt;dd&gt;\r\nAdded warning about not using CVS Admin-&gt;Login and clarification of\r\nSSH invocation - thanks &lt;a href=&quot;mailto:beman at esva.net&quot;&gt;Beman Dawes&lt;/a&gt;.\r\n&lt;/dd&gt;\r\n\r\n&lt;dt&gt;2000.06.06&lt;/dt&gt;\r\n&lt;dd&gt;Original document submitted&lt;/dd&gt;\r\n\r\n&lt;/dl&gt;\r\n',968797231,968793318,1458,803,'Read after the Win32 Guide &amp; Howto');
+INSERT INTO doc_data VALUES (770,1,'SourceForge setup tool for CVS/SSH/Win32','This is a tool written in Delphi that will set up all associated functions of WinCVS/ssh for SourceForge CVS usage (under Windows).\r\n&lt;P&gt;\r\n Visit: http://sfsetup.sourceforge.net/ for more information',968797238,968793383,1458,803,'There\'s a tool to help');
+INSERT INTO doc_data VALUES (771,1,'CVS/SSH and OS/2','&lt;b&gt;CVS/SSH and OS/2&lt;/b&gt;&lt;p&gt; Details from a recent support posting:\r\n&lt;br&gt;\r\n&lt;pre&gt;\r\n                    I\'m working under OS/2, and for some strange reasons it seems to be impossible to use OS/2 CVS together \r\n                    with OS/2 SSH, so I have to use :pserver: instead (I verified this fact with some other developer working under \r\n                    OS/2 with CVS for years). I can do a checkout as well as an update this way (I use cvs login first), but \r\n                    unfortunately no commit - cvs responds with\r\n\r\n                    cvs [server aborted]: &quot;commit&quot; requires write access to the repository\r\n\r\n                    Is it impossible to commit via :pserver: on sourceforge? In this case, every OS/2 developer would have problems \r\n                    using cvs on sourceforge. Or is there something wrong with my account?\r\n--------------------\r\nand the followup:\r\n--------------------\r\n\r\nThis is due to some buggy behaviour of the cvs os/2 port. It still tries to call ssh with parameter &quot;-b&quot; \r\n                    which is not understood by the os/2 port of ssh. So the workaround would be something like this:\r\n\r\n                    set CVS_RSH=some\\path\\to\\ssh.cmd\r\n\r\n                    and in ssh.cmd:\r\n                    some\\path\\to\\ssh.exe %2 %3 %4 %5\r\n\r\n                    as long as cvs.exe keeps passing &quot;-b&quot; as first parameter. Very &quot;safe method&quot; (I used here):\r\n\r\n                    ssh cvs1.sourceforge.net cvs server\r\n\r\n                    works fine :)\r\n----------------\r\nWith thanks to Izzy.\r\n----------------\r\n&lt;P&gt;\r\nMore:\r\nto use CVS over SSH on OS/2 you need specific versions of both SSH and CVS:\r\nCVS: either 1.10 or 1.10.6 both available from http://hobbes.nmsu.edu, the 1.10.7 version will NOT work\r\n&lt;P&gt;\r\nSSH: os/2-1.2.13-03, available as sshos203.zip from http://hobbes.nmsu.edu\r\n&lt;P&gt;\r\nI had huge problems wiht SSH CVS access and they where only because of wrong versions, everything works fine now ',968797243,968793470,1458,803,'Open Source is for OS/2 too');
+INSERT INTO doc_data VALUES (773,1,'Accessing &amp; using databases at SourceForge','  &lt;p&gt; &lt;b&gt;Accessing &amp; using batabases at SourceForge&lt;/b&gt;&lt;P&gt;&lt;UL&gt;\r\n&lt;EM&gt;If you need to store regularly formatted data for your project...\r\nand you need it stored reliably...\r\nand wish to search it flexibly...\r\nthen you want to request a database;\r\nand SourceForge provides it!\r\n&lt;/EM&gt;\r\n&lt;/UL&gt;&lt;/P&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;On this page:&lt;/B&gt;&lt;/P&gt;\r\n&lt;P&gt;&lt;UL&gt;\r\n&lt;LI&gt;&lt;A HREF=&quot;#what&quot;&gt;What is a Database?&lt;/A&gt;\r\n&lt;LI&gt;&lt;A HREF=&quot;#mysql&quot;&gt;What is MySQL?&lt;/A&gt;\r\n&lt;!-- pgqsql\r\n&lt;LI&gt;&lt;A HREF=&quot;#pgsql&quot;&gt;What is PostgreSQL?&lt;/A&gt;\r\n--&gt;\r\n&lt;LI&gt;&lt;A HREF=&quot;#request&quot;&gt;How to request a database at SourceForge?&lt;/A&gt;\r\n&lt;LI&gt;&lt;A HREF=&quot;#php&quot;&gt;How to access a database from a webpage?&lt;/A&gt;\r\n&lt;LI&gt;&lt;A HREF=&quot;#tips&quot;&gt;Tips and Tricks&lt;/A&gt;\r\n&lt;LI&gt;&lt;A HREF=&quot;#ref&quot;&gt;References&lt;/A&gt;\r\n&lt;/UL&gt;&lt;/P&gt;\r\n\r\n&lt;A NAME=&quot;what&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;What is a Database?&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n\r\n&lt;P&gt;A database, or more precisely, a &lt;EM&gt;relational&lt;/EM&gt; database, stores information in a number of tables.\r\nTables contain records, each of which represents a bit of information, shaped according to the format for that table.\r\nGo look up any book on SQL and see how simple it all is.&lt;/P&gt;\r\n\r\n&lt;P&gt;Particularly interesting are so-called &lt;EM&gt;keys&lt;/EM&gt;, which are unique values stored in a position of that database.\r\nIf these values are mentioned in a(nother) table in the database, they can be interpreted as a reference from one record to another, just like addresses serve as pointers in C and any of its crippled follow-ups.&lt;/P&gt;\r\n\r\n&lt;P&gt;Databases are simply structured and can therefore be put to just about any use you can think of.\r\nThey are particularly useful in being &lt;EM&gt;persistent&lt;/EM&gt;, that is, anything short of an atom bomb will not do to erase once-stored data.\r\nTo clearly mark the timing for this `once-stored\' notion, an important process concept in the database world is a &lt;EM&gt;transaction&lt;/EM&gt;, which is particularly useful when many users concurrently access the same database but wish to pretend they access it one at a time.&lt;/P&gt;\r\n\r\n\r\n&lt;A NAME=&quot;mysql&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;What is MySQL?&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n\r\n&lt;P&gt;Ah, MySQL is a database... except that it\'s a &lt;EM&gt;crisp&lt;/EM&gt; database.\r\nSure, it\'s fairly accepted in the GNU/Linux world, so it must be good. \r\nBut &lt;EM&gt;why&lt;/EM&gt; is it so good?\r\nAnd why is it used so much more often under web services than that other, full-blown, Open Source database, PostgreSQL?&lt;/P&gt;\r\n\r\n&lt;P&gt;Basically, the people that made MySQL don\'t implement a complete relational database.\r\nThey\'re very close, but left out a few concepts that slow down a complete SQL implementation.\r\nThe result: A crisp database which is in most situations quite usable for web applications.&lt;/P&gt;\r\n\r\n&lt;P&gt;The MySQL people left out &lt;EM&gt;transactions&lt;/EM&gt;.\r\nThis means that it is not possible to imagine all database operations as happening in sequence, but since most interactions deal with a combination of tables iterated over once in one SQL statement, this is not a problem.\r\nTransactions get useful if you first perform one SQL statement to request information, then another to process it somehow.\r\nBe a little smarter in writing your SQL queries, and you\'ll do fine (mostly, that is).\r\nAnd in case of trouble, you are supposed to be able to lock tables, but I never needed it, so I cannot tell you how.&lt;/P&gt;\r\n\r\n&lt;P&gt;To avoid most chances of trouble with this lack of transactions, MySQL also doesn\'t allow you to nest one SQL query inside another.\r\nAnd that\'s the only true constraint on query expressiveness in MySQL --- But again, mostly you should be fine.&lt;/P&gt;\r\n\r\n&lt;P&gt;Without transactions, MySQL can be an incredible lot faster in SQL query processing than any database that does offer transaction support.&lt;/P&gt;\r\n\r\n&lt;P&gt;Without transactions, don\'t even think of e-commerce applications (don\'t think of it on SourceForge anyway, you promised to stay clear of such horrible habits).\r\nReason for not doing e-commerce with MySQL is that e-commerce usually requires &lt;EM&gt;distributed transactions&lt;/EM&gt;, that ensure that all parties (like you, your bank, the selling party, the selling bank, any intermediaries) all agree on the success of failure of the deal.\r\nWithout transactions, let alone distributed ones, you cannot expect this stuff to reliably go right.&lt;/P&gt;\r\n\r\n&lt;P&gt;Without transactions, there still are many SQL queries that may be utilised for all sorts of purposes on dynamic web pages and the underlying administration.\r\nSourceForge, for example, administers all its data in MySQL.\r\nHeck, you don\'t expect to need more complicated queries than those of SourceForge, do you?\r\nFor almost any purpose, MySQL fits the bill!&lt;/P&gt;\r\n\r\n&lt;!-- pgsql\r\n\r\n&lt;A NAME=&quot;pgsql&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;What is PostgreSQL?&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n\r\n&lt;P&gt;PostgreSQL is another relational database, completely Open Source this time.\r\nIt is a complete implementation of SQL (as far as I know) and in comparison to MySQL it adds transactions, even distributed transactions if you want.\r\nFor most purposes, MySQL will do, but for some...\r\nAnyway, I think you can even request a PostgreSQL database if you want to!&lt;/P&gt;\r\n\r\n--&gt;\r\n\r\n\r\n&lt;A NAME=&quot;request&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;How to request a database at SourceForge?&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n\r\n&lt;P&gt;Okay, remember the &lt;A HREF=&quot;faq.php#whyhost-root&quot;&gt;FAQ question&lt;/A&gt; whether it was a good thing not to have root access and that the reply by the SourceForge folks was that in return you get professional sysadmin services? Here\'s where that\'s absolutely true.\r\nYou don\'t have to (or want to) get into user administration of MySQL, it is a small disaster.\r\nBelieve me, you should be glad some experienced guy is doing it for you!&lt;/P&gt;\r\n\r\n&lt;P&gt;All you need to do is to request a database &lt;EM&gt;for your project&lt;/EM&gt; (so, be sure to mention its name) on the &lt;A HREF=&quot;http://sourceforge.net/support/?func=addsupport&amp;group_id=1&quot;&gt;request submission&lt;/A&gt; page of the &lt;A HREF=&quot;http://sourceforge.net/support/?group_id=1&quot;&gt;support pages&lt;/A&gt; of SourceForge.\r\nEnter a &quot;Database Server&quot; category query with a text like\r\n&lt;PRE&gt;\r\n        Hi!\r\n\r\n        Could you create a MySQL database for my project GeeksGoGroovy?\r\n\r\n        Thanx,\r\n        -ThisGeek.\r\n&lt;/PRE&gt;\r\n&lt;!-- pgsql\r\nThey\'ll even provide you with PostgreSQL if you want to, but the default is MySQL, because it\'s lighter and suitable for most purposes anyway.\r\n--&gt;\r\nAfter requesting your database, just wait a few days or so, and then an email should poor into your mailbox.&lt;/P&gt;\r\n\r\n&lt;P&gt;This email contains the hostname that runs your database, the username you should access the database with (not necessarily related to your SourceForge-login, but it usually equals your project name), the name of the database (usually also equals your project name) and a password.\r\nThe email therefore looks a bit like this:\r\n&lt;PRE&gt;\r\n        Hostname:       VAntastic\r\n        Database:       Dumpster\r\n        Username:       GeeksGoGroovy\r\n        Password:       Sekreet\r\n&lt;/PRE&gt;\r\nPlus the usual amount of geek wisdom at the bottom &lt;CODE&gt;;-)&lt;/CODE&gt;\r\nYou need this information to start up MySQL from your shell account at SourceForge:\r\n&lt;PRE&gt;\r\n        bash$ mysql -h VAntastic -u GeeksGoGroovy Dumpster -p\r\n        Password: Sekreet\r\n        Welcome to the MySQL monitor.  Commands end with ; or g.\r\n        Your MySQL connection id is 2 to server version: 3.22.30\r\n\r\n        Type \'help\' for help.\r\n\r\n        mysql&gt; \r\n&lt;/PRE&gt;\r\nAt the &lt;CODE&gt;mysql&gt;&lt;/CODE&gt; prompt, you may start entering SQl commands and end them with &lt;CODE&gt;;&lt;/CODE&gt; plus return.&lt;/P&gt;\r\n\r\n&lt;P&gt;For example, this is what you could do to create your first database table:\r\n&lt;PRE&gt;\r\n        create table goosebumps\r\n        ( id      integer not null,\r\n          country varchar(255),\r\n          monster varchar(255),\r\n          primary key (id)\r\n        );\r\n&lt;/PRE&gt;\r\nand more tables in a similar way.\r\nYou could inserted some entries in tables as follows:\r\n&lt;PRE&gt;\r\n        insert into goosebumps\r\n        values (1, \'Scotland\',     \'Nessy\'),\r\n               (2, \'USA\',          \'Bill\'),\r\n               (3, \'Transilvania\', \'Dracula\');\r\n&lt;/PRE&gt;\r\nWe\'ll use this data in the example in the next section, but you can query it here too, with SQL queries like:\r\n&lt;PRE&gt;\r\n        select country,monster\r\n        from goosebumps\r\n        where country&lt;&gt;\'USA\';\r\n&lt;/PRE&gt;\r\nWhen entered in MySQL, this prints the following table:\r\n&lt;PRE&gt;\r\n        +--------------+---------+\r\n        | country      | monster |\r\n        +--------------+---------+\r\n        | Scotland     | Nessy   |\r\n        | Transilvania | Dracula |\r\n        +--------------+---------+\r\n        2 rows in set (0.00 sec)\r\n&lt;/PRE&gt;\r\nbut of course, such layout is &lt;EM&gt;not dun&lt;/EM&gt; for commercial quality (find the contradiction) software, for which the following layout is often &lt;EM&gt;mission-critical&lt;/EM&gt;:\r\n&lt;UL&gt;\r\n&lt;TABLE BORDER=3&gt;\r\n&lt;TR&gt;&lt;TH ALIGN=LEFT&gt;country&lt;/TH&gt;&lt;TH ALIGN=LEFT&gt;monster&lt;/TH&gt;&lt;/TR&gt;\r\n&lt;TR&gt;&lt;TD&gt;Scotland&lt;/TD&gt;&lt;TD&gt;Nessy&lt;/TD&gt;&lt;/TR&gt;\r\n&lt;TR&gt;&lt;TD&gt;Transilvania&lt;/TD&gt;&lt;TD&gt;Dracula&lt;/TD&gt;\r\n&lt;/TABLE&gt;\r\n&lt;/UL&gt;\r\nSo, we start wondering:&lt;/P&gt;\r\n\r\n\r\n&lt;A NAME=&quot;php&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;How to access a database from a webpage?&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n\r\n&lt;P&gt;Let\'s get to some real work now!\r\nThe previous section explained how to log in.\r\nYour favourite SQL book taught you how to create tables and insert initial data into it.\r\nLet\'s assume this all worked.\r\n(And no, it\'s not a shame if you make typo\'s in SQL syntax, people once stared at me in utter amazement for extending a table with a new attribute in one try, just to demonstrate how average SQL queries are formed: by trial and error.)&lt;/P&gt;\r\n\r\n&lt;P&gt;Next to enjoying the pleasures of typing SQL commands manually and getting the results back in the format of tables that don\'t fit on a 80-char-wide terminal, there is the possibility to exploit PHP for this purpose.\r\nIt goes without saying that SourceForge provides PHP for anything you deem worthy, including even an &lt;CODE&gt;index.php&lt;/CODE&gt; entrance page instead of &lt;CODE&gt;index.html&lt;/CODE&gt;!&lt;/P&gt;\r\n\r\n&lt;P&gt;The PHP language is a server-side scripting language that can directly access a database, without the need of complicated web structures like &lt;CODE&gt;cgi-bin&lt;/CODE&gt; scripts.\r\nJust let your filenames end in &lt;CODE&gt;.php&lt;/CODE&gt; or perhaps in &lt;CODE&gt;.php3&lt;/CODE&gt; and the script is interpreted as PHP code.\r\nBasically, PHP is just HTML, but with the possibility (to name one of many) of intersecting dynamic sections of code, such as\r\n&lt;PRE&gt;\r\n        &lt;?php\r\n\r\n                echo &quot;&lt;BLINK&gt;This is blinking&lt;/BLINK&gt;&quot;;\r\n        ?&gt;\r\n&lt;/PRE&gt;\r\nor, of course, much more fancy material, such as database access.&lt;/P&gt;\r\n\r\n&lt;P&gt;These are the steps you need to take to access a database from PHP scripts:\r\n&lt;OL&gt;\r\n&lt;LI&gt; &lt;B&gt;Open a MySQL connection:&lt;/B&gt;\r\n        First, we need to establish a connection to the database on the host that runs the MySQL daemon.\r\n        In terms of PHP, this goes:\r\n        &lt;PRE&gt;\r\n        $db=mysql_connect (&quot;VAntastic&quot;, &quot;GeeksGoGroovy&quot;, &quot;Sekreet&quot;);\r\n        &lt;/PRE&gt;\r\n&lt;LI&gt; &lt;B&gt;Select your database:&lt;/B&gt;\r\n        There now is a connection to MySQL, but since many databases may reside at the contacted host, we should specify which one to use, just like we did with &lt;CODE&gt;-h&lt;/CODE&gt; on the command line; in PHP:\r\n        &lt;PRE&gt;\r\n        mysql_select_db (&quot;Dumpster&quot;, $db);\r\n        &lt;/PRE&gt;\r\n&lt;LI&gt; &lt;B&gt;Send an SQL query:&lt;/B&gt;\r\n        We first have to specify what we want to ask the database.\r\n        This is a plain query as you learned from your favourite SQL book, entered as a string.\r\n        In PHP, this goes:\r\n        &lt;PRE&gt;\r\n        $result=mysql_query (&quot;select country,monster from goosebumps&quot;, $db);\r\n        &lt;/PRE&gt;\r\n&lt;LI&gt; &lt;B&gt;Iterate over the rows:&lt;/B&gt;\r\n        The SQL query can return any number records, or in database terms, rows.\r\n        To deal with this generally, we should iterate over the rows in the result.\r\n        In PHP, this is done as follows:\r\n        &lt;PRE&gt;\r\n        while ($row=mysql_fetch_row ($result)) {\r\n            ... process $row ...\r\n        }\r\n        &lt;/PRE&gt;\r\n&lt;LI&gt; &lt;B&gt;Process each row:&lt;/B&gt;\r\n        Let\'s assume we lack any imagination, and just wish to print the data in the current row.\r\n        This can be done with a PHP statement like:\r\n        &lt;PRE&gt;\r\n        print (&quot;&lt;TR&gt;&lt;TD&gt;$row[0]&lt;/TD&gt;&lt;TD&gt;$row[1]&lt;/TD&gt;n&quot;);\r\n        &lt;/PRE&gt;\r\n&lt;LI&gt;&lt;B&gt;Close the deal:&lt;/B&gt;\r\n        Being good Un*x community citizens, we have learnt to clean up after we\'re done.\r\n        This habit is formulated in PHP with:\r\n        &lt;PRE&gt;\r\n        mysql_close ($db);\r\n        &lt;/PRE&gt;\r\n        provided, of course, that &lt;CODE&gt;isset($db)&lt;/CODE&gt; because otherwise, there was a fault in opening the database to start with.\r\n&lt;/OL&gt;\r\n&lt;/P&gt;\r\n\r\n\r\n&lt;P&gt;The whole PHP code with some table-embellishments now reads:\r\n&lt;PRE&gt;\r\n        &lt;?php\r\n\r\n        $db=mysql_connect (&quot;VAntastic&quot;, &quot;GeeksGoGroovy&quot;, &quot;Sekreet&quot;);\r\n        mysql_select_db (&quot;Dumpster&quot;, $db);\r\n        $result=mysql_query (&quot;select country,monster from goosebumps&quot;, $db);\r\n        print (&quot;&lt;TABLE BORDER=3&gt;n&quot;);\r\n        print (&quot;&lt;TR&gt;&lt;TH ALIGN=LEFT&gt;country&lt;/TH&gt;&lt;TH ALIGN=LEFT&gt;monster&lt;/TH&gt;n&quot;);\r\n        while ($row=mysql_fetch_row ($result)) {\r\n                print (&quot;&lt;TR&gt;&lt;TD&gt;$row[0]&lt;/TD&gt;&lt;TD&gt;$row[1]&lt;/TD&gt;n&quot;);\r\n        }\r\n        print (&quot;&lt;/TABLE&gt;n&quot;);\r\n        mysql_close ($db);\r\n        ?&gt;\r\n&lt;/PRE&gt;\r\nPut all of this in a &lt;CODE&gt;.php&lt;/CODE&gt; file in your project\'s &lt;CODE&gt;htdocs&lt;/CODE&gt;, for example &lt;CODE&gt;/home/groups/GeeksGoGroovy/htdocs/tralala.php&lt;/CODE&gt; and access its webpage &lt;CODE&gt;http://GeeksGoGroovy.sourceforge.net/tralala.php&lt;/CODE&gt; to see the results.\r\nThat\'s all there is to it!&lt;/P&gt;\r\n\r\n\r\n&lt;A NAME=&quot;tips&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;Tips and Tricks&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n&lt;P&gt;\r\nOnce your database runs, find out how you can make one table refer to another (or to itself, for that matter) by naming the &lt;EM&gt;primary key&lt;/EM&gt; in an attribute, much like you would use a pointer in a programming language.\r\nYou can pass those around between PHP scrips by generating references like &lt;CODE&gt;&lt;A HREF=&quot;HallOfGeeks.php?country=USA&quot;&gt;&lt;/A&gt;&lt;/CODE&gt; that pass a &lt;CODE&gt;country&lt;/CODE&gt; parameter to the PHP script &lt;CODE&gt;HallOfGeeks.php&lt;/CODE&gt;, that can use it as a normal variable, like in\r\n&lt;PRE&gt;\r\n        $result=mysql_query (&quot;select country,monster from goosebumps\r\n                                        where country=\'$country\'&quot;, $db);\r\n&lt;/PRE&gt;\r\nwhere you should mind the different use of quotes!&lt;/P&gt;\r\n\r\n&lt;P&gt;If you don\'t want to pass around numbers, but prefer names, you should encode according to the HTTP standards for a URL, to handles spaces and so on well.\r\nDo this with the PHP function &lt;CODE&gt;urlencode&lt;/CODE&gt; as follows:\r\n&lt;PRE&gt;\r\n        echo &quot;&amp;lt;A HREF=\'HallOfGeeks.php?search=&quot;, urlencode($plaintext), &quot;\'&amp;gt;&quot;;\r\n&lt;/PRE&gt;\r\nto turn a string &amp;lt;CODE&amp;gt\'n*s&lt;/CODE&amp;gt; into a reference like\r\n&lt;PRE&gt;\r\n        &amp;lt;A HREF=\'HallOfGeeks.php?search=n%25s\'&amp;gt;\r\n&lt;/PRE&gt;\r\nThe asterisk is automatically recovered from these codes when PHP parses its script parameters.&lt;/P&gt;\r\n\r\n&lt;P&gt;Parameters can be treated as optional.\r\nConsider this code as a replacement of the previous:\r\n&lt;PRE&gt;\r\n        $cc=&quot;&quot;;\r\n        if (isset ($search)) {\r\n                $cc=&quot; and monster regexp \'$search\'&quot;;\r\n        }\r\n        $result=mysql_query (&quot;select country,monster from goosebumps\r\n                                        where country=\'$country\'\r\n                                        $cc&quot;, $db);\r\n&lt;/PRE&gt;\r\nThis would add the new constraint only when the variable is defined; the variable will be defined if it occurs as a parameter to the script.&lt;/P&gt;\r\n&lt;P&gt;One last tip: It is possible to make pages &lt;EM&gt;very&lt;/EM&gt; dynamic.\r\nIf a browsing person visits the same page several times, make sure that it is clear what the goal for that page is.\r\nThere is no problem in using login interactions when a browsers accesses a privileged page, as long as it can eventually lead to the page longed for.\r\nThis lesson helped me to drastically improve the web structure of the LHSD project.&lt;/P&gt;\r\n&lt;P&gt;Do you see how quick and easy this combination of MySQL+PHP works?\r\nThat\'s what I meant before with crispness of this stuff!\r\nPerhaps your fingers are starting to itch a tad bit?\r\nLook at the URLs in SourceForge, and it\'ll only get worse &lt;CODE&gt;:-)&lt;/CODE&gt;\r\n&lt;BR&gt;\r\n&lt;EM&gt;Enjoy!&lt;/EM&gt;&lt;/P&gt;\r\n\r\n\r\n&lt;A NAME=&quot;ref&quot;&gt;\r\n&lt;P&gt;&lt;B&gt;References&lt;/B&gt;&lt;/P&gt;\r\n&lt;/A&gt;\r\n&lt;P&gt;\r\n&lt;A HREF=&quot;http://sourceforge.net&quot;&gt;SourceForge&lt;/A&gt; is an incredible development platform for the &lt;A HREF=&quot;http://www.opensource.org&quot;&gt;Open Source&lt;/A&gt; and &lt;A HREF=&quot;http://www.gnu.org&quot;&gt;GNU&lt;/A&gt; community.\r\n&lt;BR&gt;\r\n&lt;A HREF=&quot;http://www.mysql.com&quot;&gt;MySQL&lt;/A&gt; is freely &lt;A HREF=&quot;http://www.mysql.com/download.html&quot;&gt;downloadable&lt;/A&gt; and has an online &lt;A HREF=&quot;http://www.mysql.com/Manual_chapter/manual_toc.html&quot;&gt;reference manual&lt;/A&gt;.\r\n&lt;BR&gt;\r\n&lt;A HREF=&quot;http://www.php.net&quot;&gt;PHP&lt;/A&gt; has online &lt;A HREF=&quot;http://www.php.net/docs.php3&quot;&gt;documentation&lt;/A&gt;, also on &lt;A HREF=&quot;http://www.php.net/manual/ref.mysql.php3&quot;&gt;MySQL&lt;/A&gt;\r\n&lt;!-- pgsql\r\nand &lt;A HREF=&quot;http://www.php.net/manual/ref.pgsql.php3&quot;&gt;PostgreSQL&lt;/A&gt;\r\n--&gt;\r\n.\r\n&lt;BR&gt;\r\n&lt;!-- pgsql\r\n&lt;A HREF=&quot;http://www.postgresql.org&quot;&gt;PostgreSQL&lt;/A&gt; is freely &lt;A HREF=&quot;http://www.postgresql.org/sites.html&quot;&gt;downloadable&lt;/A&gt; and has online &lt;A HREF=&quot;http://www.postgresql.org/doxlist.html&quot;&gt;documentation&lt;/A&gt;.\r\n&lt;BR&gt;\r\n--&gt;\r\n&lt;A HREF=&quot;http://home.zonnet.nl/vanrein&quot;&gt;Rick van Rein&lt;/A&gt;, author of this page, is a &lt;A HREF=&quot;http://www.cs.utwente.nl/~vanrein&quot;&gt;PhD student&lt;/A&gt; in the &lt;A HREF=&quot;http://wwwis.cs.utwente.nl:8080&quot;&gt;database group&lt;/A&gt; of the &lt;A HREF=&quot;http://www.cs.utwente.nl/eng&quot;&gt;computer science&lt;/A&gt; department at the &lt;A HREF=&quot;http://www.utwente.nl/uk&quot;&gt;University of Twente&lt;/A&gt;.\r\n\r\n',968797253,968793885,1458,804,'A primer');
+INSERT INTO doc_data VALUES (774,1,'Getting started with SourceForge','  &lt;p&gt; &lt;b&gt;Introduction&lt;/b&gt;\r\n&lt;P&gt;Hello new SourceForge user ! I\'m writing this HOWTO in\r\nan effort to make it easier to setup a new project at SourceForge. This\r\ndocument is incomplete, (of course) and will hopefully be added to over\r\ntime as more features are added to SourceForge. My intention is for this\r\nto be a step-by-step guide for the initial setup of your new project. First\r\nI will outline what I think is the most common situation new developers\r\nwill face ; You have a directory of code, maybe even a current CVS repository,\r\nand you wish to use all the features of SourceForge to continue developing\r\nyour project in the public eye, free, and open sourced, and hopefully to\r\nattract some new developers to it, and, of course, users. So let\'s get\r\nstarted...\r\n&lt;P&gt;&lt;FONT SIZE=+2&gt;Steps for setting up a new project&lt;/FONT&gt;\r\n&lt;P&gt;Here is a brief overview of what is involved, details\r\nto follow ;\r\n&lt;P&gt;&lt;B&gt;1. Register as a new user with SourceForge.\r\n&lt;BR&gt;2. Register a New Project, logged in as the user you\r\ncreated in step 1.\r\n&lt;BR&gt;3. Setup your group and project information.\r\n&lt;BR&gt;4. Create your CVS repository with the latest snapshot\r\nof your code.\r\n&lt;BR&gt;5. Setup your group\'s web site.\r\n&lt;BR&gt;6. Setup mailing lists for your project.\r\n&lt;BR&gt;7. Finally, get used to using CVS for development, and\r\nget to work !&lt;/b&gt;\r\n&lt;P&gt;...and some other things that you may need ;\r\n&lt;P&gt;&lt;b&gt;8. Release a file module so people can see your work !\r\n&lt;BR&gt;9. Read the SourceForge site documentation and the help\r\nmessage forums.&lt;/b&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+2&gt;Now on to the business...&lt;/FONT&gt;\r\n&lt;P&gt;&lt;B&gt;1. Register as a new user with SourceForge.&lt;/b&gt;\r\n&lt;P&gt;On the &lt;A HREF=&quot;http://www.sourceforge.net&quot;&gt;SourceForge\r\nhomepage&lt;/A&gt;, click on the option New User via SSL. This will allow you\r\nto give your details to SourceForge, and it will then setup a user account\r\nfor you. To do just about anything involving interacting with SourceForge\r\nyou need to have a user account. Once this is done, you can login as this\r\nuser anytime using the Login via SSL option on the SourceForge homepage.\r\n&lt;P&gt;When you login you are presented with your personal page\r\n; any projects you are involved in are listed, along with some other info.\r\nAlong the side of the page are some options for you, including one which\r\nis of particular interest to us ; Register New Project...\r\n&lt;P&gt;&lt;b&gt;2. Register a New Project, logged in as the user you created\r\nin step 1.&lt;/b&gt;\r\n&lt;P&gt;Clicking on the Register New Project link takes you to\r\na set of pages which you must simply step through, providing all the information\r\nrequired. It is very straightforward and well setup, so no help here is\r\nreally needed\r\n&lt;P&gt;Once complete, it gets sent to the SourceForge staff,\r\nand they look over it to determine if your project would be suited to the\r\ngoals of SourceForge. I\'ve yet to hear of a project rejected, so don\'t\r\nworry ; if its open sourced and free, I think you\'ll get accepted quickly&lt;P&gt;Now you wait, and hopefully receive a reply within 24\r\nhours. (if it takes longer, mail them directly - there were some problems\r\nwith new projects, but I believe they have been corrected now) If all goes\r\nwell you will be informed of your new project being up, and so login via\r\nSSL and at the bottom of your personal page there will be a link to your\r\nnew project\'s group page\r\n&lt;P&gt;&lt;b&gt;3. Setup your group and project information.&lt;/b&gt;\r\n&lt;P&gt;Click on that link ! You will now see your group\'s SourceForge\r\npage (this is different from your web site), and a list of options allowing\r\nyou to change things,  basically to administer your project.\r\n&lt;P&gt;What do you have now ? Well, you have all of the following\r\n&lt;ul&gt;\r\n&lt;li&gt;a website at http://yourproject.sourceforge.net\r\n&lt;li&gt;a CVS repository at &lt;li&gt;cvs.yourproject.sourceforge.net:/cvsroot/yourproject\r\n&lt;li&gt;anonymous FTP at yourproject.sourceforge.net,\r\n&lt;li&gt;and access to mailing lists, which we\'ll use later.\r\n&lt;/ul&gt;\r\n&lt;P&gt;The first thing to do is to enter a description of your\r\nproject for your group page. Click on Project Admin, and then on Edit Group\r\npublic Information and Categorization. Insert the required info into the\r\nfields.\r\n&lt;P&gt;Next question ; Do you have any other developers already\r\n? If so, they must all register as users on SourceForge, and then give\r\nyou their user names. You can then add them by user name to your list of\r\ndevelopers, giving them write access to your group\'s CVS and web site.\r\nTo do this go back to Project Admin, and click on Add Group Member. Now\r\ntype in their user name, and they will be added.\r\n&lt;P&gt;The rest of your group page you can explore and see what\r\nelse is about. I think  we\'ve done the most important things here.\r\nTime to get some code where everyone can see it...\r\n&lt;P&gt;&lt;b&gt;4. Create your CVS repository with the latest snapshot\r\nof your code.&lt;/b&gt;\r\n&lt;P&gt;For people new to internet development (as I am myself)\r\nCVS takes a little getting used to. For the newbies, here is a brief description\r\nof what it does and how ;\r\n&lt;P&gt;It keeps a record of every change made to the source code,\r\nalong with comments about that change. At any time you can see any previous\r\nversion of any file in the repository. It allows multiple people to work\r\non the same files at the same time, merging the changes as they are &quot;committed&quot;,\r\nand alarming the user if two changes conflict (very clearly, I might add)\r\nmaking sure the difference is resolved by a human being before allowing\r\nthe new version of that file to be placed into the repository.\r\n&lt;P&gt;This is cool. It takes some getting used to however. Basically\r\nthe development cycle goes like this ;\r\n&lt;ol&gt;\r\n&lt;li&gt;You import all your code into the CVS, then everyone\r\n&quot;checks out&quot; a working copy of the source tree.\r\n&lt;li&gt;Each person works in the comfort of their own computer\r\ngenerated reality, and when they have a new feature working, they &quot;update&quot;\r\ntheir local copy to be as much in sync with the current version as possible,\r\nand then they &quot;commit&quot; the files that have changed, back into the repository.\r\n&lt;li&gt;Any problems CVS has with commiting the files will\r\nbe mentioned, and you must then go through the problem files and resolve\r\nthe differences manually. In the files, the changed section is highlighted\r\nwith &gt;&gt;&gt;&gt;&gt; and both versions are shown. Simply delete the old version (or\r\nedit to make it work how its supposed to), and re-commit the file. Once\r\nCVS has no problem, return to step (2), and get back to work !\r\n&lt;/ol&gt;\r\n&lt;P&gt;So, now to the details of importing your source tree into\r\nyour CVS repository at SourceForge. First read the site documentation on\r\nCVS. For more info read a bit of the free 180 page &lt;A HREF=&quot;http://cvsbook.red-bean.com&quot;&gt;CVS\r\nbook&lt;/A&gt;. Then do the following ;\r\n&lt;P&gt;Get &lt;A HREF=&quot;http://www.ssh.fi&quot;&gt;SSH&lt;/A&gt; and CVS for your\r\nplatform. Under linux using a Bash shell, type in the following ;\r\n&lt;P&gt;export CVS_RSH=ssh\r\n&lt;BR&gt;export CVSROOT=loginname at cvs.yourproject.sourceforge.net:/cvsroot/yourproject\r\n&lt;P&gt;The first line tells CVS to use SSH to connect to the\r\nrepository. This is for security purposes. The second line tells CVS where\r\nto look for its Repository.\r\n&lt;P&gt;Now, the most likely situation is that you have some source\r\ncode in a directory tree you wish to import into CVS. Go to the top directory\r\nyou wish to import, in your source code tree, and type in the following,\r\nfilling in the bits mentioned below ;\r\n&lt;P&gt;cvs import directoryname vendor start\r\n&lt;P&gt;directoryname is the name under which the repository\r\nwill be accessed. If all goes well it will ask for your SourceForge user\r\npassword, and then go on its merry way importing your whole source tree.\r\n&lt;P&gt;Next, backup your old code base somewhere, because you\r\ndon\'t want to work with it anymore, and checkout a fresh CVS version using\r\n;\r\n&lt;P&gt;cvs checkout directoryname\r\n&lt;P&gt;This will get you a &quot;working copy&quot; of the code, in CVS\r\nform, ready for you to hack on. You should remember, however, that any\r\nchanges such as adding/removing files and directories must be explicitly\r\nstated to CVS - see the above mentioned book for details.\r\n&lt;P&gt;&lt;b&gt;5. Setup your group\'s web site.&lt;/b&gt;\r\n&lt;P&gt;I\'ll assume that you have some sort of web page or site\r\nbuilt already that you wish to put up on SourceForge to give your group\r\na public face. Login to SourceForge using SSH, for example ;\r\n&lt;P&gt;ssh -l loginname yourproject.sourceforge.net\r\n&lt;P&gt;you will now be in your home directory. From here all\r\ngroup files are stored in /home/groups/yourproject. Change to this\r\ndirectory. All your web pages are stored in the htdocs directory. Going\r\nin here will contain index.php, which is a blank page that says you haven\'t\r\nuploaded a web page yet. Logout, and copy the files for your web page using\r\nscp, a program which comes with ssh. For example ;\r\n&lt;P&gt;scp localfile   loginname at shell.sourceforge.net:/home/groups/yourproject/htdocs\r\n&lt;P&gt;I suggest you gzip up your site, send it in one go using\r\nscp, then login with ssh and gunzip it.\r\n&lt;P&gt;So what should be on the web page ? Perhaps you\'d like\r\nthe following, as well as your project\'s information ;\r\n&lt;ol&gt;\r\n&lt;li&gt;A link to the projects group page on SourceForge.\r\n&lt;li&gt;Mailing list links (we\'ll create them in a second)\r\n&lt;li&gt;A SourceForge icon and web counter - see the site\r\ndocumentation for this.\r\n&lt;li&gt;A link to the CVS web interface at http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=yourproject\r\n&lt;li&gt;Some info about using CVS specific to your project.\r\n&lt;li&gt;Setup mailing lists for your project.&lt;/b&gt;\r\n&lt;/ol&gt;\r\n\r\n&lt;P&gt;If your project isn\'t that active yet (or only has one\r\nlonely developer) your mailing lists will be very quiet, however I still\r\nsuggest you look to the future and setup three standard lists for your\r\nproject ; a devel list for developers, a users list for users, and an announce\r\nlist for new version announcements.\r\n&lt;P&gt;Do this via your group page using the mailing list admin\r\nlink. Its quite simple so you shouldn\'t have any problems...\r\n&lt;P&gt;&lt;b&gt;7. Finally, get used to using CVS for development, and\r\nget to work !&lt;/b&gt;\r\n&lt;P&gt;I\'ll give you some quick details of the development cycle\r\nto get you started, but anything you\'ll have to look up yourself.\r\n&lt;P&gt;To update your working copy to be in sync with the CVS\r\nrepository one use ;\r\n&lt;P&gt;cvs -z3 update -Pd\r\n&lt;P&gt;(after setting up CVSROOT and CVS_RSH as outline previously)\r\n&lt;BR&gt;For commiting the changes to a file ;\r\n&lt;P&gt;cvs commit -m &quot;comment about changes.&quot; filename\r\n&lt;P&gt;To add a new file to the CVS repository ;\r\n&lt;P&gt;cvs add filename\r\n&lt;BR&gt;cvs commit -m &quot;added filename&quot; filename\r\n&lt;P&gt;...and now you\'re ready to go !\r\n&lt;P&gt;Some other things that you may need ;\r\n&lt;P&gt;&lt;b&gt;8. Release a file module so people can see your work !&lt;/b&gt;\r\n&lt;P&gt;&lt;b&gt;9. Read the SourceForge site documentation and the help\r\nmessage forums.&lt;/b&gt;\r\n&lt;P&gt;From the homepage. Recommended.',968796731,968794021,1458,805,'An introduction');
+INSERT INTO doc_data VALUES (775,1,'INTERNET EXPLORER USERS - PAGE NOT FOUND/DNS/SECURE CHANNEL ERRORS','&lt;b&gt;PAGE NOT FOUND/DNS/SECURE CHANNEL ERRORS \r\n&lt;P&gt;&lt;/b&gt;\r\nIf you receive this error, it is probably because you are using IE 4. This is due to IE having a problem understanding both Netscape and Microsoft\r\nSGS SSL certificates. It _should_ support both, but doesn\'t. While we\'re working toward getting a new cert enabled on the servers, the best action in\r\nthe mean time is to either: (1) use IE 5 128bit, or (2) use Netscape. ',968796806,968794080,1458,805,'It\'s not our fault...');
+INSERT INTO doc_data VALUES (778,1,'Help Choosing an Open Source license','&lt;b&gt;Help Choosing an Open Source license&lt;/b&gt;&lt;P&gt;\r\n[Originally submitted by a user; updated] Because of the many open-source licensing options I found it helpful to link to discussions of the differences between and philosophies of many of the\r\nmain options. What follows is a short list, although I\'m sure there are others.&lt;P&gt;\r\n\r\n&lt;a href=&quot;http://www.opensource.org/&quot;&gt;Open Source Initiative: Perspectives on Open Source and licenses&lt;/a&gt;\r\n&lt;a href=&quot;http://www.fsf.org/philosophy/license-list.html&quot;&gt;Free Software Foundation license commentary&lt;/a&gt;\r\n&lt;a href=&quot;http://www.daemonnews.org/199905/gpl.html&quot;&gt;FreeBSD DaemonNews&lt;/a&gt;\r\n&lt;a href=&quot;http://www.stromian.com/Public_Licenses.html&quot;&gt;Evaluation of Public Software Licenses &lt;/a&gt;\r\n&lt;a href=&quot;http://slashdot.org/interviews/99/07/30/2220240.shtml&quot;&gt;Interview: Bruce Perens Answers Open Source License Questions &lt;/a&gt;',968796795,968794418,1458,805,'Some links and resources');
+INSERT INTO doc_data VALUES (788,1,'The 6 hour cron delay','&lt;P&gt;IMPORTANT: The 6 hour cron delay &lt;/b&gt;\r\n&lt;P&gt;\r\nMany functions on the SourceForge web site affect accounts on other SourceForge machines. This includes all functions relating to mail aliases, shell\r\npasswords, user additions, group member changes, cvs repository creation, etc. \r\n&lt;P&gt;\r\nUpdates to these other systems happen via cron 4 times per day, so changes made on the web site will appear to be live, but will not take effect until\r\nthe next cron update. ',968796754,968795282,1458,805,'Important');
+INSERT INTO doc_data VALUES (791,1,'Submitting bugs','&lt;P&gt;&lt;B&gt;Submitting a bug for a Project \r\n&lt;P&gt;&lt;/b&gt;\r\nSubmitting a bug is something very important for developers. They are often in need of feedback on their projects. You can in SourceForge submit a\r\nbug for any project. For this, you just need to be logged in.\r\n&lt;P&gt;&lt;B&gt;\r\nSubmitting a bug \r\n&lt;P&gt;&lt;/b&gt;\r\nJust go on the Bug Tracking system for a project, and then click on Submit. \r\n&lt;P&gt;\r\nFirst, you must choose a category and a group for the bug you will submit. Categories and groups are set up by a project administrator. Categories are\r\nequivalent to project parts (i.e : Server, Graphics, Engine , ...), and Bug groups define types of bugs (i.e : Unreproducible, Missing Feature ...). If no\r\ncategories or bug groups are defined, just let &quot;none&quot; and a project administrator will classify the bug himself. \r\n&lt;P&gt;\r\nAfter that, enter a quick description of the bug in the summary field. This description must be as clear as possible. \r\n&lt;P&gt;\r\nThen enter the details in the details Box. And click on the Submit button to end this bug report. You\'ll be noticed when the bug will be closed. ',968796777,968795560,1458,805,'A quick howto');
+INSERT INTO doc_data VALUES (889,1,'Foundries for users and projects','&lt;h2&gt;How does the list of projects work?&lt;/h2&gt;\r\n\r\n&lt;p&gt;The &quot;featured projects&quot; list is manually edited by\r\nthe foundry admin.\r\n\r\n&lt;p&gt;The other lists (most active, top downloads) come from\r\nthe Trove maps.  Provided that you have characterized your\r\nproject correctly in the Trove software map,\r\nit should just be a question of\r\nwhether your project is active enough.  Note that most active\r\nis based on the rating of the last week, not all time.\r\n\r\n&lt;h2&gt;How do I get my news into the foundry?&lt;/h2&gt;\r\n\r\n&lt;p&gt;Submit it to your project.  The foundry admin will see\r\na list of all news items submitted for projects in the\r\nrelevant software map categories and can approve the most\r\nnewsworthy for the foundry.\r\n\r\n&lt;p&gt;If you have questions, contact the foundry admin (just\r\nbe aware that most foundries have more news items available\r\nthan they have space to run).\r\n\r\n&lt;h2&gt;I want to help with a foundry or create one&lt;/h2&gt;\r\n\r\n&lt;p&gt;For an existing foundry, contact the foundry admins.\r\nHelping with an existing one before creating one is\r\nencouraged (so you can get to know the tools) - you can\r\nsee a list of foundries under the &quot;About Foundries&quot; link.\r\n\r\n&lt;h2&gt;I still have questions&lt;/h2&gt;\r\n\r\n&lt;p&gt;Contact the foundry admin.  Their name is on the left\r\nside of the foundry page.\r\n',969418525,969418381,4527,805,'How can I get mentioned in a foundry, etc');
+INSERT INTO doc_data VALUES (779,1,'Administering developers for your project','   &lt;P&gt;&lt;B&gt;Site Documentation - Administering Developers for Your Project&lt;/B&gt;\r\n\r\n&lt;P&gt;One of the most important and powerful features of the SourceForge\r\nTeam Development Environment is web-based user administration. As a project\r\nadmin, you have complete control over developer permissions in\r\nthe bug tracker, message forums, and task manager. \r\n\r\n&lt;P&gt;At this time, all\r\ndevelopers have write access to the CVS Repository and to your\r\ngroup directory (web site). There are plans to make these permissions\r\noptional as well.\r\n\r\n&lt;P&gt;&lt;B&gt;Adding developers to your project&lt;/B&gt;\r\n\r\n&lt;P&gt;As a project administrator, you will control the developer list for your\r\nproject. If someone wants to join your project as a developer, they\r\nmust first register on the site as a user, then they must contact you\r\nrequesting to join.\r\n\r\n&lt;P&gt;You control this membership list through the &quot;Group Members&quot; box\r\non the Project Admin page (available to you in the menu bar when you\r\nare logged in and at your project page).\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Go to the project page (https://sourceforge.net/project/admin/?group_id=89348\r\n    for instance).\r\n&lt;LI&gt; Click on &lt;B&gt;Project Admin&lt;/B&gt;\r\n&lt;LI&gt; Click on &lt;B&gt;Add Group Member&lt;/B&gt;\r\n&lt;LI&gt; Fill one of the input box with either a SourceForge UID or a login name\r\n&lt;LI&gt; Click on &lt;B&gt;Submit&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Removing developers from your project&lt;/B&gt;\r\n\r\n&lt;P&gt;Click &quot;Remove from Group&quot; from the &quot;Project Admin&quot; page to remove a\r\ngroup member. Project administrators cannot be removed in this\r\nmanner. To remove or add an administrator, email admin at sourceforge.net\r\nwith the request.\r\n\r\n&lt;P&gt;IMPORTANT: The cvs and shell account permissions will not be updated\r\nto reflect your changes immediately, but will take effect at the next\r\nsitewide cron update (once per 6 hours).\r\n\r\n&lt;!-- &lt;P&gt;&lt;I&gt;Group Members Box&lt;/I&gt;&lt;BR&gt; --&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Editing developer permissions&lt;/B&gt;\r\n\r\n&lt;P&gt;To control developer permissions within your project, click\r\n&quot;Edit Member Permissions&quot; in the Group Members box, resulting in the\r\npage shown below, where each member\'s permissions may be set. Don\'t\r\nforget to click &quot;Update Developer Permissions&quot; after making any changes.\r\n\r\n',968797292,968794675,1458,806,'(How to be in charge)');
+INSERT INTO doc_data VALUES (780,1,'File Modules','&lt;B&gt;File Modules \r\n&lt;/b&gt;&lt;P&gt;\r\nAny given project may want to release one or more file products under their project name. This will include any official released versions of their\r\nsource code, in any format. \r\n&lt;P&gt;\r\nBefore releasing files, you must first define a file module for your project. If your project has only one development tree, you will probably define only\r\none module. If your project will be releasing multiple filesets, then additional modules may be defined. \r\n&lt;P&gt;\r\nA file module defines an actual software product. When other projects choose to make references to your products, for dependencies or other\r\nreasons, it is your file modules that will be referenced. For this reason, when a file module is defined, it cannot be deleted in case it is referenced\r\nspecifically by other parts of the site. \r\n&lt;P&gt;&lt;B&gt;\r\nIMPORTANT! \r\n&lt;P&gt;&lt;/b&gt;\r\nFile modules are always referenced through their parent project. People do not search for your modules, they search for your project. Modules will\r\nshare bug tracking, task management, forums, developers, web site, and cvs repository. \r\n&lt;P&gt;&lt;b&gt;&lt;i&gt;\r\nFor MOST projects, there will only be the need to define one file release module. \r\n&lt;P&gt;&lt;/b&gt;&lt;/i&gt;\r\nNew modules vs. New projects \r\n&lt;P&gt;\r\nProjects share administrators and developers, have one web site, and share a CVS repository. If it is conceivable that a new file module would ever\r\nspin off into its own development cycle, with a non-identical developer set or requiring an independent web site, it is probably best to assign the\r\nproduct a new project, rather than just a module. It is OK to have the same developer set on two projects, if they are releasing two different products. \r\n&lt;P&gt;&lt;b&gt;\r\nExamples \r\n&lt;P&gt;&lt;/b&gt;\r\nFor a project I used to work on, ThorMail, we used to simultaneously maintain two file release modules. Every time we released a new version of\r\nThorMail, we would simultaneously release a ThorData module, which included some utility scripts and patches for additional programs that would\r\nwork with ThorMail. These two files were always dependent upon eachother, would always have the same set of developers, and would never be\r\nseparated. They would have been two modules under one project in SourceForge. \r\n',968797297,968794762,1458,806,'Important when releasing multiple file products under the same name');
+INSERT INTO doc_data VALUES (781,1,'Making File Releases','&lt;b&gt;Making File Releases&lt;/b&gt; \r\n&lt;p&gt; This text explains the steps to publish a release for a project.\r\nUsually a release for project foo is a file named foo-2.0.tar.gz\r\nthat you want to show in the &lt;B&gt;File Release&lt;/B&gt; box of your project\r\nhome page. See &lt;a href=&quot;modules.php&quot;&gt;File Modules&lt;/a&gt; for conceptual\r\nbackground. In the following we assume the most simple case:\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Your project is &lt;B&gt;foo&lt;/B&gt;\r\n&lt;LI&gt; It has a &lt;B&gt;File Module&lt;/B&gt; named &lt;B&gt;foo&lt;/B&gt;\r\n&lt;LI&gt; You want to show &lt;B&gt;foo-2.0.tar.gz&lt;/B&gt; in the &lt;B&gt;File Release&lt;/B&gt; box.\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Uploading to download.sourceforge.net&lt;/B&gt;&lt;P&gt;\r\n\r\nThe interactive method would be:\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; ftp download.sourceforge.net\r\n&lt;LI&gt; user: ftp\r\n&lt;LI&gt; password: me at myself.org\r\n&lt;LI&gt; cd incoming\r\n&lt;LI&gt; bin\r\n&lt;LI&gt; put foo-2.0.tar.gz\r\n&lt;/UL&gt;\r\n&lt;P&gt;\r\n\r\nThe command line method would be:\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; ncftpput -V download.sourceforge.net /incoming foo-2.0.tar.gz\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Accept the new release&lt;/B&gt;&lt;P&gt;\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Login as administrator of project &lt;B&gt;foo&lt;/B&gt;\r\n&lt;LI&gt; Go to the &lt;B&gt;foo&lt;/B&gt; project home page\r\n&lt;LI&gt; Click on &lt;B&gt;File Release&lt;/B&gt;\r\n&lt;LI&gt; A popup menu shows all the files in the ftp://download.sourceforge.net/incoming/\r\n     area. Choose your file. Be very carefull not to choose the distribution of \r\n     someone else. \r\n&lt;LI&gt; Click on &lt;B&gt;Submit&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Fill information about the release&lt;/B&gt;&lt;P&gt;\r\n\r\nAlthough you should be carefull when filling these fields, you will \r\nhave the opportunity to fix mistakes later. \r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Filling the version number is mandatory. In our example we\r\n     put &lt;B&gt;2.0&lt;/B&gt; in the &lt;B&gt;Release Version Number&lt;/B&gt; input box.\r\n&lt;LI&gt; Unless you want another date than the current date, leave the\r\n     &lt;B&gt;Release Date&lt;/B&gt; input box empty. \r\n&lt;LI&gt; If your project contains more than one File Module, you must \r\n     chose the one to which the release belongs. When handling a \r\n     simple project like &lt;B&gt;foo&lt;/B&gt; you have only one file module\r\n     named &lt;B&gt;foo&lt;/B&gt; and it is automatically selected. We leave\r\n     the &lt;B&gt;Module Name&lt;/B&gt; popup menu untouched for our example.\r\n&lt;LI&gt; The &lt;B&gt;Text Display Format&lt;/B&gt; checkbox choose the display \r\n     format of the ChangeLog and Release Notes text. \r\n&lt;LI&gt; The &lt;B&gt;Release Notes&lt;/B&gt; text area is intended for compatibility\r\n     information and synthetic description of the modifications. Basically\r\n     it should be formated as a mail the users of the project would like\r\n     to receive to know what\'s new in this release.\r\n&lt;LI&gt; The &lt;B&gt;ChangeLog&lt;/B&gt; text area is intended for chronologicaly ordered\r\n     technical change reports. It is intended for developpers to understand\r\n     precisely what happened to the sources since the latest release. Be\r\n     carefull: this box is not intended to contain the &lt;b&gt;full&lt;/b&gt; ChangeLog\r\n     content, only the diffs from the previous release.\r\n&lt;LI&gt; Click on the &lt;B&gt;Submit&lt;/B&gt; button.\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Modifying release information&lt;/B&gt;&lt;P&gt;\r\n\r\n&lt;UL&gt;\r\n&lt;LI&gt; Login as administrator of project &lt;B&gt;foo&lt;/B&gt;\r\n&lt;LI&gt; Go to the &lt;B&gt;foo&lt;/B&gt; project home page\r\n&lt;LI&gt; Click on &lt;B&gt;Project Admin&lt;/B&gt;\r\n&lt;LI&gt; Click on &lt;B&gt;Edit File Releases&lt;/B&gt;\r\n&lt;LI&gt; Choose the release for which you want to update information and\r\n     click on the &lt;B&gt;Edit&lt;/B&gt; next to it.\r\n&lt;LI&gt; The &lt;B&gt;File Status&lt;/B&gt; popup menu allows you to delete a release.\r\n&lt;LI&gt; The &lt;B&gt;Filename&lt;/B&gt; input box allows you to change the filename \r\n     to which the release is related. Mainly usefull to fix mistakes.\r\n&lt;LI&gt; All the other fields are identical to the initial information form.\r\n&lt;LI&gt; Click on &lt;B&gt;Submit&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n',968797302,968794809,1458,806,'Release early, release often!');
+INSERT INTO doc_data VALUES (784,1,'SourceForge getting started guide (GERMAN)',' &lt;p&gt; &lt;meta name=&quot;description&quot; content=&quot;Kurze Anleitung, wie man bei www.sourceforge.net ein neues Projekt einrichtet&quot;&gt;\r\n&lt;meta name=&quot;author&quot; content=&quot;Michael Renzmann&quot;&gt;\r\n&lt;meta name=&quot;generator&quot; content=&quot;Ulli Meybohms HTML EDITOR&quot;&gt;\r\n\r\n&lt;center&gt;\r\n  &lt;h3&gt;oder: Wie man bei SourceForge ein neues Projekt einrichtet&lt;/h3&gt;\r\n&lt;/center&gt;\r\n\r\n&lt;hr noshade size=&quot;1&quot;&gt;\r\n\r\n&lt;p&gt;\r\nÜbersetzung: &lt;a href=&quot;mailto:otaku at users.sourceforge.net&quot;&gt;otaku&lt;/a&gt;&lt;br&gt;\r\nOriginaltext: &lt;a href=&quot;mailto:prettypoly at users.sourceforge.net&quot;&gt;prettypoly&lt;/a&gt;&lt;br&gt;\r\nStand: 29.12.1999\r\n&lt;/p&gt;\r\n\r\n&lt;p&gt;\r\n&lt;font size=-2&gt;&lt;u&gt;Anmerkung des Übersetzers:&lt;/u&gt;&lt;br&gt;\r\nEs gibt mit Sicherheit Leute, deren Englisch besser ist als meines.\r\nVon daher sind Hinweise auf (grobe) Übersetzungsfehler o.ä. natürlich gerne willkommen. Ich\r\nhabe versucht, die Anleitung von prettypoly nicht wortwörtlich zu übersetzen, daß\r\nklingt sonst alles so gestelzt :-)&lt;br&gt;\r\nDiese Version der HOWTO geht auch noch davon aus, daß man im Notfall auch ein paar Brocken Englisch\r\nversteht, um sich auf der SourceForge-Homepage zurechtzufinden. Später (wenn die Entwicklung bei SF mal\r\netwas langsamer voranschreitet) werde ich diese Anleitung auch noch ein wenig erweitern. Vielleicht findet sich\r\nbis dahin ja auch jemand, der sich die Mühe macht und eine deutsche Bedienungsanleitung für SF\r\nschreibt...&lt;br&gt;\r\nMan möge mir Flüchtigkeitsfehler bitte nachsehen, da ich diese Übersetzung spontan mitten in der\r\nNacht geschrieben habe. Da kann sich schon mal der eine oder andere Vertipper einschleichen... :-)\r\n&lt;/font&gt;\r\n&lt;/p&gt;\r\n&lt;hr noshade size=&quot;1&quot;&gt;&lt;br&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;u&gt;Vorwort&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;\r\n\r\n&lt;p&gt;Hallo SourceForge-Neulinge!&lt;/p&gt;\r\n&lt;p&gt;Ich habe diese Anleitung geschrieben, um die Einrichtung eines neuen Projektes  und die ersten Schritte bei\r\nSourceForge zu vereinfachen. Das ganze ist noch unvollständig und wird (hoffentlich) mit SourceForge\r\nmitwachsen.&lt;/p&gt;\r\n&lt;p&gt;Die folgende Situation dürfte auf die meisten Programmierer zutreffen:&lt;br&gt;\r\nEs ist ein Verzeichnis vorhanden, in dem der geschriebene Code liegt, vielleicht sogar ein aktuelles CVS repository.\r\nDie Features von SourceForge sollen genutzt werden, um das Projekt effizient weiterzuentwickeln, der Öffentlichkeit\r\nvorzustellen, vielleicht ein paar Helfer zu finden und natürlich auch neue Benutzer. Ich gehe im folgenden daher\r\neinfach mal von dieser Situation aus. Also los...\r\n&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;u&gt;Überblick&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;\r\n\r\n&lt;p&gt;Die folgende Liste zeigt, was zum Einrichten eines neuen Projektes bei SourceForge gemacht werden muß. Die\r\nErklärung dazu kommt gleich.\r\n\r\n&lt;ol&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#one&quot;&gt;Als neuer User bei SourceForge anmelden&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#two&quot;&gt;Mit diesem Account einloggen und das neue Projekt anmelden&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#three&quot;&gt;Gruppen- und Projektinformationen anpassen&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#four&quot;&gt;CVS repository mit dem aktuellen Schnappschuß des Quellcodes einrichten&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#five&quot;&gt;Webseiten für das Projekt auf den Webserver laden&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#six&quot;&gt;Mailinglisten anlegen&lt;/a&gt;&lt;/li&gt;\r\n  &lt;li&gt;&lt;a href=&quot;#seven&quot;&gt;ggf. mit CVS vertraut machen und mit der Arbeit loslegen (bzw. weitermachen)!&lt;/a&gt;&lt;/li&gt;\r\n&lt;/ol&gt;\r\n... außerdem könnte man noch folgendes brauchen:\r\n&lt;ol start=8&gt;\r\n  &lt;li&gt;Ein Filemodul freigeben, damit man sich den Fortschritt des Projekts ansehen kann&lt;/li&gt;\r\n  &lt;li&gt;SourceForge &quot;Site Documentation&quot; und das Hilfe-Forum durchlesen&lt;/li&gt;\r\n&lt;/ol&gt;&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;u&gt;An die Arbeit...&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;one&quot;&gt;1. Als neuer User bei SourceForge anmelden&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Dazu muß man auf der &lt;a href=&quot;http://www.sourceforge.net&quot;&gt;SourceForge-Homepage&lt;/a&gt; die Option\r\n&quot;New User via SSL&quot; anklicken. Damit der neue Account eingerichtet werden kann, werden einige persönliche\r\nDaten abgefragt. Hat man das hinter sich gebracht, kann man sich ab jetzt immer ¨ber die Option &quot;Login via\r\nSSL&quot; anmelden.&lt;/p&gt;\r\n&lt;p&gt;Nach dem Login befindet man sich auf seiner persönlichen Seite. Hier wird beispielsweise aufgelistet, an\r\nwelchen Projekten man teilnimmt. Am linken Rand dieser Seite findet man einige Optionen, von denen uns vor allem\r\n&quot;Register New Project&quot; interessiert.&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;two&quot;&gt;2. Das neue Projekt anmelden&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Nun muß man sich durch eine Reihe Seiten durcharbeiten und die gewünschten Informationen angeben. Das\r\nganze ist eigentlich recht verständlich geschrieben und einfach zu handhaben, daher gehe ich auf die einzelnen\r\nAngaben hier nicht weiter ein.&lt;/p&gt;\r\n&lt;p&gt;Wenn man alle Angaben gemacht hat, schickt man die Beschreibung des Projekt an das SourceForge-Team. Das Projekt\r\nwird dann begutachtet und überprüft, ob es den Zielen von SourceForge entspricht. Keine Sorge, ich habe\r\nbis jetzt nicht gehört, daß ein Projekt abgelehnt wurde... wenn es unter einer OpenSource-Lizenz steht\r\nund frei verfügbar ist, sollte es klappen.&lt;/p&gt;\r\n&lt;p&gt;Nun muß man ein wenig warten. In der Regel bekommt man innerhalb von 24 Stunden eine Mail mit dem Hinweis,\r\ndaß das Projekt eingerichtet wurde. Wenn man sich nun wieder einloggt, findet man am unteren Ende seiner\r\npersönlichen Seite einen Link zum Verwaltungsbereich des neuen Projekts.&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;three&quot;&gt;3. Gruppen- und Projektinformationen anpassen&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Hat man den Link auf seiner persönlichen Seite angeklickt, kommt man also zum Verwaltungsbereich des neuen\r\nProjektes. Hier kann man zahlreiche Einstellungen vornehmen.&lt;/p&gt;\r\n&lt;p&gt;Bis jetzt hat mal also folgendes:\r\n&lt;ul&gt;\r\n  &lt;li&gt;eine Website unter http://&lt;i&gt;Projektname&lt;/i&gt;.sourceforge.net&lt;/li&gt;\r\n  &lt;li&gt;ein CVS repository unter cvs.&lt;i&gt;Projektname&lt;/i&gt;.sourceforge.net:/cvsroot/&lt;i&gt;Projektname&lt;/i&gt;&lt;/li&gt;\r\n  &lt;li&gt;einen anonymous FTP-Zugang unter ftp.&lt;i&gt;Projektname&lt;/i&gt;.sourceforge.net&lt;/li&gt;\r\n  &lt;li&gt;und Zugriff auf einen Mailinglisten-Server&lt;/li&gt;\r\n&lt;/ul&gt;\r\n&lt;/p&gt;\r\n&lt;p&gt;Als erstes sollte man eine Beschreibung des neuen Projektes angeben. Dazu klickt man auf &quot;Project\r\nAdmin&quot;, dann auf &quot;Edit Group Public Information and Categorization&quot;. Hier werden die gewünschten\r\nInformationen in die entsprechenden Felder eingegeben. Die Beschreibung und die Zielplattform(en) werden in der\r\nSoftware Map angezeigt, in der alle Projekte bestimmten Kategorien zugeordnet und beschrieben werden. Ein Link zur\r\nSoftware Map ist am linken Rand oben zu finden.&lt;/p&gt;\r\n&lt;p&gt;Die nächste Frage, die interessiert, ist: gibt es weitere Entwickler, die an diesem Projekt mitarbeiten?\r\nWenn ja, dann müssen sie sich alle bei SourceForge wie unter 1. beschrieben anmelden und Ihnen die Usernamen\r\nmitteilen. Sie können dann die Namen in die Liste der Entwickler aufnehmen und ihnen Schreibzugriff auf den\r\nCVS-Server und die Website geben. Dazu wählt man im Verwaltungsbereich des Projektes &quot;Add Group\r\nMember&quot; und gibt die entsprechenden Namen ein.&lt;/p&gt;\r\n&lt;p&gt;Der Rest der Einstellungen im Verwaltungsbereich wird später interessant. Nun sollte man erstmal etwas Code\r\nbereitstellen...&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;four&quot;&gt;4. CVS repository mit dem aktuellen Schnappschuß des Quellcodes einrichten&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Wenn man mit CVS (wie ich) noch keine Erfahrung hat, braucht man ein bisschen Eingewöhnungszeit. Den\r\nNeulingen möchte ich kurz beschreiben, was CVS überhaupt macht:&lt;/p&gt;\r\n&lt;p&gt;CVS führt Buch über die Veränderungen, die am Sourcecode vorgenommen wurden, zusammen mit einer\r\nBeschreibung dessen, was verändert wurde. Man kann sich zu jeder Zeit jede vorangegangene Version jeder\r\nDatei im repository ansehen. Durch CVS können mehrere Entwickler zur gleichen Zeit an der gleichen Datei\r\narbeiten und ihre Änderungen zusammenführen. Wenn zwei Änderungen sich gegenseitig beeinflussen,\r\nwerden die Entwickler darauf hingewiesen und sichergestellt, daß der Konflikt behoben wird, bevor die neue\r\nVersion der Datei im repository aufgenommen wird.&lt;/p&gt;\r\n&lt;p&gt;Das ist eine schöne Sache, an die man sich zwar erst ein wenig gewöhnen muß, die man aber bald\r\nschätzen wird. Im Wesentlichen besteht der Entwicklungszyklus aus:&lt;/p&gt;\r\n\r\n&lt;ol&gt;\r\n  &lt;li&gt;\r\n    Man importiert den kompletten Sourcecode ins repository; anschließend checkt jeder Entwickler eine\r\n    Arbeitskopie aus dem Entwicklungsbaum aus.\r\n  &lt;/li&gt;\r\n  &lt;li&gt;\r\n    Nun arbeitet jeder Entwickler in seiner gewohnten Umgebung am Programm. Sobald ein neues Feature fertig ist,\r\n    aktualisiert man zunächst die lokale Kopie, um auf dem laufenden zu sein und schreibt die veränderten\r\n    Files zurück in den Entwicklungsbaum.\r\n  &lt;/li&gt;\r\n  &lt;li&gt;\r\n    Sollten beim zurückschreiben der Veränderungen irgendwelche Konflikte auftauchen, wird man darauf\r\n    hingewiesen und muß anschließend manuell entsprechende Änderungen vornehmen. In den Dateien\r\n    werden die veränderten Bereiche mit &quot;&gt;&gt;&gt;&gt;&gt;&quot; hervorgehoben und beide Versionen angezeigt. Hier\r\n    löscht man entweder einfach die alte Version oder paßt den Bereich an, damit er wie gewünscht\r\n    arbeitet. Wenn alle Konflikte beseitigt sind, geht man wieder zurück zu Punkt 2 und setzt die Arbeit fort.\r\n  &lt;/li&gt;\r\n&lt;/ol&gt;\r\n\r\n&lt;p&gt;Gut. Nun zu den Details, wie man den eigenen Source-Baum auf den CVS-Server von SourceForge lädt. Als erstes\r\nsollte man sich die &quot;Site Documentation&quot; zum Thema CVS ansehen. Will man mehr wissen, ist der Griff zum\r\n180 Seiten starken (und frei verfügbaren) CVS-Handbuch angesagt. Dann geht man wie folgt vor:&lt;/p&gt;\r\n&lt;p&gt;SSH und CVS für das benutzte Betriebssystem besorgen. Für die Kombination Linux und bash gibt man nun\r\nein:&lt;/p&gt;\r\n&lt;code&gt;\r\nexport CVS_RSH=ssh&lt;br&gt;\r\nexport CVSROOT=&lt;i&gt;Username&lt;/i&gt;@cvs.&lt;i&gt;Projektname&lt;/i&gt;.sourceforge.net:/cvsroot/&lt;i&gt;Projektname&lt;/i&gt;&lt;br&gt;\r\n&lt;/code&gt;\r\n&lt;p&gt;Mit der ersten Zeile sagt man CVS, daß es mit Hilfe von SSH die Verbindung zum repository aufnehmen\r\nsoll. Das wird aus Sicherheitsgründen so gemacht. Die zweite Zeile teilt CVS mit, wo das repository genau zu\r\nfinden ist. Die kursiven Teile (Username und Projektname) müssen entsprechend angepaßt werden!&lt;/p&gt;\r\n&lt;p&gt;Oft wird man nun den Sourcecode aus einem Verzeichnis-Baum in den CVS-Server importieren wollen. Dazu\r\nwechselt man in das Verzeichnis, daß übertragen werden soll, und gibt folgende Zeile ein:&lt;/p&gt;\r\n&lt;code&gt;\r\ncvs import &lt;i&gt;Verzeichnisname&lt;/i&gt; vendor start\r\n&lt;/code&gt;\r\n&lt;p&gt;&lt;i&gt;Verzeichnisname&lt;/i&gt; ist der Name, unter dem das repository angesprochen werden soll. Wenn alles klappt, wird\r\nman nun nach seinem SourceForge User-Paßwort gefragt. Anschließend wird das Verzeichnis in den\r\nCVS-Server importiert, was ggf. ein Weilchen dauern kann.&lt;/p&gt;\r\n&lt;p&gt;Jetzt legt man ein Backup des &quot;alten&quot; Codes an, den man gerade auf den CVS-Server kopiert hat. In\r\nZukunft arbeitet man nicht mehr mit dieser Version, sondern mit einer frisch ausgecheckten CVS-Version. Die\r\nerhält man mit&lt;/p&gt;\r\n&lt;code&gt;\r\ncvs checkout &lt;i&gt;Verzeichnisname&lt;/i&gt;\r\n&lt;/code&gt;\r\n&lt;p&gt;Dadurch bekommt man eine Arbeitskopie des Sources in für CVS verdaulicher Form. Man sollte auf keinen Fall\r\nvergessen, daß jede neue oder gelöschte Datei bzw. Verzeichnis CVS bekanntgegeben werden muß.\r\nWeitere Informationen dazu gibts im oben genannten Buch.&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;five&quot;&gt;5. Webseiten für das Projekt auf den Webserver laden&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Ich gehe davon aus, daß bereits ein paar Seiten zum Projekt existieren, die nun auch auf SourceForge\r\nzur Verfügung stehen sollen, damit man einen Eindruck von Ihrem Projekt gewinnen kann. Sollten Sie noch\r\nkeine Seiten erstellt haben und auch nicht wissen, wie Sie das am besten anstellen, dann ist\r\n&lt;a href=&quot;http://www.teamone.de/selfhtml&quot;&gt;SelfHTML&lt;/a&gt; von Stefan Münz die richtige Adresse für Sie.&lt;/p&gt;\r\n&lt;p&gt;Um auf dem Projektaccount zu arbeiten, loggt man sich per SSH auf SourceForge ein, z.B. mit&lt;/p&gt;\r\n&lt;code&gt;\r\nssh -l &lt;i&gt;Username&lt;/i&gt; &lt;i&gt;Projektname&lt;/i&gt;.sourceforge.net\r\n&lt;/code&gt;\r\n&lt;p&gt;Anschließend findet man sich im Home-Verzeichnis des Projektes wieder. Von hier aus werden alle\r\nProjektdateien im Verzeichnis &lt;samp&gt;/home/groups/&lt;i&gt;Projektname&lt;/i&gt;&lt;/samp&gt; abgelegt. Dort sind alle Webseiten im\r\nVerzeichnis &lt;samp&gt;ht_docs&lt;/samp&gt; untergebracht. Bisher befindet sich in diesem Verzeichnis nur eine Datei\r\n&lt;samp&gt;index.php&lt;/samp&gt;, die besagt, daß bisher noch keine Webseiten zur Verfügung stehen.&lt;/p&gt;\r\n&lt;p&gt;Die Webseiten werden mit dem Kommando &lt;samp&gt;scp&lt;/samp&gt; übertragen, da&amp;azlig; mit ssh ausgeliefert wird.\r\nEs wird folgendermaßen benutzt:&lt;/p&gt;\r\n&lt;code&gt;\r\nscp &lt;i&gt;lokale_Dateien_zum_übertragen&lt;/i&gt; &lt;i&gt;Username&lt;/i&gt;@shell.sourceforge.net:/home/groups/&lt;i&gt;Projektname&lt;/i&gt;/ht_docs\r\n&lt;/code&gt;\r\n&lt;p&gt;Ich empfehle Ihnen, die Dateien mit gzip zu packen und mit scp zu übertragen. Loggen Sie sich\r\nanschlie&amp;zlig;end mit ssh auf SourceForge ein und entpacken Sie das Archiv mit gunzip.&lt;/p&gt;\r\n&lt;p&gt;Sie fragen Sich vielleicht, was Sie auf Ihre Webseiten schreiben sollen. Neben einer Beschreibung des\r\nProjekt könnten Sie folgendes unterbringen:&lt;/p&gt;\r\n&lt;ol&gt;\r\n  &lt;li&gt;ein Link auf die SourceForge-Projektseite&lt;/li&gt;\r\n  &lt;li&gt;Links zu den Mailinglisten (die wir gleich anlegen)&lt;/li&gt;\r\n  &lt;li&gt;ein SourceForge-Icon und einen Zugriffszähler; Informationen dazu gibts bei der &quot;Site\r\n      Documentation&quot; von SourceForge&lt;/li&gt;\r\n  &lt;li&gt;ein Link zum Webinterface des CVS-Servers unter http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=&lt;i&gt;Projektname&lt;/i&gt;&lt;/li&gt;\r\n  &lt;li&gt;einige für Ihr Projekt spezifische Informationen, wie CVS benutzt werden kann/soll&lt;/li&gt;\r\n&lt;/ol&gt;\r\n&lt;p&gt;Das sind natürlich nur einige Anregungen. Lassen Sie Ihre Fantasie spielen und versuchen Sie sich\r\nvorzustellen, was Besucher Ihrer Seiten interessieren könnte.&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;six&quot;&gt;6. Mailinglisten anlegen&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Auch, wenn sich bei einem Projekt noch nicht viel tut oder nur ein einzelner Entwickler daran arbeitet, sollte\r\nman in die Zukunft denken. Ich empfehle, drei Standardlisten für jedes Projekt anzulegen. Eine\r\n&lt;i&gt;devel&lt;/i&gt;-Liste für Entwickler, eine &lt;i&gt;users&lt;/i&gt;-Liste für die Benutzer und eine\r\n&lt;i&gt;announce&lt;/i&gt;-Liste, auf der neue Versionen angekündigt werden.&lt;/p&gt;\r\n&lt;p&gt;Die Listen können im Verwaltungsbereich des Projektes mit der Option &quot;Mailing List Admin&quot;\r\nangelegt werden. Das sollte keine Probleme bereiten, daher gehe ich darauf nicht weiter ein.&lt;/p&gt;\r\n\r\n&lt;p&gt;&lt;b&gt;&lt;a name=&quot;seven&quot;&gt;7. Mit CVS vertraut machen&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;\r\n&lt;p&gt;Hier sind die wichtigsten Kommandos, die man eigentlich ständig braucht. Alles weitere muß man im\r\nschon genannten Handbuch nachschlagen.&lt;/p&gt;\r\n&lt;p&gt;Die lokale Arbeitskopie des Sources mit der aktuellen Version auf dem Server zu synchronisieren:&lt;/p&gt;\r\n&lt;code&gt;\r\ncvs -z3 update -Pd\r\n&lt;/code&gt;\r\n&lt;p&gt;(dazu muß man CVSROOT und CVS_RSH wie oben beschrieben eingestellt haben).&lt;/p&gt;\r\n&lt;p&gt;Die Änderungen an einer Datei auf den CVS-Server einspielen: &lt;/p&gt;\r\n&lt;code&gt;\r\ncvs commit -m &quot;Beschreibung der Veränderungen.&quot; &lt;i&gt;Dateiname&lt;/i&gt;\r\n&lt;/code&gt;\r\n&lt;p&gt;Eine neue Datei in das CVS repository aufnehmen:&lt;/p&gt;\r\n&lt;code&gt;\r\ncvs add &lt;i&gt;Dateiname&lt;/i&gt;&lt;br&gt;\r\ncvs commit -m &quot;&lt;i&gt;Dateiname&lt;/i&gt; hinzugefügt&quot; &lt;i&gt;Dateiname&lt;/i&gt;\r\n&lt;/code&gt;\r\n&lt;p&gt;... und nun kanns losgehen!&lt;/p&gt;\r\n',968797312,968795045,1458,807,'    ');
+INSERT INTO doc_data VALUES (785,1,'CVS HowTo (FRENCH)','&lt;p&gt; &lt;B&gt;Documentation CVS de SourceForge&lt;/B&gt;\r\n\r\n&lt;P&gt;Cette documentation est vraiment limitée pour le moment, mais elle va déja vous permettre de démarrer.\r\n&lt;P&gt;Pour tout les accès développeurs (lecture/ecriture), vous devrez utiliser SSH.\r\nUn client SSH (1.x) doit etre disponible sur votre machine locale. La variable d\'environnement CVS_RSH doit contenir le chemin de ssh.\r\nCeci peut etre réalisé sur la plupart des systèmes Linux (bash) en tapant :\r\n&lt;UL&gt;&lt;B&gt;&lt;I&gt;export CVS_RSH=ssh&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;L\'accès anonyme à CVS utilise le pserver CVS, et ne requiert pas SSH.\r\n\r\n&lt;P&gt;Si vous obtenez des erreurs du type \'permission denied\' sans qu\'on vous demande de saisir un mot de passe,\r\nla variable ne doit pas etre correctement initialisée, ou SSH n\'est pas disponible sur votre système.\r\nArrangez ceci, avant de suspecter un problème de mot de passe.\r\n\r\n&lt;P&gt;&lt;B&gt;Comment importer du code source dans votre dépôt (repository)&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Sur votre machine locale, allez dans le répertoire dans lequel se situent les fichiers (et sous répertoires) que vous\r\nvoulez importer.\r\nTout les fichiers qui se situent actuellement dans ce répertoire, ainsi que les sous répertoires, vont être importés dans l\'arbre CVS.\r\n&lt;LI&gt;Tapez ce qui suit où nomutilisateur est votre nom d\'utilisateur SourceForge,\r\nvotreprojet est le nom unix de votre projet, et\r\nnomrepertoire est le nom du nouveau repertoire racine pour CVS (ex : . pour le repertoire dans lequel vous vous situez.)\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -dnomutilisateur at cvs.votreprojet.sourceforge.net:/cvsroot/votreprojet import nomrepertoire constructeur debut&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Comment récupérer les sources via SSH&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Tapez ce qui suit, en effectuant les modifications nécessaires pour votre nom d\'utilisateur, et votre projet.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -dnomutilisateur at cvs.votreprojet.sourceforge.net:/cvsroot/votreprojet co nomrepertoire&lt;/I&gt;&lt;/B&gt;\r\n&lt;LI&gt;Après la récupération intiale des fichiers sources, vous pouvez aller dans ce répertoire et éxecuter\r\nles commandes cvs, sans le marqueur -d. Par exemple :\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs update&lt;BR&gt;cvs commit -m &quot;commentaires pour cette modification&quot;&lt;BR&gt;cvs add monfichier.c&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Comment récupérer les sources de manière anonyme en passant par le pserver.&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Tapez ce qui suit, en effectuant les modifications nécessaires pour votre nom d\'utilisateur, et votre projet.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -d:pserver:anonymous at cvs.votreprojet.sourceforge.net:/cvsroot/votreprojet login&lt;/I&gt;&lt;/B&gt;\r\n&lt;LI&gt;Après vous être connecté de manière anonyme :\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -d:pserver:anonymous at cvs.votreprojet.sourceforge.net:/cvsroot/votreprojet co nomrepertoire&lt;/I&gt;&lt;/B&gt;\r\n&lt;LI&gt;Après la récupération intiale des fichiers sources, vous pouvez aller dans ce répertoire et éxecuter\r\nles commandes cvs, sans le marqueur -d. Par exemple :\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs update&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Comment utiliser CVS lorsque l\'on est connecté sur shell.sourceforge.net&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;Tapez ce qui suit, en effectuant les modifications nécessaires pour votre nom d\'utilisateur, et votre projet.\r\n&lt;BR&gt;&lt;B&gt;&lt;I&gt;cvs -dnomutilisateur at cvs1:/cvsroot/votreprojet login&lt;/I&gt;&lt;/B&gt;\r\n&lt;/UL&gt;\r\n&lt;DD&gt;Allez voire &lt;a href=user/cvssshfaq.php#ssh-shell&gt;CVS/SSH FAQ&lt;/a&gt; pour plus dínformations.\r\n\r\n&lt;P&gt;&lt;B&gt;Comment importer un &quot;arbre CVS&quot; existant&lt;/B&gt;\r\n\r\nCeci doit être fait manuellement par un membre de l\'équipe SourceForge. Procédez comme ceci:\r\n&lt;UL&gt;\r\n&lt;LI&gt; Préparez un fichier tar/gzip de votre arbre CVS entier.\r\n&lt;LI&gt; Assurez vous que celui-ci contienne le répertoire CVSROOT si il contient des informations que vous désirez conserver. Si vous n\'en êtes pas sur, incluez le.\r\n&lt;LI&gt; Envoyez un mail à &lt;a href=mailto:admin at sourceforge.net&gt;admin at sourceforge.net&lt;/a&gt; en demandant d\'inclure votre fichier tar/gzip au dépot CVS de votre projet. \r\nAssurez vous d\'avoir fourni les informations nécessaires dans votre mail:\r\n     &lt;UL&gt;\r\n     &lt;LI&gt; Le nom exact de votre projet, où l\'adresse de sa page principale.\r\nQuelque chose comme &lt;a href=http://sourceforge.net/project/?group_id=1695&gt;\r\n          http://sourceforge.net/project/?group_id=1695&lt;/a&gt;.\r\n     &lt;LI&gt; La localisation ftp ou http du fichier tar/gzip, si vous ne l\'avez pas envoyé en fichier attaché à votre mail. Vérifiez avec votre navigateur que le fichier est bien accessible.\r\n     &lt;LI&gt; Votre nom d\'utilisateur SourceForge.\r\n     &lt;LI&gt; Votre adresse email.\r\n     &lt;/UL&gt;\r\n&lt;LI&gt; Vous recevrez un mail de l\'équipe SourceForge lorsque votre arbre CVS sera prêt à utiliser.\r\n&lt;/UL&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;Comment récupérer votre arbre CVS.&lt;/B&gt;&lt;P&gt;\r\nDes archives tar/gzip quotidiennes du dépot CVS complet de votre projet \r\nsont disponibles pour archive ou duplicata. Ils sont disponibles à \r\nl\'adresse suivante :\r\nhttp://cvs.sourceforge.net/cvstarballs/nomprojet-cvsroot.tar.gz.\r\nOu &lt;b&gt;nomprojet&lt;/b&gt; est le nom UNIX de votre projet.\r\n\r\n&lt;P&gt;&lt;B&gt;Documentations complémentaires&lt;/B&gt;\r\n&lt;UL&gt;\r\n&lt;LI&gt;&lt;A href=&quot;http://cvsbook.red-bean.com/&quot;&gt;The CVS Book&lt;/A&gt;\r\n&lt;LI&gt;&lt;A href=&quot;http://www.loria.fr/~molli/cvs/doc/cvs_toc.html&quot;&gt;Docs CVS sur www.loria.fr&lt;/A&gt;\r\n&lt;/UL&gt;\r\n',968797324,968795068,1458,807,'    ');
+INSERT INTO doc_data VALUES (786,1,'CVS HowTo (GERMAN)','  &lt;p&gt;  &lt;META NAME=&quot;description&quot; CONTENT=&quot;Kurze Anleitung wie man CVS bei SourceForge benutzt&quot;&gt;\r\n  &lt;META NAME=&quot;author&quot; CONTENT=&quot;Uwe Hermann&quot;&gt;\r\n  &lt;META NAME=&quot;generator&quot; CONTENT=&quot;me and my vi :-)&quot;&gt;\r\n\r\n\r\n  &lt;H1&gt;Sourceforge CVS Dokumentation&lt;/H1&gt;\r\n\r\n  &lt;SMALL&gt;\r\n   Originaltext: SourceForge Crew&lt;BR&gt;\r\n   Übersetzung:\r\n   &lt;A HREF=&quot;mailto:uh1763 at users.sourceforge.net&quot;&gt;Uwe Hermann&lt;/A&gt;&lt;BR&gt;\r\n   Stand: 3.2.2000\r\n  &lt;/SMALL&gt;\r\n\r\n  &lt;P&gt;\r\n\r\n  Das hier ist nur eine Anleitung für die grundlegendsten Dinge, sollte aber\r\n  für den Anfang reichen.&lt;P&gt;\r\n\r\n  Alle Entwickler mit Read/Write-Rechten werden SSH(Secure Shell) benutzen.\r\n  Der SSH(1.x) Client muss auf deinem lokalen Rechner verfügbar sein.&lt;BR&gt;\r\n  Die Umgebungsvariable CVS_RSH muss den Pfad zu ssh enthalten. Dies kann\r\n  man auf den meisten Linux-systemen(mit bash) folgendermaßen erreichen:\r\n\r\n  &lt;PRE&gt;\r\n   export CVS_RSH=ssh\r\n  &lt;/PRE&gt;\r\n\r\n  Für anonymen CVS-Zugang wird CVS pserver verwendet und kein SSH benötigt.&lt;P&gt;\r\n\r\n  Wenn du eine \'permission denied\'-Meldung bekommst, ohne dass du nach einem\r\n  Passwort gefragt worden bist, hast du die CVS_SSH Umgebungsvariable nicht\r\n  richtig gesetzt oder ssh ist auf deinem System nicht verfügbar.\r\n  Das solltest du zuerst prüfen, bevor du ein Passwort-Problem vermutest.&lt;P&gt;\r\n  \r\n  \r\n  &lt;H1&gt;Wie du deinen Quellcode ins repository &lt;CODE&gt;import&lt;/CODE&gt;ierst&lt;/H1&gt;\r\n\r\n  Auf deiner lokalen Maschine wechselst du in das Verzeichnis dessen Dateien\r\n  und Unterverzeichnisse du importieren möchstest. Alles was jetzt im aktuellen\r\n  Verzeichnis und in allen Unterverzeichnissen ist wird ins repository\r\n  importiert werden.&lt;P&gt;\r\n\r\n  Tippe folgendes ein, um den Code zu importieren:&lt;BR&gt;\r\n\r\n  &lt;PRE&gt;\r\n   cvs -dloginname at cvs.deinprojekt.sourceforge.net:/cvsroot/deinprojekt import verzeichnisname vendor start\r\n  &lt;/PRE&gt;\r\n\r\n  Du musst natürlich \'loginname\' durch deinen SourceForge Login-Namen,\r\n  \'deinprojekt\' durch den Unix-Namen deines Projektes, und \'verzeichnisname\'\r\n  durch den Namen des neuen CVS-Verzeichnisses ersetzen.\r\n\r\n\r\n  &lt;H1&gt;Wie man einen Quellcode &lt;CODE&gt;checkout&lt;/CODE&gt; mit SSH durchführt&lt;/H1&gt;\r\n\r\n  Tippe folgendes ein, wobei du natürlich wieder \'loginname\', \'deinprojekt\'\r\n  und \'verzeichnisname\' ersetzt:\r\n\r\n  &lt;PRE&gt;\r\n   cvs -dloginname at cvs.deinprojekt.sourceforge.net:/cvsroot/deinprojekt co verzeichnisname \r\n  &lt;/PRE&gt;\r\n\r\n  Nach dem ersten &lt;CODE&gt;checkout&lt;/CODE&gt; kannst du in dieses Verzeichnis\r\n  wechseln und CVS-Kommandos ohne den &lt;CODE&gt;-d&lt;/CODE&gt; Parameter ausführen,\r\n  zum Beispiel:\r\n\r\n  &lt;PRE&gt;\r\n   cvs update\r\n   cvs commit -m &quot;Kommentare für dieses commit&quot;\r\n   cvs add datei.c \r\n  &lt;/PRE&gt;\r\n\r\n\r\n  &lt;H1&gt;Wie man einen anonymen Quellcode &lt;CODE&gt;checkout&lt;/CODE&gt; durchführt&lt;/H1&gt;\r\n\r\n  Tippe folgendes ein, wobei du natürlich wieder \'loginname\', \'deinprojekt\'\r\n  und \'verzeichnisname\' ersetzt:\r\n\r\n  &lt;PRE&gt;\r\n   cvs -d:pserver:anonymous at cvs.deinprojekt.sourceforge.net:/cvsroot/deinprojekt login\r\n  &lt;/PRE&gt;\r\n\r\n  Nachdem du dich nun als \'anonymous\' eingeloggt hast, tippe folgendes:\r\n\r\n  &lt;PRE&gt;\r\n   cvs -d:pserver:anonymous at cvs.deinprojekt.sourceforge.net:/cvsroot/deinprojekt co verzeichnisname \r\n  &lt;/PRE&gt;\r\n\r\n  Nach dem ersten &lt;CODE&gt;checkout&lt;/CODE&gt; kannst du in dieses Verzeichnis \r\n  wechseln und CVS-Kommandos ohne den &lt;CODE&gt;-d&lt;/CODE&gt; Parameter ausführen,\r\n  zum Beispiel:\r\n\r\n  &lt;PRE&gt;\r\n   cvs update\r\n  &lt;/PRE&gt;\r\n\r\n\r\n  &lt;H1&gt;Wie man CVS benutzt wenn man auf shell.sourceforge.net eingeloggt ist&lt;/H1&gt;\r\n\r\n  Tippe folgendes ein, wobei du natürlich wieder \'loginname\' und \'deinprojekt\'\r\n  ersetzt:\r\n\r\n  &lt;PRE&gt;\r\n   cvs -dloginname at cvs1:/cvsroot/deinprojekt login\r\n  &lt;/PRE&gt;\r\n\r\n  Lies die &lt;A HREF=user/cvssshfaq.php#ssh-shell&gt;CVS/SSH FAQ&lt;/A&gt; für nähere\r\n  Informationen.\r\n\r\n\r\n  &lt;H1&gt;Wie man einen schon existierenden CVS-tree &lt;CODE&gt;import&lt;/CODE&gt;iert&lt;/H1&gt;\r\n\r\n  Diese Aufgabe muss von der SourceForge-crew manuell erledigt werden.\r\n  Gehe wie folgt vor:\r\n\r\n  &lt;UL&gt;\r\n   &lt;LI&gt;erzeuge ein tar/gzip deines kompletten CVS-trees&lt;/LI&gt;\r\n   &lt;LI&gt;\r\n    stelle sicher, dass du dein CVSROOT Verzeichnis mit in das Archiv packst,\r\n    wenn es Informationen enthält, die du behalten möchtest. Wenn du dir\r\n    nicht sicher bist, pack es sicherheitshalber mit ins tar/gzip.\r\n   &lt;/LI&gt;\r\n   &lt;LI&gt;\r\n    Sende eine mail an\r\n    &lt;A HREF=mailto:admin at sourceforge.net&gt;admin at sourceforge.net&lt;/A&gt; und bitte\r\n    die Admins dort, das tar/gzip in das CVS repository deines Projektes\r\n    einzuspielen. Stelle jedoch sicher, dass du folgende Informationen in\r\n    deiner Mail angibst:\r\n    &lt;UL&gt;\r\n     &lt;LI&gt;\r\n      Den exakten Namen deines Projektes oder die URL der Homepage, z.B.\r\n      &lt;A HREF=http://sourceforge.net/project/?group_id=1695&gt;\r\n       http://sourceforge.net/project/?group_id=1695\r\n      &lt;/A&gt;\r\n     &lt;/LI&gt;\r\n     &lt;LI&gt;\r\n      Die FTP- oder HTTP- Adresse deiner tar/gzip Datei, wenn du sie nicht\r\n      als attachment mitgeschickt hast. Prüfe allerdings vorher ob man die\r\n      Datei auch wirklich per FTP/HTTP downloaden kann!\r\n     &lt;/LI&gt;\r\n     &lt;LI&gt;Deinen SourceForge Login-Namen&lt;/LI&gt;\r\n     &lt;LI&gt;Deine eMail-Adresse&lt;/LI&gt;\r\n    &lt;/UL&gt;\r\n   &lt;/LI&gt;\r\n   &lt;LI&gt;\r\n    Du wirst eine eMail von den SourceForge Admins erhalten, sobald der\r\n    CVS-tree zur Benutzung bereit steht.\r\n   &lt;/LI&gt;\r\n  &lt;/UL&gt;\r\n\r\n\r\n  &lt;H1&gt;Wie du deinen CVS-tree downloaden kannst&lt;/H1&gt;\r\n\r\n  Täglich erstellte tarballs deines kompletten CVS-repository\'s sind auf\r\n  http://cvs.sourceforge.net/cvstarballs/projektname-cvsroot.tar.gz für\r\n  Backup- oder Mirroring-Zwecke erhältlich. \'projektname\' muss natürlich\r\n  durch den Unix-Namen deines Projektes ersetzt werden.\r\n\r\n\r\n  &lt;H1&gt;Weitere CVS-Dokumentation&lt;/H1&gt;\r\n\r\n  &lt;UL&gt;\r\n   &lt;LI&gt;&lt;A HREF=&quot;user/cvssshfaq.php&quot;&gt;SourceForge CVS/SSH FAQ&lt;/A&gt;\r\n   &lt;LI&gt;&lt;A HREF=&quot;http://cvsbook.red-bean.com/&quot;&gt;Das CVS Buch&lt;/A&gt;&lt;/LI&gt;\r\n   &lt;LI&gt;\r\n    &lt;A HREF=&quot;http://www.loria.fr/~molli/cvs/doc/cvs_toc.html&quot;&gt;\r\n     CVS Dokumentation auf www.loria.fr\r\n    &lt;/A&gt;\r\n   &lt;/LI&gt;\r\n  &lt;/UL&gt;\r\n',968797318,968795114,1458,807,'    ');
+INSERT INTO doc_data VALUES (787,1,'SourceForge Gettin Started Guide (HUNGARIAN)','   &lt;p&gt; \r\nÍrta (fordította): &lt;A\r\n\r\nhref=&quot;http://sourceforge.net/developer/?form_dev=21822&quot;&gt;Gyöngyösi Péter&lt;/A&gt;&lt;br&gt;\r\nEredeti szerzõ: &lt;A href=&quot;http://sourceforge.net/developer/?form_dev=801&quot;&gt;Joel Utting&lt;/A&gt;\r\n&lt;P&gt;\r\n&lt;FONT SIZE=+2&gt;Bevezetés&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Üdv új SourceForge-használó  ! Ez a HOWTO azért\r\nszületett, hogy egyszerûbb legyen egy új projectet összehozni itt a\r\nSourceForge-on. Természetesen ez az írás nem teljes, és remélhetöleg\r\ntovább fog bõvülni, ahogy egyre újabb lehetõségek kerülnek a SourceForge-ba\r\n. A terv az, hogy lépésrõl-lépésre vezessen végig egy project\r\nlétrehozásának a kezdetein.\r\nElõször is, nézzük a legtipikusabb szituációt amivel egy új fejlesztõ\r\nszembesül: \r\nVan egy könyvtárnyi kódod, talán egy létezõ CVS-ed, és a SourceForge\r\nösszes lehetõségét ki akarod használni, hogy itt folytasd a\r\nfejlesztést a nagyközönség elõtt, szabadon, nyílt forrással, és\r\nremélhetõleg hogy idevonzz néhány új fejlesztõt, meg persze\r\nfelhasználót. Nos, vágjunk bele!\r\n&lt;FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+2&gt;Egy új project létrehozásának lépései&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Nagyjából ezekre fogunk kitérni:\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;1. Egy új felhasználó létrehozása a SourceForge-on. &lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;2. Egy új project létrehozása az elsõ lépésben\r\nlétrehozott userrel. \r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;3. A csapat- és projectinformációk beállítása.&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;4. Egy CVS repository (nem tudok erre használható\r\nmagyar fordítást, az angol eredetit fogom használni ezután is)\r\nlétrehozása a forrásod legújabb változatával. \r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;5. A project weboldalának a létrehozása. &lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;6. Levelezõlista létrehozása.&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;7. És vegül, szokjad meg a CVS használatát a\r\nfejleszésben, és láss munkához! \r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;...és néhány dolog, amire még szükséged lehet:&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;8. Hozz létre egy file modult, hogy láthassák a\r\nmunkád!&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;9. Olvasd végig a SourceForge dokumentációt és a\r\nhelp-fórumokat!\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+2&gt;Kezdjünk hát neki...&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;1. Egy új felhasználó létrehozása a SourceForge-on.&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A &lt;A HREF=&quot;http://www.sourceforge.net&quot;&gt;SourceForge\r\nfõoldalon&lt;/A&gt; klikkelj a &quot;New User via SSL&quot; linkre. Itt aztán\r\nmeg kell adnod pár adatot, információt, és létrehoz egy accountot\r\nneked. Gyakorlatilag minden interaktív tevékenységhez a SourceForge-on\r\nszükséged lesz rá. \r\nMiután ez megvan, bármikor bejelentkezhetsz ezzel a felhasználóval a\r\nfõoldalon a &quot;Login via SSL&quot; link segítségével.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Miután bejelentkeztél, kapsz egy személyes lapot: az\r\nösszes projectet kilistázza, amiben benne vagy, néhány egyéb infóval\r\negyütt.\r\nAz oldal szélén fel van sorolva pár lehetõség, és ott van egy, ami\r\nmost minket különösen érdekel: a &quot;Register New Project&quot;...\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;2. Egy új project létrehozása az elsõ lépésben\r\nlétrehozott userrel. &lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A &quot;Register New Project&quot; linkre klikkelve egy\r\nlapsorozathoz jutsz, amin csak szimplán végig kell menned, megadva az\r\nösszes kért információt. Eléggé magától értetõdõ és jól megcsinált ez a rész, \r\nehhez nem nagyon kell további magyarázat.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Ha ezzel megvagy, az adatokat megkapja valaki a\r\nSourceForge-tól, átnézik, hogy a projected belefér-e a SourceForge\r\ncéljaiba. Még nem hallottam olyanról, amit visszautasítottak volna, szóval\r\nne aggódj, ha nyílt forrású és szabad licenszelésû, szerintem hamar el\r\nfogják fogadni.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Most várj, és remélhetõleg 24 órán belül választ\r\nkapsz. (Ha több idõbe kerülne, írj nekik - volt pár probléma az új\r\nprojectekkel, de szerintem már kijavították õket.)\r\nHa minden jól megy, értesítenek, hogy a projected felrakták,\r\njelentkezz hát be SSL-el, és a személyes lapod alján ott lesz a link\r\naz új projected lapjára.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;3. A csapat- és projectinformációk beállítása.&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Klikkelj arra a linkre! A csapat SourceForge lapjára\r\njutsz (ez nem egyezik meg a weboldalával), itt lesz egy sor opció,\r\namelyekkel meg tudsz változtatni dolgokat, gyakorlatilag így tudod\r\nadminisztrálni a projected.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Mid van eddig?\r\n;&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;egy weboldal a http://ateprojected.sourceforge.net\r\ncímen,&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;egy  CVS repository a\r\ncvs.ateprojected.sourceforge.net:/cvsroot/ateprojected címen\r\n,&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;anonymous FTP az ateprojected.sourceforge.net címen,&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;és hozzáférés levelezõlistákhoz, amivel majd késõbb\r\nfoglalkozunk.&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Az elsõ beírandó dolog, az a projected leírása a\r\ncsapat oldalához. Klikkelj a &quot;Project Admin&quot;, utána meg az &quot;Edit Group\r\npublic Information and Categorisation&quot; linkre! Írd be a megfelelõ\r\ndolgokat a mezõkbe!\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A következõ kérdés, hogy vannak-e már magadon kívül\r\nfejlesztõid? Ha igen, mindannyiukniak be kell jelentkezniük\r\nfelhasználóként a SourceForge-ra, és szükséged lesz a\r\nfelhasználó-nevükre. A nevek alapján tudod hozzáadni õket a fejleszõid\r\nlistájához, írási jogosultságot adva ezzel a csapat CVS és\r\nweboldalára. Ehhez menj vissza a &quot;Project Admin&quot;\r\nrészhez, klikkelj az &quot;Add Group Member&quot; linkre, írd be a neveiket, és\r\nezzel kész is vagy.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A csapat oldalán körbenézhetsz, hogy mi minden van\r\nmég, szerintem a legfontosabbakkal már megvagyunk. Itt az idõ, hogy\r\nkirakjuk a forrást valahova, ahol mindenki elérheti...\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;4. Egy CVS repository \r\nlétrehozása a forrásod legújabb változatával.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Azoknak (mint én is), akiknek az internetes fejleszés\r\nmég új dolog, egy kis idõbe fog telni a CVS-hez hozzászokni. A\r\nkezdõknek itt van egy rövid leírás, hogy mit csinál és hogyan:\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Egy recordot õriz az összes változtatásáról a\r\nforráskódnak, a változtatáshoz kapcsolódó megjegyzésekkel együtt.\r\nBármikor megtalálhatod bármelyik korábbi verziót a repository-ban.\r\nLehetõvé teszi, hogy több ember dolgozzon ugyanazokon a fileokon\r\negyidõben, egyesítve a változtatásokat, amiket hozzáadnak.\r\nFigyelmeztet (elég világosan, hozzá kell tennem), ha a változások valamiért \r\nütköznek, és így biztos, hogy a különbséget valaki fejlesztõ\r\nészreveszi, mielõtt a file újabb verziója a repository-ba kerülhetne. \r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Ez király egy dolog, de beletelik egy kis idõbe, mire\r\nhozzászokik az ember. Alapvetõen így megy a fejlesztés:\r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(1) Beimportálod az összes forrásod a CVS-be, aztán\r\nmindenki leszed (&quot;check out&quot;-ol) egy másolatot belõle, amin \r\ndolgozni fog.\r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(2) Minden fejlesztõ a saját gépén, kényelmesen\r\ndolgozik, és ha van egy mûködõ, új hozzáadandó dolguk, frissítik\r\n(&quot;update&quot;-elik) a helyi változatukat, hogy a központi, legfrissebb\r\nváltozattal annyira összhangban legyen, amennyire csak lehet, és utána\r\nvisszaküldik (&quot;commit&quot;-olják) a file-t, amit megváltoztattak a\r\nrepository-ba.\r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(3) Bármilyen gondja van a CVS-nek az új változat\r\nfelküldésekor, szól, és akkor végig kell menned a problémás fileokon,\r\nés el kell döntened a változtatásokat kézzel. A fileokban a\r\nmegváltoztatott rész &gt;&gt;&gt;&gt;&gt; -el van kiemelve, és mindkét verziót\r\nmutatja. Egyszerûen csak töröld ki a régit (vagy módosítsd, hogy úgy\r\nmûködjön, ahogy kell), és újra küldd föl a filet. Ha a CVS-nek már\r\nnincsenek további gondjai, térj vissza a kettes ponthoz, és\r\nfolytasd a programozást!\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Nos, tehát a forrásod a SourceForge-os CVS-be való\r\nfeltöltésének a részletei... Elõször is, olvasd el a CVS-rõl szóló SF\r\nleírást. Ha valami nem tiszta, beleolvashatsz az ingyenes 180 oldalas\r\n&lt;A HREF=&quot;http://cvsbook.red-bean.com&quot;&gt;CVS\r\nkönyvbe&lt;/A&gt;. Aztán lássunk hozzá:&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Keríts &lt;A HREF=&quot;http://www.ssh.fi&quot;&gt;SSH-t&lt;/A&gt; és CVS-t\r\naz általad használt platformra. Ha Linuxot es Bash-t használsz, ezeket\r\nírd be:\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;export CVS_RSH=ssh&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;export\r\nCVSROOT=loginname at cvs.ateprojected.sourceforge.net:/cvsroot/ateprojected&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Az elsõ sor mondja meg a CVS-nek, hogy SSH-t\r\nhasználjon a CVS-hez való kapcsolódáshoz. Erre biztonsági okokból van\r\nszükség. A második sor meg azt adja meg neki, hogy hol keresse a\r\nrepository-ját.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Nos, a legvalószínûbb szituáció az, hogy van pár\r\nforrásod egy könyvtárfában, amit fel akarsz tölteni (importálni) a\r\nCVS-be. Ment a legfelsõ könyvtárba, amit fel akarsz tölteni, és írd be\r\na következõt (értelemszerûen módosítva) :\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;cvs import konyvtarnev vendor start&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A könyvtárnév az a név, amivel ezt a forrásfát késõbb\r\na CVS-ben elérheted. Ha minden jól megy, meg fogja kérdezni a\r\nSourceForge user-jelszavad, és utána szépen sorban feltölti az egész\r\nforrásfád.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Következõnek, mentsd el a régi kódot valahova, mert\r\nnem akarsz már többet azzal dolgozni, és szedjél le (&quot;chekout&quot; -olj)\r\negy friss változatot a CVS-bõl a \r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;cvs checkout konyvtarnev&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;parancs segítségével. Ezzel kapsz egy &quot;munkapéldányt&quot;\r\na forrásból, CVS formában, amin aztán dolgozhatsz. Amire figyelned\r\nkell azért, hogy minden változtatást, új file vagy könyvtár\r\nhozzáadását vagy törlését külön meg kell mondanod a CVS-nek - olvasd\r\nel a fent említett könyvet a részletekhez.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;5. A project weboldalának a létrehozása.&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Tegyük fel, hogy már van valamilyen weboldalad készen,\r\namit felrakhatsz a SourceForge-ra, hogy legyen valamiféle külsõ arca a\r\nprojectnek. Jelentkezz be a SourceForge-ra SSH-val, pl.:\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;ssh -l loginnev ateprojected.sourceforge.net&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A saját home könyvtáradba kerülsz így. Innen az\r\nösszes csapat-file-t a /home/groups/ateprojected könyvtárban érheted\r\nel. Lépj át ide! Az összes weboldalad a htdocs könyvtárban van. Oda\r\nbenézve, csak az index.php-t tartalmazza, ami egy üres oldal, ami\r\nközli, hogy még nem töltöttél fel weboldalt. Jelentkezz ki, és másold\r\nfel a fileokat a weboldaladhoz scp-vel (egy program, az ssh-val együtt\r\nfelraktad valószínûleg). \r\nPl.:&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;scp helyifile&amp;nbsp;&amp;nbsp;\r\nloginnev at shell.sourceforge.net:/home/groups/ateprojected/htdocs&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A legcélszerûbb, ha össze-gzippeled az oldalad, egy\r\nmenetben feltöltöd scp-vel, aztán bejelentkezel ssh-val és ott\r\nhelyben kibontod. \r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Nos, mi is legyen a weboldalon? A projectrõl szóló információkon kívül talán még ezek: \r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(1) Egy link a csapat SourceForge oldalára &lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(2) Link a levelezõlistá(k)ra (mindjárt létrehozzuk õket)&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(3) Egy SourceForge ikon és web-számláló - ezzel kapcsolatban lásd a SF dokumentációt. \r\n&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(4) Egy link a webes CVS felületre (http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=ateprojected) &lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;(5) Pár infó a CVS használatáról a projectedre vonatkozóan. &lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;6. Levelezõlista létrehozása.&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Ha a projected még nem túl aktív (vagy csak egy magányos fejleszõje van), a levelezõlistáid nagyon csendesek lesznek, de azért az javaslom, gondolj a jõvõre, és hozz létre három sztandard listát a projectednek: egy fejleszõi listát a fejlesztõknek, egy felhasználói listát a usereknek, és egy hirdetési listát az új verziók meghirdetésére.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Ezt a csapat oldalán keresztül teheted meg a &quot;Mailing list Admin&quot; link segítségével. Ez elég egyszerû, nem hiszem hogy lenne bármi gond vele...\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;7. És végül, szokd meg a CVS használatát a fejlesztésben, és láss munkához! \r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Adok pár tippet a fejleszés menetérõl, hogy hogyan láss neki, de persze lesznek dolgok, amiknek neked kell utánajárnod.\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A munkapéldányod frissítéséhez, a CVS repository-val való összhangba hozásához:\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;cvs -z3 update -Pd&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;(persze miután a leírtak szerint beállítottad a CVSROOT és CVS_RSH változókat)&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;A változtatások hozzáadásához:&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;cvs commit -m &quot;megjegyzés a változtatásokról&quot; filenév&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;Egy új file hozzáadásához:&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;cvs add filenév&lt;/FONT&gt;\r\n&lt;BR&gt;&lt;FONT SIZE=+1&gt;cvs commit -m &quot;filenév hozzáadva&quot; filenév&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;...és már készen is állsz!&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+2&gt;És még pár dolog, amire szükséged lehet:&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;8. Hozz létre egy file modult, hogy láthassák a munkádat!&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;9. Olvasd végig a SourceForge dokumentációt és a help-fórumokat!\r\n&lt;/FONT&gt;&lt;FONT SIZE=+1&gt;&lt;/FONT&gt;\r\n&lt;P&gt;&lt;FONT SIZE=+1&gt;A homepage-rõl. Erõsen javasolt.&lt;/FONT&gt;&lt;br&gt;\r\n&lt;A HREF=&quot;http://gyp.dunanet.hu/newproject-howto-hun.php&quot;&gt;Alternate URL&lt;/A&gt;\r\n\r\n',968797330,968795156,1458,807,'     ');
+INSERT INTO doc_data VALUES (776,1,'Hosting Primary / Secondary DNS','&lt;b&gt;Hosting Primary / Secondary DNS&lt;/b&gt;&lt;P&gt;\r\nHosting Primary/Secondary DNS SourceForge is not hosting the Primary/Secondary DNS servers for projects just yet. We can arrange the\r\nwebserver to answer for your domain via HTTP. Point a CNAME for the hosts that you wish the webserver to respond for to shell1.sourceforge.net.\r\nAfter this is done, submit a support request to have the webserver respond for this domain. \r\n&lt;P&gt;\r\nIf you have any problems, please let the SourceForge staff &lt;a href=&quot;http://sourceforge.net/support/?func=addsupport&amp;group_id=1&quot;&gt;know. &lt;/a&gt;',968796850,968794153,1458,808,'We can answer for your domain via HTTP');
+INSERT INTO doc_data VALUES (777,1,'Responding for www.mydomain.org','&lt;b&gt;Responding for www.mydomain.org \r\n&lt;P&gt;&lt;/b&gt;\r\nThe httpd.conf on our end can be configured to answer for your domain. Ensure that yourdomain.org or www.yourdomain.org is a CNAME to\r\nshell1.sourceforge.net (198.186.203.36) NOT your projectname.sourceforge.net (198.186.203.44). Then submit a support request to have this added to\r\nour configuration. \r\n&lt;P&gt;\r\nFTP.yourdomain.org may point to download.sourceforge.net at any time. \r\n&lt;P&gt;\r\ncvs.yourdomain.org may point to cvs1.sourceforge.net at any time. \r\n&lt;P&gt;\r\nYou may &lt;a href=&quot;http://sourceforge.net/support/?func=addsupport&amp;group_id=1&quot;&gt;request&lt;/a&gt; to have the server answer for the domain, prior to you delegating the hosts to us to ensure minimal downtime. ',968796857,968794208,1458,808,'We can do this');
+INSERT INTO doc_data VALUES (789,1,'Using Webalizer','You can use webalizer on your subdomain web server logs.\r\n&lt;P&gt;\r\nFor more information, visit: http://mars.bingo-ev.de/webalizer-howto/webalizer-howto.html',968796883,968795449,1458,808,'Crunch your project\'s apache logs ');
+INSERT INTO doc_data VALUES (790,1,'Displaying the SourceForge logo on your web page','   &lt;p&gt; &lt;B&gt;Displaying the SourceForge Logo&lt;/B&gt;\r\n\r\n&lt;P&gt;We ask that all projects hosted on SourceForge display a small\r\nSourceForge logo on their homepage.\r\n\r\n&lt;P&gt;The display of this logo serves two purposes. First, it drives\r\ntraffic to SourceForge, and ultimately back to the Open Source\r\nprojects that we host. SourceForge has a lot of potential for\r\n&quot;cross linking&quot; many OpenSource projects, and the logo display\r\nfacilitates this.\r\n\r\n&lt;P&gt;Second, when the logo is displayed, a log entry is generated\r\nfor your project that allows us to track hits to each of our hosted\r\nprojects. This information will be compiled and presented to\r\nour users in &quot;top&quot; activity lists for hosted projects. This will\r\nalso help us to identify projects that may require additional hosting\r\nresources due to large amounts of activity. \r\n\r\n&lt;P&gt;Please use the following URL to place the graphic on your page:\r\n&lt;BR&gt;&lt;B&gt;http://sourceforge.net/sflogo.php?group_id=0&amp;type=1&lt;/B&gt;\r\n\r\n\r\n&lt;P&gt;In anchor and image tags, this would appear as follows:\r\n&lt;BR&gt;&lt;B&gt;&amp;lt;A href=&quot;http://sourceforge.net&quot;&amp;gt;\r\n&lt;BR&gt;&amp;lt;IMG src=&quot;http://sourceforge.net/sflogo.php?group_id=0&amp;type=1&quot;\r\n\r\nwidth=&quot;88&quot; height=&quot;31&quot; border=&quot;0&quot; alt=&quot;SourceForge Logo&quot;&amp;gt; &amp;lt;/A&amp;gt;\r\n&lt;/B&gt;\r\n\r\n&lt;P&gt;&lt;B&gt;&lt;I&gt;Important!&lt;/I&gt;&lt;/B&gt; Substitute the number after &quot;group_id&quot;\r\n(currently 0)\r\nwith your own project/group number, which is displayed at the top\r\nof your project page on SourceForge.\r\n\r\n&lt;P&gt;This is the image that we now display:\r\n&lt;P&gt;&lt;IMG src=&quot;/sflogo.php?group_id=873&amp;type=1&quot;\r\nwidth=&quot;88&quot; height=&quot;31&quot; alt=&quot;SourceForge Logo&quot;&gt;\r\n&lt;P&gt;Please email &lt;A href=&quot;mailto:staff at sourceforge.net&quot;&gt;staff at sourceforge.net&lt;/A&gt;\r\nwith any questions you may have.',968879782,968795499,1458,808,'If we host your subdomain, please display our logo');
+INSERT INTO doc_data VALUES (792,1,'Using anonymous FTP space','&lt;b&gt;Using anonymous FTP space \r\n&lt;P&gt;&lt;/b&gt;\r\nAnonymous FTP access is available for all projects on SourceForge. This is generally to be used for stuff like developer-only releases, etc. which\r\ncannot be released as a module. Heck, you can put anything here. \r\n&lt;P&gt;\r\nIt\'s easy to use this space. Your project\'s public FTP directory is on shell1.sourceforge.net at: /home/groups/ftp/pub/yourprojectname and everything\r\nin that directory is available to anonymous FTP users. \r\n&lt;P&gt;\r\nPeople can FTP anonymously (login as &quot;ftp&quot; or &quot;anonymous&quot; and give your e-mail address as the password) to yourprojectname.sourceforge.net and\r\ndownload files from the /pub/yourprojectname directory, i.e., \r\n&lt;P&gt;\r\nftp://yourproject.sourceforge.net/pub/yourprojectname \r\n&lt;P&gt;\r\nHow to put stuff in the directory? Simple! SCP your files to shell1. \r\n&lt;P&gt;\r\nscp filename.tar.gz yourusername at shell1.sourceforge.net:/home/groups/ftp/pub/yourprojectname \r\n\r\n',968796877,968795601,1458,808,'Share your files');
+

Added: trunk/gforge_base/evolvisforge/gforge/db/trove_cat.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/db/trove_cat.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/db/trove_cat.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,305 @@
+1	2000031601	0	0	audience	Intended Audience	The main class of people likely to be interested in this resource.	0	0	Intended Audience	1
+2	2000032401	1	1	endusers	End Users/Desktop	Programs and resources for software end users. Software for the desktop.	0	0	Intended Audience :: End Users/Desktop	1 :: 2
+3	2000041101	1	1	developers	Developers	Programs and resources for software developers, to include libraries.	0	0	Intended Audience :: Developers	1 :: 3
+4	2000031601	1	1	sysadmins	System Administrators	Programs and resources for people who administer computers and networks.	0	0	Intended Audience :: System Administrators	1 :: 4
+5	2000040701	1	1	other	Other Audience	Programs and resources for an unlisted audience.	0	0	Intended Audience :: Other Audience	1 :: 5
+6	2000031601	0	0	developmentstatus	Development Status	An indication of the development status of the software or resource.	0	0	Development Status	6
+7	2000040701	6	6	planning	1 - Planning	This resource is in the planning stages only. There is no code.	0	0	Development Status :: 1 - Planning	6 :: 7
+8	2000040701	6	6	prealpha	2 - Pre-Alpha	There is code for this project, but it is not usable except for further development.	0	0	Development Status :: 2 - Pre-Alpha	6 :: 8
+9	2000041101	6	6	alpha	3 - Alpha	Resource is in early development, and probably incomplete and/or extremely buggy.	0	0	Development Status :: 3 - Alpha	6 :: 9
+10	2000040701	6	6	beta	4 - Beta	Resource is in late phases of development. Deliverables are essentially complete, but may still have significant bugs.	0	0	Development Status :: 4 - Beta	6 :: 10
+11	2000040701	6	6	production	5 - Production/Stable	Deliverables are complete and usable by the intended audience.	0	0	Development Status :: 5 - Production/Stable	6 :: 11
+12	2000040701	6	6	mature	6 - Mature	This resource has an extensive history of successful use and has probably undergone several stable revisions.	0	0	Development Status :: 6 - Mature	6 :: 12
+13	2000031601	0	0	license	License	License terms under which the resource is distributed.	0	0	License	13
+197	2000032001	13	13	publicdomain	Public Domain	Public Domain. No author-retained rights.	0	0	License :: Public Domain	13 :: 197
+196	2000040701	13	13	other	Other/Proprietary License	Non OSI-Approved/Proprietary license.	0	0	License :: Other/Proprietary License	13 :: 196
+14	2000032401	13	13	osi	OSI Approved	Licenses that have been approved by OSI as approved	0	0	License :: OSI Approved	13 :: 14
+303	2001041701	14	13	nethack	Nethack General Public License	Nethack General Public License	0	0	License :: OSI Approved :: Nethack General Public License	13 :: 14 :: 303
+141	2000032001	136	18	clustering	Clustering/Distributed Networks	Tools for automatically distributing computation across a network.	0	0	Topic :: System :: Clustering/Distributed Networks	18 :: 136 :: 141
+139	2000032001	136	18	boot	Boot	Programs for bootstrapping your OS.	0	0	Topic :: System :: Boot	18 :: 136 :: 139
+140	2000032001	139	18	init	Init	Init-time programs to start system services after boot.	0	0	Topic :: System :: Boot :: Init	18 :: 136 :: 139 :: 140
+138	2000032001	136	18	benchmark	Benchmark	Programs for benchmarking system performance.	0	0	Topic :: System :: Benchmark	18 :: 136 :: 138
+74	2000042701	136	18	emulators	Emulators	Emulations of foreign operating systme and machines.	0	0	Topic :: System :: Emulators	18 :: 136 :: 74
+19	2000032001	136	18	archiving	Archiving	Tools for maintaining and searching software or document archives.	0	0	Topic :: System :: Archiving	18 :: 136 :: 19
+137	2000032001	19	18	backup	Backup	Programs to manage and sequence system backup.	0	0	Topic :: System :: Archiving :: Backup	18 :: 136 :: 19 :: 137
+42	2000031601	19	18	compression	Compression	Tools and libraries for data compression.	0	0	Topic :: System :: Archiving :: Compression	18 :: 136 :: 19 :: 42
+41	2000031601	19	18	packaging	Packaging	Tools for packing and unpacking multi-file formats. Includes data-only formats and software package systems.	0	0	Topic :: System :: Archiving :: Packaging	18 :: 136 :: 19 :: 41
+132	2000032001	18	18	religion	Religion	Programs relating to religion and sacred texts.	0	0	Topic :: Religion	18 :: 132
+129	2000031701	18	18	office	Office/Business	Software for assisting and organizing work at your desk.	0	0	Topic :: Office/Business	18 :: 129
+131	2000032001	129	18	suites	Office Suites	Integrated office suites (word processing, presentation, spreadsheet, database, etc).	0	0	Topic :: Office/Business :: Office Suites	18 :: 129 :: 131
+130	2000031701	129	18	scheduling	Scheduling	Projects for scheduling time, to include project management.	0	0	Topic :: Office/Business :: Scheduling	18 :: 129 :: 130
+75	2000031701	129	18	financial	Financial	Programs related to finance.	0	0	Topic :: Office/Business :: Financial	18 :: 129 :: 75
+79	2000031601	75	18	pointofsale	Point-Of-Sale	Point-Of-Sale applications.	0	0	Topic :: Office/Business :: Financial :: Point-Of-Sale	18 :: 129 :: 75 :: 79
+78	2000031601	75	18	spreadsheet	Spreadsheet	Spreadsheet applications.	0	0	Topic :: Office/Business :: Financial :: Spreadsheet	18 :: 129 :: 75 :: 78
+77	2000031601	75	18	investment	Investment	Programs for assisting in financial investment.	0	0	Topic :: Office/Business :: Financial :: Investment	18 :: 129 :: 75 :: 77
+76	2000031601	75	18	accounting	Accounting	Checkbook balancers and accounting programs.	0	0	Topic :: Office/Business :: Financial :: Accounting	18 :: 129 :: 75 :: 76
+234	2000040701	18	18	other	Other/Nonlisted Topic	Topic does not fit into any listed category.	0	0	Topic :: Other/Nonlisted Topic	18 :: 234
+156	2000032001	18	18	terminals	Terminals	Terminal emulators, terminal programs, and terminal session utilities.	0	0	Topic :: Terminals	18 :: 156
+159	2000032001	156	18	telnet	Telnet	Support for telnet; terminal sessions across Internet links.	0	0	Topic :: Terminals :: Telnet	18 :: 156 :: 159
+158	2000032001	156	18	virtual	Terminal Emulators/X Terminals	Programs to handle multiple terminal sessions. Includes terminal emulations for X and other window systems.	0	0	Topic :: Terminals :: Terminal Emulators/X Terminals	18 :: 156 :: 158
+157	2000032001	156	18	serial	Serial	Dialup, terminal emulation, and file transfer over serial lines.	0	0	Topic :: Terminals :: Serial	18 :: 156 :: 157
+115	2000031701	113	18	capture	Capture/Recording	Sound capture and recording.	0	0	Topic :: Multimedia :: Sound/Audio :: Capture/Recording	18 :: 99 :: 113 :: 115
+114	2000031701	113	18	analysis	Analysis	Sound analysis tools, to include frequency analysis.	0	0	Topic :: Multimedia :: Sound/Audio :: Analysis	18 :: 99 :: 113 :: 114
+100	2000031601	99	18	graphics	Graphics	Tools and resources for computer graphics.	0	0	Topic :: Multimedia :: Graphics	18 :: 99 :: 100
+112	2000031701	100	18	viewers	Viewers	Programs that can display various graphics formats.	0	0	Topic :: Multimedia :: Graphics :: Viewers	18 :: 99 :: 100 :: 112
+111	2000031701	100	18	presentation	Presentation	Tools for generating presentation graphics and slides.	0	0	Topic :: Multimedia :: Graphics :: Presentation	18 :: 99 :: 100 :: 111
+110	2000031701	100	18	3drendering	3D Rendering	Programs which render 3D models.	0	0	Topic :: Multimedia :: Graphics :: 3D Rendering	18 :: 99 :: 100 :: 110
+109	2000031701	100	18	3dmodeling	3D Modeling	Programs for working with 3D Models.	0	0	Topic :: Multimedia :: Graphics :: 3D Modeling	18 :: 99 :: 100 :: 109
+106	2000031701	100	18	editors	Editors	Drawing, painting, and structured editing programs.	0	0	Topic :: Multimedia :: Graphics :: Editors	18 :: 99 :: 100 :: 106
+108	2000031701	106	18	raster	Raster-Based	Raster/Bitmap based drawing programs.	0	0	Topic :: Multimedia :: Graphics :: Editors :: Raster-Based	18 :: 99 :: 100 :: 106 :: 108
+107	2000031701	106	18	vector	Vector-Based	Vector-Based drawing programs.	0	0	Topic :: Multimedia :: Graphics :: Editors :: Vector-Based	18 :: 99 :: 100 :: 106 :: 107
+105	2000031701	100	18	conversion	Graphics Conversion	Programs which convert between graphics formats.	0	0	Topic :: Multimedia :: Graphics :: Graphics Conversion	18 :: 99 :: 100 :: 105
+101	2000031601	100	18	capture	Capture	Support for scanners, cameras, and screen capture.	0	0	Topic :: Multimedia :: Graphics :: Capture	18 :: 99 :: 100 :: 101
+104	2000031601	101	18	screencapture	Screen Capture	Screen capture tools and processors.	0	0	Topic :: Multimedia :: Graphics :: Capture :: Screen Capture	18 :: 99 :: 100 :: 101 :: 104
+103	2000031601	101	18	cameras	Digital Camera	Digital Camera	0	0	Topic :: Multimedia :: Graphics :: Capture :: Digital Camera	18 :: 99 :: 100 :: 101 :: 103
+102	2000031601	101	18	scanners	Scanners	Support for graphic scanners.	0	0	Topic :: Multimedia :: Graphics :: Capture :: Scanners	18 :: 99 :: 100 :: 101 :: 102
+154	2000032001	18	18	printing	Printing	Tools, daemons, and utilities for printer control.	0	0	Topic :: Printing	18 :: 154
+136	2000032001	18	18	system	System	Operating system core and administration utilities.	0	0	Topic :: System	18 :: 136
+294	2001032001	136	18	shells	System Shells	System Shells	0	0	Topic :: System :: System Shells	18 :: 136 :: 294
+257	2000071101	136	18	softwaredist	Software Distribution	Systems software for distributing other software.	0	0	Topic :: System :: Software Distribution	18 :: 136 :: 257
+253	2000071101	136	18	sysadministration	Systems Administration	Systems Administration Software (e.g. configuration apps.)	0	0	Topic :: System :: Systems Administration	18 :: 136 :: 253
+289	2001032001	253	18	authentication	Authentication/Directory	Authentication and directory services	0	0	Topic :: System :: Systems Administration :: Authentication/Directory	18 :: 136 :: 253 :: 289
+291	2001032001	289	18	ldap	LDAP	Leightweight directory access protocol	0	0	Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP	18 :: 136 :: 253 :: 289 :: 291
+290	2001032001	289	18	nis	NIS	NIS services	0	0	Topic :: System :: Systems Administration :: Authentication/Directory :: NIS	18 :: 136 :: 253 :: 289 :: 290
+153	2000032001	136	18	power	Power (UPS)	Code for communication with uninterruptible power supplies.	0	0	Topic :: System :: Power (UPS)	18 :: 136 :: 153
+150	2000032001	136	18	networking	Networking	Network configuration and administration.	0	0	Topic :: System :: Networking	18 :: 136 :: 150
+152	2000032001	150	18	monitoring	Monitoring	System monitoring, traffic analysis, and sniffers.	0	0	Topic :: System :: Networking :: Monitoring	18 :: 136 :: 150 :: 152
+155	2000032001	152	18	watchdog	Hardware Watchdog	Software to monitor and perform actions or shutdown on hardware trouble detection.	0	0	Topic :: System :: Networking :: Monitoring :: Hardware Watchdog	18 :: 136 :: 150 :: 152 :: 155
+151	2000032001	150	18	firewalls	Firewalls	Firewalls and filtering systems.	0	0	Topic :: System :: Networking :: Firewalls	18 :: 136 :: 150 :: 151
+148	2000032001	136	18	logging	Logging	Utilities for clearing, rotating, and digesting system logs.	0	0	Topic :: System :: Logging	18 :: 136 :: 148
+147	2000032001	136	18	setup	Installation/Setup	Tools for installation and setup of the operating system and other programs.	0	0	Topic :: System :: Installation/Setup	18 :: 136 :: 147
+146	2000032001	136	18	hardware	Hardware	Tools for direct, non-kernel control and configuration of hardware.	0	0	Topic :: System :: Hardware	18 :: 136 :: 146
+292	2001032001	146	18	drivers	Hardware Drivers	Hardware Drivers	0	0	Topic :: System :: Hardware :: Hardware Drivers	18 :: 136 :: 146 :: 292
+144	2000032001	136	18	kernels	Operating System Kernels	OS Kernels, patches, modules, and tools.	0	0	Topic :: System :: Operating System Kernels	18 :: 136 :: 144
+239	2000041301	144	18	gnuhurd	GNU Hurd	Kernel code and modules for GNU Hurd.	0	0	Topic :: System :: Operating System Kernels :: GNU Hurd	18 :: 136 :: 144 :: 239
+145	2000032001	144	18	bsd	BSD	Code relating to any of the BSD kernels.	0	0	Topic :: System :: Operating System Kernels :: BSD	18 :: 136 :: 144 :: 145
+143	2000032001	144	18	linux	Linux	The Linux kernel, patches, and modules.	0	0	Topic :: System :: Operating System Kernels :: Linux	18 :: 136 :: 144 :: 143
+142	2000032001	136	18	filesystems	Filesystems	Support for creating, editing, reading, and writing file systems.	0	0	Topic :: System :: Filesystems	18 :: 136 :: 142
+287	2001032001	80	18	boardgames	Board Games	Board Games	0	0	Topic :: Games/Entertainment :: Board Games	18 :: 80 :: 287
+268	2000082101	80	18	Puzzles	Puzzle Games	Puzzle Games	0	0	Topic :: Games/Entertainment :: Puzzle Games	18 :: 80 :: 268
+86	2000031601	80	18	mud	Multi-User Dungeons (MUD)	Massively-multiplayer text based games.	0	0	Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)	18 :: 80 :: 86
+85	2000031601	80	18	simulation	Simulation	Simulation games	0	0	Topic :: Games/Entertainment :: Simulation	18 :: 80 :: 85
+84	2000031601	80	18	rpg	Role-Playing	Role-Playing games	0	0	Topic :: Games/Entertainment :: Role-Playing	18 :: 80 :: 84
+83	2000032401	80	18	turnbasedstrategy	Turn Based Strategy	Turn Based Strategy	0	0	Topic :: Games/Entertainment :: Turn Based Strategy	18 :: 80 :: 83
+82	2000031601	80	18	firstpersonshooters	First Person Shooters	First Person Shooters.	0	0	Topic :: Games/Entertainment :: First Person Shooters	18 :: 80 :: 82
+81	2000031601	80	18	realtimestrategy	Real Time Strategy	Real Time strategy games	0	0	Topic :: Games/Entertainment :: Real Time Strategy	18 :: 80 :: 81
+288	2001032001	80	18	sidescrolling	Side-Scrolling/Arcade Games	Arcade-style side-scrolling games	0	0	Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games	18 :: 80 :: 288
+71	2000031601	18	18	education	Education	Programs and tools for educating yourself or others.	0	0	Topic :: Education	18 :: 71
+73	2000031601	71	18	testing	Testing	Tools for testing someone's knowledge on a subject.	0	0	Topic :: Education :: Testing	18 :: 71 :: 73
+72	2000031601	71	18	cai	Computer Aided Instruction (CAI)	Programs for authoring or using Computer Aided Instrution courses.	0	0	Topic :: Education :: Computer Aided Instruction (CAI)	18 :: 71 :: 72
+66	2000031601	18	18	database	Database	Front ends, engines, and tools for database work.	0	0	Topic :: Database	18 :: 66
+68	2000031601	66	18	frontends	Front-Ends	Clients and front-ends for generating queries to database engines.	0	0	Topic :: Database :: Front-Ends	18 :: 66 :: 68
+67	2000031601	66	18	engines	Database Engines/Servers	Programs that manage data and provide control via some query language.	0	0	Topic :: Database :: Database Engines/Servers	18 :: 66 :: 67
+63	2000032001	18	18	editors	Text Editors	Programs for editing code and documents.	0	0	Topic :: Text Editors	18 :: 63
+285	2001032001	63	18	textprocessing	Text Processing	Programs or libraries that are designed to batch process text documents	0	0	Topic :: Text Editors :: Text Processing	18 :: 63 :: 285
+70	2000031601	63	18	wordprocessors	Word Processors	WYSIWYG word processors.	0	0	Topic :: Text Editors :: Word Processors	18 :: 63 :: 70
+69	2000031601	63	18	documentation	Documentation	Tools for the creation and use of documentation.	0	0	Topic :: Text Editors :: Documentation	18 :: 63 :: 69
+65	2000031601	63	18	ide	Integrated Development Environments (IDE)	Complete editing environments for code, including cababilities such as compilation and code building assistance.	0	0	Topic :: Text Editors :: Integrated Development Environments (IDE)	18 :: 63 :: 65
+64	2000031601	63	18	emacs	Emacs	GNU Emacs and its imitators and tools.	0	0	Topic :: Text Editors :: Emacs	18 :: 63 :: 64
+125	2000031701	99	18	video	Video	Video capture, editing, and playback.	0	0	Topic :: Multimedia :: Video	18 :: 99 :: 125
+126	2000031701	125	18	capture	Capture	Video capture tools.	0	0	Topic :: Multimedia :: Video :: Capture	18 :: 99 :: 125 :: 126
+256	2000071101	125	18	nonlineareditor	Non-Linear Editor	Video Non-Linear Editors	0	0	Topic :: Multimedia :: Video :: Non-Linear Editor	18 :: 99 :: 125 :: 256
+128	2000031701	125	18	display	Display	Programs which display various video formats.	0	0	Topic :: Multimedia :: Video :: Display	18 :: 99 :: 125 :: 128
+127	2000031701	125	18	conversion	Conversion	Programs which convert between video formats.	0	0	Topic :: Multimedia :: Video :: Conversion	18 :: 99 :: 125 :: 127
+113	2000031701	99	18	sound	Sound/Audio	Tools for generating, editing, analyzing, and playing sound.	0	0	Topic :: Multimedia :: Sound/Audio	18 :: 99 :: 113
+249	2000042801	113	18	synthesis	Sound Synthesis	Software for creation and synthesis of sound.	0	0	Topic :: Multimedia :: Sound/Audio :: Sound Synthesis	18 :: 99 :: 113 :: 249
+248	2000042801	113	18	midi	MIDI	Software related to MIDI synthesis and playback.	0	0	Topic :: Multimedia :: Sound/Audio :: MIDI	18 :: 99 :: 113 :: 248
+124	2000031701	113	18	speech	Speech	Speech manipulation and intepretation tools.	0	0	Topic :: Multimedia :: Sound/Audio :: Speech	18 :: 99 :: 113 :: 124
+122	2000031701	113	18	players	Players	Programs to play audio files to a sound device.	0	0	Topic :: Multimedia :: Sound/Audio :: Players	18 :: 99 :: 113 :: 122
+123	2000031701	122	18	mp3	MP3	Programs to play MP3 audio files.	0	0	Topic :: Multimedia :: Sound/Audio :: Players :: MP3	18 :: 99 :: 113 :: 122 :: 123
+121	2000031701	113	18	mixers	Mixers	Programs to mix audio.	0	0	Topic :: Multimedia :: Sound/Audio :: Mixers	18 :: 99 :: 113 :: 121
+120	2000031701	113	18	editors	Editors	Programs to edit/manipulate sound data.	0	0	Topic :: Multimedia :: Sound/Audio :: Editors	18 :: 99 :: 113 :: 120
+119	2000031701	113	18	conversion	Conversion	Programs to convert between audio formats.	0	0	Topic :: Multimedia :: Sound/Audio :: Conversion	18 :: 99 :: 113 :: 119
+116	2000031701	113	18	cdaudio	CD Audio	Programs to play and manipulate audio CDs.	0	0	Topic :: Multimedia :: Sound/Audio :: CD Audio	18 :: 99 :: 113 :: 116
+88	2000031601	87	18	finger	Finger	The Finger protocol for getting information about users.	0	0	Topic :: Internet :: Finger	18 :: 87 :: 88
+118	2000031701	116	18	cdripping	CD Ripping	Software to convert CD Audio to other digital formats.	0	0	Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping	18 :: 99 :: 113 :: 116 :: 118
+117	2000031701	116	18	cdplay	CD Playing	CD Playing software, to include jukebox software.	0	0	Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing	18 :: 99 :: 113 :: 116 :: 117
+260	2000071401	52	18	SCCS	SCCS	SCCS	0	0	Topic :: Software Development :: Version Control :: SCCS	18 :: 45 :: 52 :: 260
+54	2000031601	52	18	rcs	RCS	Tools for RCS (Revision Control System).	0	0	Topic :: Software Development :: Version Control :: RCS	18 :: 45 :: 52 :: 54
+53	2000031601	52	18	cvs	CVS	Tools for CVS (Concurrent Versioning System).	0	0	Topic :: Software Development :: Version Control :: CVS	18 :: 45 :: 52 :: 53
+50	2000031601	45	18	objectbrokering	Object Brokering	Object brokering libraries and tools.	0	0	Topic :: Software Development :: Object Brokering	18 :: 45 :: 50
+51	2000031601	50	18	corba	CORBA	Tools for implementation and use of CORBA.	0	0	Topic :: Software Development :: Object Brokering :: CORBA	18 :: 45 :: 50 :: 51
+49	2000031601	45	18	interpreters	Interpreters	Programs for interpreting and executing high-level languages directly.	0	0	Topic :: Software Development :: Interpreters	18 :: 45 :: 49
+48	2000031601	45	18	compilers	Compilers	Programs for compiling high-level languges into machine code.	0	0	Topic :: Software Development :: Compilers	18 :: 45 :: 48
+47	2000031601	45	18	debuggers	Debuggers	Programs for controlling and monitoring the execution of compiled binaries.	0	0	Topic :: Software Development :: Debuggers	18 :: 45 :: 47
+46	2000031601	45	18	build	Build Tools	Software for the build process.	0	0	Topic :: Software Development :: Build Tools	18 :: 45 :: 46
+43	2000031601	18	18	security	Security	Security-related software, to include system administration and cryptography.	0	0	Topic :: Security	18 :: 43
+44	2000031601	43	18	cryptography	Cryptography	Cryptography programs, algorithms, and libraries.	0	0	Topic :: Security :: Cryptography	18 :: 43 :: 44
+97	2000042701	18	18	scientific	Scientific/Engineering	Scientific applications, to include research, applied and pure mathematics and sciences.	0	0	Topic :: Scientific/Engineering	18 :: 97
+98	2000031601	97	18	mathematics	Mathematics	Software to support pure and applied mathematics.	0	0	Topic :: Scientific/Engineering :: Mathematics	18 :: 97 :: 98
+272	2000100501	97	18	HMI	Human Machine Interfaces	This applies to the Factory/Machine control/Automation fields where there are already thousands of applications and millions of installations.	0	0	Topic :: Scientific/Engineering :: Human Machine Interfaces	18 :: 97 :: 272
+266	2000081601	97	18	medical	Medical Science Apps.	Medical / BioMedical Science Apps.	0	0	Topic :: Scientific/Engineering :: Medical Science Apps.	18 :: 97 :: 266
+252	2000071101	97	18	bioinformatics	Bio-Informatics	Category for gene software (e.g. Gene Ontology)	0	0	Topic :: Scientific/Engineering :: Bio-Informatics	18 :: 97 :: 252
+246	2000042701	97	18	eda	Electronic Design Automation (EDA)	Tools for circuit design, schematics, board layout, and more.	0	0	Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)	18 :: 97 :: 246
+135	2000032001	97	18	visualization	Visualization	Software for scientific visualization.	0	0	Topic :: Scientific/Engineering :: Visualization	18 :: 97 :: 135
+134	2000032001	97	18	astronomy	Astronomy	Software and tools related to astronomy.	0	0	Topic :: Scientific/Engineering :: Astronomy	18 :: 97 :: 134
+133	2000032001	97	18	ai	Artificial Intelligence	Artificial Intelligence.	0	0	Topic :: Scientific/Engineering :: Artificial Intelligence	18 :: 97 :: 133
+87	2000031601	18	18	internet	Internet	Tools to assist human access to the Internet.	0	0	Topic :: Internet	18 :: 87
+270	2000083101	87	18	WAP	WAP	Wireless Access Protocol	0	0	Topic :: Internet :: WAP	18 :: 87 :: 270
+245	2000042701	87	18	loganalysis	Log Analysis	Software to help analyze various log files.	0	0	Topic :: Internet :: Log Analysis	18 :: 87 :: 245
+149	2000032001	87	18	dns	Name Service (DNS)	Domain name system servers and utilities.	0	0	Topic :: Internet :: Name Service (DNS)	18 :: 87 :: 149
+90	2000031601	87	18	www	WWW/HTTP	Programs and tools for the World Wide Web.	0	0	Topic :: Internet :: WWW/HTTP	18 :: 87 :: 90
+250	2000042801	90	18	httpservers	HTTP Servers	Software designed to serve content via the HTTP protocol.	0	0	Topic :: Internet :: WWW/HTTP :: HTTP Servers	18 :: 87 :: 90 :: 250
+243	2000042701	90	18	sitemanagement	Site Management	Tools for maintanance and management of web sites.	0	0	Topic :: Internet :: WWW/HTTP :: Site Management	18 :: 87 :: 90 :: 243
+244	2000042701	243	18	linkchecking	Link Checking	Tools to assist in checking for broken links.	0	0	Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking	18 :: 87 :: 90 :: 243 :: 244
+93	2000031601	90	18	indexing	Indexing/Search	Indexing and search tools for the Web.	0	0	Topic :: Internet :: WWW/HTTP :: Indexing/Search	18 :: 87 :: 90 :: 93
+92	2000031601	90	18	dynamic	Dynamic Content	Common Gateway Interface scripting and server-side parsing.	0	0	Topic :: Internet :: WWW/HTTP :: Dynamic Content	18 :: 87 :: 90 :: 92
+96	2000031601	92	18	cgi	CGI Tools/Libraries	Tools for the Common Gateway Interface	0	0	Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries	18 :: 87 :: 90 :: 92 :: 96
+95	2000031601	92	18	messageboards	Message Boards	Online message boards	0	0	Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Message Boards	18 :: 87 :: 90 :: 92 :: 95
+94	2000031601	92	18	counters	Page Counters	Scripts to count numbers of pageviews.	0	0	Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Page Counters	18 :: 87 :: 90 :: 92 :: 94
+91	2000031601	90	18	browsers	Browsers	Web Browsers	0	0	Topic :: Internet :: WWW/HTTP :: Browsers	18 :: 87 :: 90 :: 91
+89	2000031601	87	18	ftp	File Transfer Protocol (FTP)	Programs and tools for file transfer via FTP.	0	0	Topic :: Internet :: File Transfer Protocol (FTP)	18 :: 87 :: 89
+80	2000031601	18	18	games	Games/Entertainment	Games and Entertainment software.	0	0	Topic :: Games/Entertainment	18 :: 80
+18	2000031601	0	0	topic	Topic	Topic categorization.	0	0	Topic	18
+20	2000032401	18	18	communications	Communications	Programs intended to facilitate communication between people.	0	0	Topic :: Communications	18 :: 20
+27	2000031601	20	18	conferencing	Conferencing	Software to support real-time conferencing over the Internet.	0	0	Topic :: Communications :: Conferencing	18 :: 20 :: 27
+22	2000031601	20	18	chat	Chat	Programs to support real-time communication over the Internet.	0	0	Topic :: Communications :: Chat	18 :: 20 :: 22
+26	2000031601	22	18	aim	AOL Instant Messanger	Programs to support AOL Instant Messanger.	0	0	Topic :: Communications :: Chat :: AOL Instant Messanger	18 :: 20 :: 22 :: 26
+25	2000031601	22	18	talk	Unix Talk	Programs to support Unix Talk protocol.	0	0	Topic :: Communications :: Chat :: Unix Talk	18 :: 20 :: 22 :: 25
+24	2000041101	22	18	irc	Internet Relay Chat	Programs to support Internet Relay Chat.	0	0	Topic :: Communications :: Chat :: Internet Relay Chat	18 :: 20 :: 22 :: 24
+23	2000031601	22	18	icq	ICQ	Programs to support ICQ.	0	0	Topic :: Communications :: Chat :: ICQ	18 :: 20 :: 22 :: 23
+21	2000031601	20	18	bbs	BBS	Bulletin Board systems.	0	0	Topic :: Communications :: BBS	18 :: 20 :: 21
+251	2000050101	20	18	filesharing	File Sharing	Software for person-to-person online file sharing.	0	0	Topic :: Communications :: File Sharing	18 :: 20 :: 251
+241	2000050101	251	18	napster	Napster	Clients and servers for the Napster file sharing protocol.	0	0	Topic :: Communications :: File Sharing :: Napster	18 :: 20 :: 251 :: 241
+286	2001032001	251	18	gnutella	Gnutella	Projects based around the gnutella protocol.	0	0	Topic :: Communications :: File Sharing :: Gnutella	18 :: 20 :: 251 :: 286
+247	2000042701	20	18	telephony	Telephony	Telephony related applications, to include automated voice response systems.	0	0	Topic :: Communications :: Telephony	18 :: 20 :: 247
+40	2000031601	20	18	internetphone	Internet Phone	Software to support real-time speech communication over the Internet.	0	0	Topic :: Communications :: Internet Phone	18 :: 20 :: 40
+39	2000031601	20	18	usenet	Usenet News	Software to support USENET news.	0	0	Topic :: Communications :: Usenet News	18 :: 20 :: 39
+38	2000031601	20	18	hamradio	Ham Radio	Tools and resources for amateur radio.	0	0	Topic :: Communications :: Ham Radio	18 :: 20 :: 38
+37	2000031601	20	18	fido	FIDO	Tools for FIDOnet mail and echoes.	0	0	Topic :: Communications :: FIDO	18 :: 20 :: 37
+36	2000031601	20	18	fax	Fax	Tools for sending and receiving facsimile messages.	0	0	Topic :: Communications :: Fax	18 :: 20 :: 36
+28	2000031601	20	18	email	Email	Programs for sending, processing, and handling electronic mail.	0	0	Topic :: Communications :: Email	18 :: 20 :: 28
+33	2000031601	28	18	postoffice	Post-Office	Programs to support post-office protocols, including POP and IMAP.	0	0	Topic :: Communications :: Email :: Post-Office	18 :: 20 :: 28 :: 33
+35	2000031601	33	18	imap	IMAP	Programs to support IMAP protocol (Internet Message Access Protocol).	0	0	Topic :: Communications :: Email :: Post-Office :: IMAP	18 :: 20 :: 28 :: 33 :: 35
+34	2000031601	33	18	pop3	POP3	Programs to support POP3 (Post-Office Protocol, version 3).	0	0	Topic :: Communications :: Email :: Post-Office :: POP3	18 :: 20 :: 28 :: 33 :: 34
+32	2000031601	28	18	mta	Mail Transport Agents	Email transport and gatewaying software.	0	0	Topic :: Communications :: Email :: Mail Transport Agents	18 :: 20 :: 28 :: 32
+31	2000031601	28	18	mua	Email Clients (MUA)	Programs for interactively reading and sending Email.	0	0	Topic :: Communications :: Email :: Email Clients (MUA)	18 :: 20 :: 28 :: 31
+30	2000031601	28	18	listservers	Mailing List Servers	Tools for managing electronic mailing lists.	0	0	Topic :: Communications :: Email :: Mailing List Servers	18 :: 20 :: 28 :: 30
+29	2000031601	28	18	filters	Filters	Content-driven filters and dispatchers for Email.	0	0	Topic :: Communications :: Email :: Filters	18 :: 20 :: 28 :: 29
+301	2001041701	14	13	nosl	Nokia Open Source License	Nokia Open Source License	0	0	License :: OSI Approved :: Nokia Open Source License	13 :: 14 :: 301
+299	2001041701	14	13	iosl	Intel Open Source License	Intel Open Source License	0	0	License :: OSI Approved :: Intel Open Source License	13 :: 14 :: 299
+297	2001041701	14	13	vsl	Vovida Software License	Vovida Software License	0	0	License :: OSI Approved :: Vovida Software License	13 :: 14 :: 297
+195	2000032001	14	13	zlib	zlib/libpng License	zlib/libpng License	0	0	License :: OSI Approved :: zlib/libpng License	13 :: 14 :: 195
+194	2000032001	14	13	python	Python License	Python License	0	0	License :: OSI Approved :: Python License	13 :: 14 :: 194
+193	2000032001	14	13	ricoh	Ricoh Source Code Public License	Ricoh Source Code Public License	0	0	License :: OSI Approved :: Ricoh Source Code Public License	13 :: 14 :: 193
+192	2000032001	14	13	cvw	MITRE Collaborative Virtual Workspace License (CVW)	MITRE Collaborative Virtual Workspace License (CVW)	0	0	License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)	13 :: 14 :: 192
+191	2000032001	14	13	ibm	IBM Public License	IBM Public License	0	0	License :: OSI Approved :: IBM Public License	13 :: 14 :: 191
+190	2000032001	14	13	qpl	QT Public License (QPL)	QT Public License	0	0	License :: OSI Approved :: QT Public License (QPL)	13 :: 14 :: 190
+189	2000032001	14	13	mpl	Mozilla Public License (MPL)	Mozilla Public License (MPL)	0	0	License :: OSI Approved :: Mozilla Public License (MPL)	13 :: 14 :: 189
+305	2001041701	189	13	mpl11	Mozilla Public License 1.1	Mozilla Public License 1.1	0	0	License :: OSI Approved :: Mozilla Public License (MPL) :: Mozilla Public License 1.1	13 :: 14 :: 189 :: 305
+199	2000032101	0	0	os	Operating System	What operating system the program requires to run, if any.	0	0	Operating System	199
+200	2000032101	199	199	posix	POSIX	POSIX plus standard Berkeley socket facilities. Don't list a more specific OS unless your program requires it.	0	0	Operating System :: POSIX	199 :: 200
+201	2000032101	200	199	linux	Linux	Any version of Linux. Don't specify a subcategory unless the program requires a particular distribution.	0	0	Operating System :: POSIX :: Linux	199 :: 200 :: 201
+202	2000032101	200	199	bsd	BSD	Any variant of BSD. Don't specify a subcategory unless the program requires a particular BSD flavor.	0	0	Operating System :: POSIX :: BSD	199 :: 200 :: 202
+203	2000041101	202	199	freebsd	FreeBSD	FreeBSD	0	0	Operating System :: POSIX :: BSD :: FreeBSD	199 :: 200 :: 202 :: 203
+204	2000032101	202	199	netbsd	NetBSD	NetBSD	0	0	Operating System :: POSIX :: BSD :: NetBSD	199 :: 200 :: 202 :: 204
+205	2000032101	202	199	openbsd	OpenBSD	OpenBSD	0	0	Operating System :: POSIX :: BSD :: OpenBSD	199 :: 200 :: 202 :: 205
+206	2000032101	202	199	bsdos	BSD/OS	BSD/OS	0	0	Operating System :: POSIX :: BSD :: BSD/OS	199 :: 200 :: 202 :: 206
+207	2000032101	200	199	sun	SunOS/Solaris	Any Sun Microsystems OS.	0	0	Operating System :: POSIX :: SunOS/Solaris	199 :: 200 :: 207
+208	2000032101	200	199	sco	SCO	SCO	0	0	Operating System :: POSIX :: SCO	199 :: 200 :: 208
+209	2000032101	200	199	hpux	HP-UX	HP-UX	0	0	Operating System :: POSIX :: HP-UX	199 :: 200 :: 209
+210	2000032101	200	199	aix	AIX	AIX	0	0	Operating System :: POSIX :: AIX	199 :: 200 :: 210
+211	2000032101	200	199	irix	IRIX	IRIX	0	0	Operating System :: POSIX :: IRIX	199 :: 200 :: 211
+212	2000032101	200	199	other	Other	Other specific POSIX OS, specified in description.	0	0	Operating System :: POSIX :: Other	199 :: 200 :: 212
+282	2000121901	18	18	Sociology	Sociology	Social / Informational - Family / etc.	0	0	Topic :: Sociology	18 :: 282
+214	2000032101	199	199	microsoft	Microsoft	Microsoft operating systems.	0	0	Operating System :: Microsoft	199 :: 214
+215	2000032101	214	199	msdos	MS-DOS	Microsoft Disk Operating System (DOS)	0	0	Operating System :: Microsoft :: MS-DOS	199 :: 214 :: 215
+216	2000032101	214	199	windows	Windows	Windows software, not specific to any particular version of Windows.	0	0	Operating System :: Microsoft :: Windows	199 :: 214 :: 216
+217	2000032101	216	199	win31	Windows 3.1 or Earlier	Windows 3.1 or Earlier	0	0	Operating System :: Microsoft :: Windows :: Windows 3.1 or Earlier	199 :: 214 :: 216 :: 217
+218	2000032101	216	199	win95	Windows 95/98/2000	Windows 95, Windows 98, and Windows 2000.	0	0	Operating System :: Microsoft :: Windows :: Windows 95/98/2000	199 :: 214 :: 216 :: 218
+219	2000041101	216	199	winnt	Windows NT/2000	Windows NT and Windows 2000.	0	0	Operating System :: Microsoft :: Windows :: Windows NT/2000	199 :: 214 :: 216 :: 219
+220	2000032101	199	199	os2	OS/2	OS/2	0	0	Operating System :: OS/2	199 :: 220
+221	2000032101	199	199	macos	MacOS	MacOS	0	0	Operating System :: MacOS	199 :: 221
+222	2000032101	216	199	wince	Windows CE	Windows CE	0	0	Operating System :: Microsoft :: Windows :: Windows CE	199 :: 214 :: 216 :: 222
+223	2000032101	199	199	palmos	PalmOS	PalmOS (for Palm Pilot)	0	0	Operating System :: PalmOS	199 :: 223
+224	2000032101	199	199	beos	BeOS	BeOS	0	0	Operating System :: BeOS	199 :: 224
+225	2000032101	0	0	environment	Environment	Run-time environment required for this program.	0	0	Environment	225
+226	2000041101	225	225	console	Console (Text Based)	Console-based programs.	0	0	Environment :: Console (Text Based)	225 :: 226
+227	2000032401	226	225	curses	Curses	Curses-based software.	0	0	Environment :: Console (Text Based) :: Curses	225 :: 226 :: 227
+228	2000040701	226	225	newt	Newt	Newt	0	0	Environment :: Console (Text Based) :: Newt	225 :: 226 :: 228
+229	2000040701	225	225	x11	X11 Applications	Programs that run in an X windowing environment.	0	0	Environment :: X11 Applications	225 :: 229
+230	2000040701	225	225	win32	Win32 (MS Windows)	Programs designed to run in a graphical Microsoft Windows environment.	0	0	Environment :: Win32 (MS Windows)	225 :: 230
+231	2000040701	229	225	gnome	Gnome	Programs designed to run in a Gnome environment.	0	0	Environment :: X11 Applications :: Gnome	225 :: 229 :: 231
+232	2000040701	229	225	kde	KDE	Programs designed to run in a KDE environment.	0	0	Environment :: X11 Applications :: KDE	225 :: 229 :: 232
+233	2000040701	225	225	other	Other Environment	Programs designed to run in an environment other than one listed.	0	0	Environment :: Other Environment	225 :: 233
+283	2000121901	282	18	History	History	History / Informational	0	0	Topic :: Sociology :: History	18 :: 282 :: 283
+235	2000041001	199	199	independent	OS Independent	This software does not depend on any particular operating system.	0	0	Operating System :: OS Independent	199 :: 235
+236	2000040701	199	199	other	Other OS	Program is designe for a nonlisted operating system.	0	0	Operating System :: Other OS	199 :: 236
+237	2000041001	225	225	web	Web Environment	This software is designed for a web environment.	0	0	Environment :: Web Environment	225 :: 237
+238	2000041101	225	225	daemon	No Input/Output (Daemon)	This program has no input or output, but is intended to run in the background as a daemon.	0	0	Environment :: No Input/Output (Daemon)	225 :: 238
+284	2000121901	282	18	Genealogy	Genealogy	Family History / Genealogy	0	0	Topic :: Sociology :: Genealogy	18 :: 282 :: 284
+240	2000041301	200	199	gnuhurd	GNU Hurd	GNU Hurd	0	0	Operating System :: POSIX :: GNU Hurd	199 :: 200 :: 240
+55	2000031601	18	18	desktop	Desktop Environment	Accessories, managers, and utilities for your GUI desktop.	0	0	Topic :: Desktop Environment	18 :: 55
+58	2000031601	55	18	gnome	Gnome	Software for the Gnome desktop.	0	0	Topic :: Desktop Environment :: Gnome	18 :: 55 :: 58
+57	2000031601	55	18	kde	K Desktop Environment (KDE)	Software for the KDE desktop.	0	0	Topic :: Desktop Environment :: K Desktop Environment (KDE)	18 :: 55 :: 57
+61	2000031601	57	18	themes	Themes	Themes for KDE.	0	0	Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes	18 :: 55 :: 57 :: 61
+56	2000031601	55	18	windowmanagers	Window Managers	Programs that provide window control and application launching.	0	0	Topic :: Desktop Environment :: Window Managers	18 :: 55 :: 56
+59	2000031601	56	18	enlightenment	Enlightenment	Software for the Enlightenment window manager.	0	0	Topic :: Desktop Environment :: Window Managers :: Enlightenment	18 :: 55 :: 56 :: 59
+60	2000031601	59	18	themes	Themes	Themes for the Enlightenment window manager.	0	0	Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes	18 :: 55 :: 56 :: 59 :: 60
+62	2000031601	55	18	screensavers	Screen Savers	Screen savers and lockers.	0	0	Topic :: Desktop Environment :: Screen Savers	18 :: 55 :: 62
+259	2000071401	45	18	codegen	Code Generators	Code Generators	0	0	Topic :: Software Development :: Code Generators	18 :: 45 :: 259
+52	2000031601	45	18	versioncontrol	Version Control	Tools for managing multiple versions of evolving sources or documents.	0	0	Topic :: Software Development :: Version Control	18 :: 45 :: 52
+160	2000032001	0	0	language	Programming Language	Language in which this program was written, or was meant to support.	0	0	Programming Language	160
+161	2000032001	160	160	apl	APL	APL	0	0	Programming Language :: APL	160 :: 161
+164	2000032001	160	160	c	C	C	0	0	Programming Language :: C	160 :: 164
+162	2000032001	160	160	assembly	Assembly	Assembly-level programs. Platform specific.	0	0	Programming Language :: Assembly	160 :: 162
+163	2000051001	160	160	ada	Ada	Ada	0	0	Programming Language :: Ada	160 :: 163
+165	2000032001	160	160	cpp	C++	C++	0	0	Programming Language :: C++	160 :: 165
+166	2000032401	160	160	eiffel	Eiffel	Eiffel	0	0	Programming Language :: Eiffel	160 :: 166
+167	2000032001	160	160	euler	Euler	Euler	0	0	Programming Language :: Euler	160 :: 167
+168	2000032001	160	160	forth	Forth	Forth	0	0	Programming Language :: Forth	160 :: 168
+169	2000032001	160	160	fortran	Fortran	Fortran	0	0	Programming Language :: Fortran	160 :: 169
+170	2000032001	160	160	lisp	Lisp	Lisp	0	0	Programming Language :: Lisp	160 :: 170
+171	2000041101	160	160	logo	Logo	Logo	0	0	Programming Language :: Logo	160 :: 171
+172	2000032001	160	160	ml	ML	ML	0	0	Programming Language :: ML	160 :: 172
+173	2000032001	160	160	modula	Modula	Modula-2 or Modula-3	0	0	Programming Language :: Modula	160 :: 173
+174	2000032001	160	160	objectivec	Objective C	Objective C	0	0	Programming Language :: Objective C	160 :: 174
+175	2000032001	160	160	pascal	Pascal	Pascal	0	0	Programming Language :: Pascal	160 :: 175
+176	2000032001	160	160	perl	Perl	Perl	0	0	Programming Language :: Perl	160 :: 176
+177	2000032001	160	160	prolog	Prolog	Prolog	0	0	Programming Language :: Prolog	160 :: 177
+178	2000032001	160	160	python	Python	Python	0	0	Programming Language :: Python	160 :: 178
+179	2000032001	160	160	rexx	Rexx	Rexx	0	0	Programming Language :: Rexx	160 :: 179
+180	2000032001	160	160	simula	Simula	Simula	0	0	Programming Language :: Simula	160 :: 180
+181	2000032001	160	160	smalltalk	Smalltalk	Smalltalk	0	0	Programming Language :: Smalltalk	160 :: 181
+182	2000032001	160	160	tcl	Tcl	Tcl	0	0	Programming Language :: Tcl	160 :: 182
+183	2000032001	160	160	php	PHP	PHP	0	0	Programming Language :: PHP	160 :: 183
+263	2000080401	160	160	euphoria	Euphoria	Euphoria programming language - http://www.rapideuphoria.com/	0	0	Programming Language :: Euphoria	160 :: 263
+264	2000080701	160	160	erlang	Erlang	Erlang - developed by Ericsson - http://www.erlang.org/	0	0	Programming Language :: Erlang	160 :: 264
+267	2000082001	160	160	zope	Zope	Zope Object Publishing	0	0	Programming Language :: Zope	160 :: 267
+269	2000082801	160	160	asm	Assembly	ASM programming	0	0	Programming Language :: Assembly	160 :: 269
+271	2000092001	160	160	csharp	C#	Microsoft's C++/Java Language	0	0	Programming Language :: C#	160 :: 271
+273	2000102001	160	160	Pike	Pike	Pike, see http://pike.roxen.com/.	0	0	Programming Language :: Pike	160 :: 273
+184	2000032001	160	160	asp	ASP	Active Server Pages	0	0	Programming Language :: ASP	160 :: 184
+185	2000032001	160	160	shell	Unix Shell	Unix Shell	0	0	Programming Language :: Unix Shell	160 :: 185
+186	2000032001	160	160	visualbasic	Visual Basic	Visual Basic	0	0	Programming Language :: Visual Basic	160 :: 186
+198	2000032001	160	160	java	Java	Java	0	0	Programming Language :: Java	160 :: 198
+213	2000032101	160	160	other	Other	Other programming language, specified in description.	0	0	Programming Language :: Other	160 :: 213
+242	2000042701	160	160	scheme	Scheme	Scheme programming language.	0	0	Programming Language :: Scheme	160 :: 242
+254	2000071101	160	160	plsql	PL/SQL	PL/SQL Programming Language	0	0	Programming Language :: PL/SQL	160 :: 254
+255	2000071101	160	160	progress	PROGRESS	PROGRESS Programming Language	0	0	Programming Language :: PROGRESS	160 :: 255
+258	2000071101	160	160	objectpascal	Object Pascal	Object Pascal	0	0	Programming Language :: Object Pascal	160 :: 258
+261	2000072501	160	160	xbasic	XBasic	XBasic programming language	0	0	Programming Language :: XBasic	160 :: 261
+262	2000073101	160	160	coldfusion	Cold Fusion	Cold Fusion Language	0	0	Programming Language :: Cold Fusion	160 :: 262
+304	2001041701	189	13	mpl10	Mozilla Public License 1.0	Mozilla Public License 1.0	0	0	License :: OSI Approved :: Mozilla Public License (MPL) :: Mozilla Public License 1.0	13 :: 14 :: 189 :: 304
+188	2000032001	14	13	mit	MIT/X Consortium License	MIT License, also the X Consortium License.	0	0	License :: OSI Approved :: MIT/X Consortium License	13 :: 14 :: 188
+187	2000032001	14	13	bsd	BSD License	BSD License	0	0	License :: OSI Approved :: BSD License	13 :: 14 :: 187
+17	2000032001	14	13	artistic	Artistic License	The Perl Artistic License	0	0	License :: OSI Approved :: Artistic License	13 :: 14 :: 17
+16	2000050801	14	13	lgpl	GNU Lesser General Public License (LGPL)	GNU Lesser General Public License	0	0	License :: OSI Approved :: GNU Lesser General Public License (LGPL)	13 :: 14 :: 16
+15	2000032001	14	13	gpl	GNU General Public License (GPL)	GNU General Public License.	0	0	License :: OSI Approved :: GNU General Public License (GPL)	13 :: 14 :: 15
+280	2000110101	160	160	JavaScript	JavaScript	Java Scripting Language	0	0	Programming Language :: JavaScript	160 :: 280
+281	2000111401	160	160	REBOL	REBOL	REBOL Programming Language	0	0	Programming Language :: REBOL	160 :: 281
+265	2001032001	160	160	Delphi	Delphi/Kylix	Borland/Inprise Delphi or other Object-Pascal based languages	0	0	Programming Language :: Delphi/Kylix	160 :: 265
+293	2001032001	160	160	ruby	Ruby	Ruby programming language	0	0	Programming Language :: Ruby	160 :: 293
+45	2000031601	18	18	development	Software Development	Software used to aid software development.	0	0	Topic :: Software Development	18 :: 45
+99	2000031601	18	18	multimedia	Multimedia	Graphics, sound, video, and multimedia.	0	0	Topic :: Multimedia	18 :: 99
+296	2001041701	14	13	asl	Apache Software License	Apache Software License	0	0	License :: OSI Approved :: Apache Software License	13 :: 14 :: 296
+274	2000102401	0	0	natlanguage	Natural Language	The oral/written language for the development and use of this software.	0	0	Natural Language	274
+295	2001040601	274	274	russian	Russian	Projects having something to do with Russian Language	0	0	Natural Language :: Russian	274 :: 295
+275	2000102401	274	274	english	English	English	0	0	Natural Language :: English	274 :: 275
+276	2000102401	274	274	french	French	French	0	0	Natural Language :: French	274 :: 276
+277	2000102401	274	274	spanish	Spanish	Spanish	0	0	Natural Language :: Spanish	274 :: 277
+278	2000102601	274	274	japanese	Japanese	Projects using the Japanese language	0	0	Natural Language :: Japanese	274 :: 278
+279	2000102601	274	274	german	German	Projects using the German language	0	0	Natural Language :: German	274 :: 279
+298	2001041701	14	13	sissl	Sun Internet Standards Source License	Sun Internet Standards Source License	0	0	License :: OSI Approved :: Sun Internet Standards Source License	13 :: 14 :: 298
+300	2001041701	14	13	josl	Jabber Open Source License	Jabber Open Source License	0	0	License :: OSI Approved :: Jabber Open Source License	13 :: 14 :: 300
+302	2001041701	14	13	sleepycat	Sleepycat License	Sleepycat License	0	0	License :: OSI Approved :: Sleepycat License	13 :: 14 :: 302

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/coding_standards.html
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/coding_standards.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/coding_standards.html	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,479 @@
+<!-- ------------------------ HEADER ------------------------ -->
+<html>
+<head>
+  <title>SourceForge: PHP Coding Standards</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<table width="100%">
+  <tr>
+    <td>
+      <b><font size=+1>SourceForge: PHP Coding Standards</font></b><br>
+      <font size="-1">$Id: coding_standards.html,v 1.3 2001/05/17 17:19:37 dbrogdon Exp $<br>
+      SourceForge Engine Team [<a href="mailto:alexandria-devel at sourceforge.net">email</a>]</font>
+    </td>
+    <td>
+      <a href="http://sourceforge.net"><img src="/images/sflogo2-105a.png" width="108" height="53" border="0"></a>
+    </td>
+  </tr>
+</table>
+
+<!-- ------------------------ MENU ------------------------ -->
+<p><hr><p>
+
+<dd>
+  <a href="#0">0. Introduction</a>
+</dd>
+
+<dd>
+  <a href="#1">1. Comments</a>
+</dd>
+
+<dd>
+  <a href="#2">2. Formatting</a>
+</dd>
+
+<dd>
+  <a href="#3">3. Templating</a>
+</dd>
+
+<dd>
+  <a href="#4">4. Expressions</a>
+</dd>
+
+<dd>
+  <a href="#5">5. Functions</a>
+</dd>
+
+<dd>
+  <a href="#6">6. Objects</a>
+</dd>
+
+<dd>
+  <a href="#7">7. Naming</a>
+</dd>
+
+<dd>
+  <a href="#8">8. Control Statements</a>
+</dd>
+
+<dd>
+  <a href="#9">9. Including PHP Files</a>
+</dd>
+
+<!-- ------------------------ SECTION 0 ------------------------ -->
+<p><hr><p>
+
+<a NAME="0"></b></a><b>0. Introduction</b></a>
+
+<p>
+Coding Standards.  Live them, love them.
+
+<p>
+Then come up with a new introduction...
+
+<!-- ------------------------ SECTION 1 ------------------------ -->
+<p><hr><p>
+
+<a NAME="1"></b></a><b>1. Comments</b></a>
+
+<p>
+<b>Guidelines</b>
+
+<p>
+Non-documentation comments are strongly encouraged. A general rule of
+thumb is that if you look at a section of code and think &quot;Wow, I don't
+want to try and describe that&quot;, you need to comment it before you
+forget how it works.
+
+<ul>
+  <li>C++ style comments (/* */) and standard C comments (//) are both acceptable.
+  <li>Use of perl/shell style comments (#) is prohibited.
+</ul>
+
+<p>
+<b>PHPdoc Tags</b>
+
+<p>
+Inline documentation for classes should follow the PHPDoc convention,
+similar to Javadoc. More information about PHPDoc can be found here:
+
+<p>
+<a href="http://www.phpdoc.de/">http://www.phpdoc.de/</a>
+
+<p>
+<b>File Comments:</b> 
+
+<p>
+Every file should start with a comment block describing its purpose,
+version, author and a copyright message. The comment block should be a
+block comment in standard JavaDoc format along with a CVS Id tag.
+While all JavaDoc tags are allowed, only the tags in the examples
+below will be parsed by PHPdoc. The following header should be used in
+all PHP files:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+/**
+ *
+ * brief description.
+ * long description.  more long description.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @version   $Id: coding_standards.html,v 1.3 2001/05/17 17:19:37 dbrogdon Exp $
+ *
+ */
+</pre>
+</td></tr>
+</table>
+
+<p>
+<b>Function and Class Comments:</b> 
+
+<p>
+Similarly, every function should have a block comment specifying name,
+parameters, return values, and last change date.
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+/**
+ * brief description.
+ * long description.  more long description.
+ *
+ * @author    firstname lastname email
+ * @param     variable  description
+ * @return    value     description
+ * @date      YYYY-MM-DD
+ * @deprecated
+ * @see
+ *
+ */
+</pre>
+</td></tr>
+</table>
+
+<p>
+<b>Note</b> 
+
+<p>
+The placement of periods in the short and long descriptions is
+important to the PHPdoc parser.  The first period always ends the
+short description. All future periods are part of the long
+description, ending with a blank comment line.  The long comment is
+optional.
+
+<!-- ------------------------ SECTION 2 ------------------------ -->
+<p><hr><p>
+
+<a NAME="2"></b></a><b>2. Formatting</b></a>
+
+<p>
+<b>Indenting</b>
+
+<p>
+All indenting is done with TABS. Before committing any file to CVS, make sure
+you first replace spaces with tabs and verify the formatting.
+
+<p>
+<b>PHP Tags</b>
+
+<p>
+The use of <code>&lt;?php ?&gt;</code> to delimit PHP code is
+required.  Using <code>&lt;? ?&gt</code> is not valid.  This is the
+most portable way to include PHP code on differing operating systems
+and webserver setups.  Also, XML parsers are confused by the
+shorthand syntax.
+
+<!-- ------------------------ SECTION 3 ------------------------ -->
+<p><hr><p>
+
+<a NAME="3"></b></a><b>3. Templating</b></a>
+
+<p>
+In the SourceForge system, PHP itself is used as the template
+language.  To make the templating clearer, template files should be
+separated out and included once objects and database results are
+established. Detailed examples are in the docs repository and online
+at:
+
+<p>
+<a href="http://webdev.docs.sourceforge.net/architecture/templating.php">http://webdev.docs.sourceforge.net/architecture/templating.php</a>
+
+<p>
+Variables in the templates are presented surrounded by &lt;?php ?&gt; 
+tags instead of the {} tags that some other template libraries would 
+use. The end result is the same, with less bloat and more efficient code.
+
+<!-- ------------------------ SECTION 4 ------------------------ -->
+<p><hr><p>
+
+<a NAME="4"></b></a><b>4. Expressions</b></a>
+
+<ul>
+  <li>Use parentheses liberally to resolve ambiguity. 
+  <li>Using parentheses can force an order of evaluation. This saves the time a reader may spend remembering precedence of operators. 
+  <li>Don't sacrifice clarity for cleverness. 
+  <li>Write conditional expressions so that they read naturally aloud. 
+  <li>Sometimes eliminating a not operator <code>(!)</code> will make an expression more understandable. 
+  <li>Keep each line simple. 
+  <li>The ternary operator <code>(x ? 1 : 2)</code> usually indicates too much code on one line. <code>if... else if... else</code> is usually more readable. 
+</ul>
+
+<!-- ------------------------ SECTION 5 ------------------------ -->
+<p><hr><p>
+
+<a NAME="5"></b></a><b>5. Functions</b></a>
+
+<p>
+<b>Function Calls</b>
+
+<p>
+Functions shall be called with no spaces between the function name,
+the opening parenthesis, and the first parameter; spaces between
+commas and each parameter, and no space between the last parameter,
+the closing parenthesis, and the semicolon. Here's an example:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+$var = foo($bar, $baz, $quux);
+</pre>
+</td></tr>
+</table>
+
+<p>
+As displayed above, there should be one space on either side of an
+equals sign used to assign the return value of a function to a
+variable. In the case of a block of related assignments, more space
+may be inserted to promote readability:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+$short		= foo($bar);
+$long_variable	= foo($baz);
+</pre>
+</td></tr>
+</table>
+
+<p>
+<b>Function Definitions</b>
+
+<p>
+Function declarations follow the unix convention:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+function fooFunction($arg1, $arg2 = '') {
+    if (condition) {
+        statement;
+    }
+    return $val;
+}
+</pre>
+</td></tr>
+</table>
+
+<p>
+Arguments with default values go at the end of the argument list.
+Always attempt to return a meaningful value from a function if one is
+appropriate. Here is a slightly longer example:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+function connect(&$dsn, $persistent = false) {
+    if (is_array($dsn)) {
+        $dsninfo = &$dsn;
+    } else {
+        $dsninfo = DB::parseDSN($dsn);
+    }
+
+    if (!$dsninfo || !$dsninfo['phptype']) {
+        return $this->raiseError();
+    }
+
+    return true;
+}
+</pre>
+</td></tr>
+</table>
+
+<!-- ------------------------ SECTION 6 ------------------------ -->
+<p><hr><p>
+
+<a NAME="6"></b></a><b>6. Objects</b></a>
+
+<p>
+Objects should generally be &quot;normalized&quot; similar to a
+database so they contain only the attributes that make sense.
+
+<p>
+Each object should have Error.class as the abstract parent object
+unless the object or its subclasses will never produce errors.
+
+<p>
+Each object should also have a <code>create()</code> method which does
+the work of inserting a new row into the database table that this
+object represents.
+
+<p>
+An <code>update()</code> method is also required for any objects
+that can be changed.  Individual <code>set()</code> methods are
+generally not a good idea as doing separate updates to each field in
+the database is a performance bottleneck.
+
+<p>
+Common sense about performance should be used when designing objects.
+
+<!-- ------------------------ SECTION 7 ------------------------ -->
+<p><hr><p>
+
+<a NAME="7"></b></a><b>7. Naming</b></a>
+
+<ul>
+
+<li>Constants should always be uppercase, with underscores to separate
+words. Prefix constant names with the name of the class/package they
+are used in. For example, the constants used by the DB:: package all
+begin with &quot;DB_&quot;.
+
+<li>True and false are built in to the php language and behave like
+constants, but should be written in lowercase to distinguish them from
+user-defined constants.
+
+
+<li>Function names should suggest an action or verb:
+<code>updateAddress, makeStateSelector</code>
+
+<li>Variable names should suggest a property or noun: <code>UserName,
+Width</code>
+
+<li>Use pronounceable names. Common abbreviations are acceptable as
+long as they are used the same way throughout the project.
+
+<li>Be consistent, use parallelism.  If you are abbreviating number as
+'num', always use that abbreviation.  Don't switch to using
+<code>no</code> or <code>nmbr</code>.
+
+<li>
+Use descriptive names for variables used globally, use short names for
+variables used locally.</li>
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+$AddressInfo = array(...);
+
+for($i=0; $i &lt; count($list); $i++)
+</pre>
+</td></tr>
+</table>
+
+</ul>
+
+<!-- ------------------------ SECTION 8 ------------------------ -->
+<p><hr><p>
+
+<a NAME="8"></b></a><b>8. Control Structures</b></a>
+
+<p>
+These include if, for, while, switch, etc. Here is an example if
+statement, since it is the most complicated form:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>
+if ((condition1) || (condition2)) {
+    action1;
+} elseif ((condition3) && (condition4)) {
+    action2;
+} else {
+    defaultaction;
+}
+</pre>
+</td></tr>
+</table>
+
+<p> 
+Control statements shall have one space between the control
+keyword and opening parenthesis, to distinguish them from function
+calls.
+
+<p>
+You should use curly braces even in situations where they are
+technically optional. Having them increases readability and decreases
+the likelihood of logic errors being introduced when new lines are
+added.
+
+<p>
+For switch statements:
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>switch (condition) {
+    case 1: {
+        action1;
+        break;
+    }
+    case 2: {
+        action2;
+        break;
+    }
+    default: {
+        defaultaction;
+        break;
+    }
+}</pre>
+</td></tr>
+</table>
+
+<!-- ------------------------ SECTION 9 ------------------------ -->
+<p><hr><p>
+
+<a NAME="9"></b></a><b>9. Including PHP Files</b></a>
+
+<p>
+Anywhere you are unconditionally including a class file, use
+require_once. Anywhere you are conditionally including a class file
+(for example, factory methods), use include_once. Either of these will
+ensure that class files are included only once. They share the same
+file list, so you don't need to worry about mixing them - a file
+included with require_once will not be included again by include_once.
+
+Note: include_once and require_once are statements, not functions. You
+don't need parentheses around the filename to be included, however you 
+should do it anyway and use ' (apostrophes) not &quot; (quotes):
+
+<p>
+<table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
+<tr><td>
+<pre>include('pre.php');</pre>
+</td></tr>
+</table>
+
+
+<!-- ------------------------ FOOTER ------------------------ -->
+<p><hr><p>
+
+<p align="right">
+  <font size="-1">
+    Copyright &copy; 1999, 2000, 2001 <a href="http://www.valinux.com/">VA Linux Systems, Inc.</a>
+  </font>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/sf2.sda
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/sf2.sda	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/sf2.sda	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,614 @@
+ÐÏࡱá                ;  þÿ	               ª                þÿÿÿ        €   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿþÿÿÿ      þÿÿÿ      	   
+         
+                                                             !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   þÿÿÿ2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~         R o o t   E n t r y                                               ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        þÿÿÿþÿÿÿþÿÿÿ               	   
+         
+            þÿÿÿþÿÿÿ            þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿ
+  ÿÿÿÿ ‰.½…щР€)ä°±   Drawing 
+   StarDraw 5.0                                                                        ‘ñÿÿÚ  c  Vk                                                SfxDocumentInfo                                    ë01¼Û]                                  BU1¼?                                  uKô                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Info 0                                   Info 1                                   Info 2                                   Info 3                                      ë01@`U 85#"       <                                        1,,,1                                                         þÿ                        à…ŸòùOh«‘ +'³Ù0   ø      	   h   
+   t      €   
+   Œ      ˜      ¤      °      ¼      È      Ô      à      ì         34  @    ó{    @    pšJ2   @   €¹¿{T¦À@   €±¤“3-À                                                                                                                                                              »» ÿÿ         XOutdevItemPool      1   èèéêëìíîïðñòóôõö÷øùúûüý
+ è)èéêëìíîïðñùúûüýþ	
+
+&'()*+,-./06789:;UVWXYZ[\] ècèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst ètèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
+
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef”•–—˜™š›œžŸ ¡    d   î   ì  Ñ  0 ‹ ê  ¹'è       @  q           X  X  º'é    ,   @  ­       ÿÿÿÿ               X  »'ê    .   @  ß           –     2   X  X  X  ¼'ë        @      
+   ÿÿÿÿ €      X  ½'ì    å   @  ø       ÿÿÿÿ       Arrowÿÿÿÿ   
+                                   Arrowÿÿÿÿ   d           È                   d            	  Arrowÿÿÿÿ   }           ú   ú           ú       }           X  X  XS  X–  ¾'í    ª   @  ²       ÿÿÿÿ       Arrowÿÿÿÿ   d           È                   d              Arrowÿÿÿÿ   }           ú   ú           ú       }           X  X  X_  ¿'î    :   @  ô     ,    ¼    È    	 ú   X  X  X  X&  À'ï    .   @  2     ,    È     ú   X  X  X  Á'ð       @  ^        X  X  Â'ñ       @        X  òò    
+   @   ›  óó   
+   @   ±  ôô    
+   @   Ç  õõ    
+   @   Ý  öö    
+   @   ó  ÷÷    
+   @   	  øø    
+   @     ´'ú       @  A    %   !   X  X  µ'û      @ 
+ A       ÿÿÿÿ €  ¸¸ÿÿ    ÿÿÿÿ €  €€€€    ÿÿÿÿ €ÿÿÌÌ™™    ÿÿÿÿ €ÿÿÿÿÿÿ  
+ Light grayÿÿÿÿ €ÀÀÀÀÀÀ 
+  Gray 20%ÿÿÿÿ €ÌÌÌÌÌÌ   Gray 30%ÿÿÿÿ €³³³³³³   Red 4ÿÿÿÿ €ÿÿ3333	  	 Magenta 4ÿÿÿÿ €™™ffÌÌ   Blue 8ÿÿÿÿ €™™ÌÌÿÿX  X   X2  XD  XV  Xr  XŒ  X¦  X½  XØ  ¶'ü   6   @  §       ÿÿÿÿ        ÿÿÿÿÿÿ      2 2 d d   X  ·'ý    (   @  Û       ÿÿÿÿ               X  ¸'þ   "  @  	
+       ÿÿÿÿ    BMv      v   (   @   @     SD               Ä   @      x^íSI
+Ã0ô¯sŒ½å\èzéü ÿ
+ª–46•Z…Bn›8x‘Ç)1²Ì”³.<觔B+ï Ì„¨Þ¢Ï40:prf
+š‡·í|q±ìüâÊ]~½+Háë•~|ðWíF¼ðúúMñbÀöž þâPÙ@úaüoÌCÄ“Ø[½È¡z¼6~U{Û߃<ª½Õ?¥ †ü–{¿rü=+Îý÷ô—|´¨ý•¿.©MåÛxò³åG¦
+Ü«±X  ÿÿ    
+   @   #
+        
+   @   9
+      
+   @   O
+      
+   @   e
+      
+   @   {
+      
+   @   ‘
+     
+   @   §
+      
+   @   ½
+      
+   @   Ó
+      
+   @   é
+  		    
+   @   ÿ
+  
+
+    
+   @         
+   @   +      
+   @   A  
+
+    
+   @   W      
+   @   m      
+   @   ƒ      
+   @   ™      
+   @   ¯      
+   @   Å      
+   @   Û      
+   @   ñ      
+   @         
+   @     (    
+   @   3  (    
+   @   I  (    
+   @   _  (    
+   @   u  (    
+   @   ‹  (    
+   @   ¡  (    
+   @   ·  (    
+   @   Í  (     
+   @   ã  (!    
+   @   ù  ("    
+   @   
+  (#    
+   @   %
+  $$    
+   @   ;
+  %%    
+   @   Q
+  &&    
+   @   g
+  ''    
+   @   }
+  ((    
+   @   “
+  ))    
+   @   ©
+  ;(+       @  É
+        X  X  ,,        @  ù
+       ÿÿÿÿ €€€€€€€X  --    "   @  #     ,    È   X  X  ..    "   @  Q     ,    È   X  X  //    
+   @   o  00    
+   @   …  11    
+   @   ›  22    
+   @   ±  33    
+   @   Ç  44    
+   @   Ý  55    
+   @   ó  66    
+   @   	  II       @  '    
+ ô  X  JJ    :   @  a     ¸g    A%    \)        X  X  X  X&  KK       @  ‘    	    X  X  (L    
+   @   ¯  MM    
+   @   Å  NN    
+   @   Û  OO    
+   @   ñ  PP    
+   @     QQ       @  #    ?  X  RR    
+   @   =  SS    "   @  c    
+       ÄK  X  X  TT    
+   @     UU       @  œ     X  VV       @      =      X  X  WW    
+   @   à  XX    
+   @   ö  YY    
+   @     ZZ    
+   @   "  [[    
+   @   8  \\    
+   @   N  ]]    
+   @   d  ^^    
+   @   z  __   
+   @     ``    
+   @   ¦  aa    
+   @   ¼  bb    
+   @   Ò  cc    
+   @   è  dd    
+   @   þ  ee    
+   @     gg       @  0      X  hh    
+   @   J  ii    
+   @   `  jj    
+   @   v  kk    
+   @   Π ll    
+   @   ¢  mm    
+   @   ¸  nn    
+   @   Î  oo    
+   @   ä  pp    
+   @   ú  qq    
+   @     rr    
+   @   &  ss    
+   @   <  tt    
+   @   R  uu    
+   @   h  vv    
+   @   ~  ww    
+   @   ”  xx    
+   @   ª  yy    
+   @   À  ””    
+   @   Ö  ••    
+   @   ì  ––    
+   @     ——    
+   @     ˜˜    
+   @   .  ™™    
+   @   D  šš    
+   @   Z  ùù      @  0          è¹'        è¹'    è¹'        ì½' í¾' î¿' ïÀ'    è¹' ë¼'     è¹' 	 #   
+   ì½' í¾' î¿' ïÀ'  	  è¹' ë¼'     í¾' ïÀ' 
+    X  X  X   X&  X2  X>  XD  Xb  Xt  X€  X†  X¤  X¶  XÈ      ¢  @  Â          ú´' ûµ'        ú´' ûµ'    ú´' ûµ'    ú´'  ûµ'        ú´'  ûµ'    ú´'  ûµ'	 	   ú´' ûµ' 
+   ú´'  ûµ'        ú´'  ûµ' 
+   ú´'  ûµ'	  	  ú´' ûµ'    ú´'  ûµ'    ú´'  ûµ'    ú´'  ûµ'    ú´'  ûµ'    ú´' ûµ'    ûµ' X  X  X&  X,  X>  XP  Xb  Xh  Xz  XŒ  Xž  X°  X¶  XÈ  XÚ  Xì  Xþ  X X" X4 XF **  	  Z   @  \                                ?   X  X  X  X   X&  X,  X2  X8  77  	  Z   @                                  ?   X  X  X  X   X&  X,  X2  X8  HH    î  @  t      £+'        £+'            £+' ¦'  §' ©'     £+'     ž<(   @'  £+' ¦'  §' ©'      ž<(   @'  £+' ¦'  §'  ©'  	    
+   ¦'  §'     ž<(   @'  ¦'  §'     
+   £+' ¦'  §' ©'     £+'     ž<(   @'  £+' ¦'  §' ©'      ž<(   @'  £+' ¦'  §'  ©'      ž<(  Ÿ
+(  @'  £+'     ž<(  Ÿ
+(  @'  £+' ¦'  §'    £+' ¦'  §'    ¦'  §'    ¦'  §' ©'  
+   ž<(   @'  ¦'  §'
+    ¦'  §'
+    ¦'  §'    £+' ¦'  §' ©' X  X  X   X,  X2  X8  XV  Xb  X’  XÂ  XÈ  XÚ  Xþ  X X" X. X^ XŽ X² Xâ Xú X X$ XH XZ Xl ff    ¢  @  N      JJ  KK  QQ  VV     JJ KK     JJ  KK  QQ  VV     JJ KK     JJ KK   
+  II  QQ  VV     QQ  VV     JJ KK SS  UU  VV    JJ 	   JJ KK  
+   II  QQ  VV   .  QQ  VV     JJ KK SS  UU  VV 
+   JJ    JJ KK SS UU  VV X  X,  X>  X\  Xn  X€  X˜  Xª  XÎ  XÚ  Xì  X X X: XF zz    *   @  ¸      gg     gg  X  X  ››       @  â           X  X      8   p   ª   Ö   Ç  }  à  ý  %  D  Z  p  †  œ  ²  È  Þ    (  j  ž  Ì  â  ø    $  :  P  f  |  ’  ¨  ¾  Ô  ê       ,  B  X  n  „  š  °  Æ  Ü  ò  	  	  4	  J	  `	  v	  Œ	  ¢	  ¸	  Î	  ä	  ú	  
+  &
+  <
+  R
+  h
+  
+  ¼
+  ê
+    .  D  Z  p  †  œ  ²  È  ê  0  X  n  „  š  °  Æ  æ  ü  *
+  @
+  _
+  ‰
+  Ÿ
+  µ
+  Ë
+  á
+  ÷
+  
+  #  9  O  e  {  ‘  §  ½  Ó  ó  	    5  K  a  w    £  ¹  Ï  å  û    '  =  S  i    •  «  Á  ×  í      '  Õ  ;  ¡  ›  I    
+   P   $  ƒ'     EditEngineItemPool è          Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ï   0 / e@  ——    
+   @   R   —*˜    
+   @   h   ™™    
+   @   ~   g*š   J  @  ¼8      
+                                    ,    StarBats      N               ÿ                 €      -            ¨ý°°              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ý`	`	              ,    StarBats      N               ÿ                 €      -            ¨ý¸¸              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýhh              ,    StarBats      N               ÿ                 €      -            ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýpp              ,    StarBats      N               ÿ                 €      -      
+                X                  ,    StarBats      N               ÿ                 €      -            ¨ý°°              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ý`	`	              ,    StarBats      N               ÿ                 €      -            ¨ý¸¸              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýhh              ,    StarBats      N               ÿ                 €      -            ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýpp              ,    StarBats      N               ÿ                 €      -      
+                  È È               ,    StarBats      N               ÿ                 €      -            ¨ý°°              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ý`	`	              ,    StarBats      N               ÿ                 €      -            ¨ý¸¸              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýhh              ,    StarBats      N               ÿ                 €      -            ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýpp              ,    StarBats      N               ÿ                 €      -      
+ Z             •ð                            €      d            |ü°°              ,    StarBats      N               ÿ                 €      -            àü`	`	              ,    StarBats      N               ÿ                 €      K            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýÀÀ              ,    StarBats      N               ÿ                 €      K            ¨ýpp              ,    StarBats      N               ÿ                 €      -            ¨ý                ,    StarBats      N               ÿ                 €      -            ¨ýÐ Ð               ,    StarBats      N               ÿ                 €      -            ¨ý€%€%              ,    StarBats      N               ÿ                 €      -            ¨ý0*0*              ,    StarBats      N               ÿ                 €      -  Z    
+                                    ,    StarBats                     ÿ                 €      -              èè              ,    StarBats                     ÿ                 €      -              ÐÐ              ,    StarBats                     ÿ                 €      -              ¸¸              ,    StarBats                     ÿ                 €      -                              ,    StarBats                     ÿ                 €      -              ˆˆ              ,    StarBats                     ÿ                 €      -              pp              ,    StarBats                     ÿ                 €      -              XX              ,    StarBats                     ÿ                 €      -              @@              ,    StarBats                     ÿ                 €      -              (#(#              ,    StarBats                     ÿ                 €      -      	                ¨ýXX              ,    StarBats      i               ÿ                 €      -            ¨ý°°              ,    StarBats      i               ÿ                 €      -            ¨ý              ,    StarBats      i               ÿ                 €      -            ¨ý`	`	              ,    StarBats      i               ÿ                 €      -            ¨ý¸¸              ,    StarBats      i               ÿ                 €      -            ¨ý              ,    StarBats      i               ÿ                 €      -            ¨ýhh              ,    StarBats      i               ÿ                 €      -            ¨ýÀÀ              ,    StarBats      i               ÿ                 €      -            ¨ý              ,    StarBats      i               ÿ                 €      -     X  X. XN Xn X\ X| ››    
+   @   ê8  œœ       @  9          X  X     !   @  =9   ! d   d üd x X  <(ž       @  ]9    "   X  
+(Ÿ   „   @  é9       €                      StarBats  °   ! -         €                      StarBats       ! -     X  XG  @'    5  @ 
+ þ:    !   d   d   d        d   d Xd        d È d   d      ,d   d |üd °   @d   d àüd `	   ¸d   d ¨ýd    hd   d ¨ýd À   d   d ¨ýd p   Èd   d ¨ýd   	  xd   d ¨ýd Ð  
+  (#d   d ¨ýd €%   Ø'd   d ¨ýd 0*     d   d ¨ýd X X  X!  X4  XG  XZ  Xm  X€  X“  X¦  X¹  XÌ  Xß  Xò  A'¡   Š   @  ¨;       d   d   d d d d   ¤d Ò d     d ôd     d d     d ,d     d È d     d d d X  X  X&  X2  X>  XJ  XV  Xb  1'¢       @  é;     d  È   X  +'£   (   @  <           '  X  X  X  '¤    
+   @   7<  !'¥       @  Y<      €      X  '¦    8   @  ™<    M    	 helvetica      timmons  X  X"  '§   Ü   @  M=     `d 
+   Nd 
+   4d 
+   d 
+   öd 
+  	 {d 
+   îd 
+  ' §d 
+   hd 
+ 	  Ûd 
+ 
+  Ád 
+   d 
+   id 
+ 
+  íd 
+   `d 
+ X  X  X"  X,  X6  X@  XJ  XT  X^  Xh  Xr  X|  X†  X  Xš  ?(¨    
+   @   Ÿ=  '©       @  ¿=       X  X  'ª       @  â=      X  '«       @  >      X  '¬       @  %>        X  X  '­       @  H>      X  '®       @  g>      X  %'¯    
+   @   >  S'°    
+   @   —>  "'±    
+   @   ­>  '²    
+   @   Ã>  $'³    
+   @   Ù>  ‰*´    
+   @   ï>  Ž*µ    
+   @   ?  ‡*¶    
+   @   ?  Œ*·    
+   @   1?  ˆ*¸   
+   @   G?  *¹   
+   @   ]?  ‹*º    
+   @   s?  *»    
+   @   ‰?  Š*¼    
+   @   Ÿ?  *½    
+   @   µ?  “*¾    
+   @   Ë?  ¿¿    
+   @   á?  ÀÀ    
+   @   ÷?  ÁÁ    
+   @   
+@  ÂÂ    
+   @   #@  ÃÃ    
+   @   9@  *Ä    
+   @   O@  {(Å    
+   @   e@      $   :   P   ¦  ¼  æ    3  à    š  ¿  ó  	  /  s  [  q  ™  ¸  ×  ÿ    =  S  i    •  «  Á  ×  í      /  E  [  q  ‡    ³  É  ß  õ     !   †  P 
+ wF  g*š  
+                ¨ýXX              ,    StarBats      N               ÿ                 €      -            ¨ý°°              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ý`	`	              ,    StarBats      N               ÿ                 €      -            ¨ý¸¸              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýhh              ,    StarBats      N               ÿ                 €      -            ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -            ¨ý              ,    StarBats      N               ÿ                 €      -            ¨ýpp              ,    StarBats      N               ÿ                 €      -   œœ    
+(Ÿ   €                      StarBats  °   ! -     !'¥   €      '¦     times  '§ Od 
+ $'³  	‰*´  	Ž*µ  	‡*¶     > Andale WT UI;MS Mincho;HG Mincho L;MS PGothic;Arial Unicode MS  Œ*·     / Simplified Arabic;Andale WT UI;Arial Unicode MS  ˆ*¸ Od 
+ *¹ Od 
+     0  8  s    “  Ÿ  §  ¯  ·    >  J ü    2   î    + ÿT   Standard   Standard     ¾é  # è¹'  éº'  ê»'  ë¼'  ì½'  í¾'  î¿'  ïÀ'  ðÁ'  ñÂ'  ú´'  ûµ'  ü¶'  ý·'  þ¸'  +;(  ,,  --  ..  šg*  œœ  Ÿ
+(   @'  ¡A'  ¢1'  £+'  ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Object with arrow Standard Object with arrow     ¿é   è¹'  ê»' ë¼'  ì½' î¿' ïÀ'  ðÁ'        Object with shadow Standard Object with shadow     Àé   +;( ,,  --  ..         Object without fill Standard Object without fill     Áé   ú´'        Text Standard Text     Âé   è¹' ú´'       	 Text body Standard	 Text body     Ãé   è¹' ú´' §'        Text body justfied Standard Text body justfied     Äé   è¹' ú´' £+'        First line indent Standard First line indent     Åé   è¹' ú´' šg*  @'        Title Standard Title     Æé   è¹' ú´' §'        Title1 Standard Title1     Çé  	 è¹' ú´'  ûµ' +;( ,,  -- .. £+' §'        Title2 Standard Title2     Èé   ê»' ûµ' +;( ,,  -- .. šg*  @' ¡A' £+' §'        Heading Standard Heading     Éé   è¹' ú´' ¡A' §'        Heading1 Standard Heading1     Êé   è¹' ú´' ¡A' §' ©'        Heading2 Standard Heading2     Ëé   è¹' ú´' ¡A' §' ©' ¬'        Dimension Line Standard Dimension Line     Ìé   è¹'  ì½' í¾' î¿' ïÀ' ú´' §'        Home~LT~Gliederung 1   Home~LT~Gliederung 1þ¯ÿß  Ïé   è¹' ú´' šg* œœ  @' ¡A' £+'  ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Gliederung 2 Home~LT~Gliederung 1 Home~LT~Gliederung 2þ¯ÿß  Ðé    @' ¡A' §'	        Home~LT~Gliederung 3 Home~LT~Gliederung 2 Home~LT~Gliederung 3þ¯ÿß  Ñé    @' ¡A' §'        Home~LT~Gliederung 4 Home~LT~Gliederung 3 Home~LT~Gliederung 4þ¯ÿß  Òé    @' ¡A' §'
+        Home~LT~Gliederung 5 Home~LT~Gliederung 4 Home~LT~Gliederung 5þ¯ÿß  Óé    @' ¡A' §'
+        Home~LT~Gliederung 6 Home~LT~Gliederung 5 Home~LT~Gliederung 6þ¯ÿß  Ôé    @' ¡A' §'
+        Home~LT~Gliederung 7 Home~LT~Gliederung 6 Home~LT~Gliederung 7þ¯ÿß  Õé    @'	 ¡A' §'
+        Home~LT~Gliederung 8 Home~LT~Gliederung 7 Home~LT~Gliederung 8þ¯ÿß  Öé    @'
+ ¡A' §'
+        Home~LT~Gliederung 9 Home~LT~Gliederung 8 Home~LT~Gliederung 9þ¯ÿß  ×é    @' ¡A' §'
+       
+ Home~LT~Titel  
+ Home~LT~Titelþ¯ÿß  Íé   è¹' ú´' QQ  šg* £+' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Untertitel   Home~LT~Untertitelþ¯ÿß  Ýé   è¹' ú´' QQ  šg*  @' £+' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Notizen   Home~LT~Notizenþ¯ÿß  Úé   è¹' ú´' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Hintergrundobjekte   Home~LT~Hintergrundobjekteþ¯ÿß  Øé   +;(  ,,  --  ..         Home~LT~Hintergrund   Home~LT~Hintergrundþ¯ÿß  Ùé   è¹' ú´'        Title   Title  @  Íé           Subtitle   Subtitle  @  Ýé           Background objects   Background objects  @  Øé          
+ Background  
+ Background  @  Ùé           Notes   Notes  @  Úé          	 Outline 1  	 Outline 1  @  Ïé          	 Outline 2	 Outline 1	 Outline 2  @  Ðé          	 Outline 3	 Outline 2	 Outline 3  @  Ñé          	 Outline 4	 Outline 3	 Outline 4  @  Òé          	 Outline 5	 Outline 4	 Outline 5  @  Óé          	 Outline 6	 Outline 5	 Outline 6  @  Ôé          	 Outline 7	 Outline 6	 Outline 7  @  Õé          	 Outline 8	 Outline 7	 Outline 8  @  Öé          	 Outline 9	 Outline 8	 Outline 9  @  ×é                t  Ð    P  ”  ê  D  €  â  P  –  ä  8  ž  >  ¤  
+  p  Ö  <  ¢  	  n	  ô	  Š
+    f  °  Ò  ú  6  b  „  ®  á  
+  G
+  z
+  ­
+  à
+                                                                                        DrMd (ì  ì  JoeMp   0   ë01Ü_U    BU1¼?    AU1t.Ë               
+      ÿÿ                               O  ö   DrLy      LAYER_LAYOUT  DrLy    
+ LAYER_BCKGRND  DrLy      LAYER_BACKGRNDOBJ  DrLy     LAYER_CONTROLS  DrLy !    LAYER_MEASURELINES  DrMP ù       '  JoeM   Çl  VT  Ð  Ð  Ð  Ð    DrML      DrOb <   SVDr &   ø  Ð  ’(  A&                     DrOb <   SVDr &   3D  Ð  Í[  A&                     DrOb <   SVDr &   ø  .  ’(  „L                     DrOb <   SVDr &   3D  .  Í[  „L                     DrXX      gg                   ž                  Home~LT~Gliederung                                   sourceforge-architecture.sda sourceforge-architecture.sda  ÿ    DrMP q       ·   JoeM   VT  Çl  {  y  ™  —    DrML      DrOb €   SVDr &   {  y  ½Q  0j               '                Home~LT~Hintergrundþ¯   {  y  ½Q  0j               DrXX      gg                   †                  Home~LT~Gliederung                  sourceforge-architecture.sda sourceforge-architecture.sda  ÿ     DrMP î       ,  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML      DrOb õ  SVDr &   º  ç
+  ›8  '0                 !         
+ Home~LT~Titelþ¯š  º  ç
+  ›8  '0          {     xV4B1 f  Z»» ÿÿ    ÿ     EditEngineItemPool è      Q   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  <     !   @  ˜     d   d üd x X  <(ž       @  ¸       X  
+(Ÿ   G   @         €                      StarBats       ! -     X  @'    !   @  8       d   d   d    X      ;   [   ®   
+   P   Z     Click to move the slide
+ Home~LT~Titelþ¯   ž<(  Ÿ
+(   @'                     DrOb    SVDr &   Ü  Ç3  ˆG  "]                 #    	    	  Home~LT~Notizenþ¯£  Ü  Ç3  ˆG  "]          „     xV4B1 o  Z»» ÿÿ    ÿ     EditEngineItemPool è      H	   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  3
+     !   @  	     d   d üd x X  <(ž       @  ¯	       X  
+(Ÿ   G   @  
+       €                      StarBats  X   ! -     X  @'    !   @  /
+       d   d ¨ýd X X      ;   [   ®   
+   P   Q
+     Click to edit the notes format Home~LT~Notizenþ¯   ž<(  Ÿ
+(   @'                    DrXX      gg                   Ž                  Home~LT~Gliederung                       sourceforge-architecture.sda sourceforge-architecture.sda  ÿ     DrPg        c   JoeM   Çl  VT  Ð  Ð  Ð  Ð    DrML 8    DrMD ,     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrXX      Handoutsgg                   ~                  Home~LT~Gliederung           sourceforge-architecture.sda sourceforge-architecture.sda  ÿ    DrPg sG       ÁF  JoeM   VT  Çl  {  y  ™  —    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb   SVDr &   D#  D  ¹0  „Q                       	 
+   
+ 
+  Standard ­  D#  D  ¹0  „Q          Ž     xV4B1 w  Z»» ÿÿ          EditEngineItemPool è      ƒ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ˆ  0  ÿ     !   @  Ê     d   d üd x X  <(ž       @  ê       X  
+(Ÿ   G   @  =       €                      StarBats       ! -     X  @'    !   @  j       d   d   d    X  +'£      @  Š      X  '¦    "   @  ¸        	 helvetica  X  '§      @  Ü     §d 
+ X  '©       @  û     X      ;   [   ®   Û   û   )  M  
+   P   -     Master Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     ¦     §      Database Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     ¦     §                       DrOb ‰  SVDr &   ¾  ;  fP  @                       	 
+   
+ 
+  Standard 3  ¾  ;  fP  @               xV4B1 ÿ  Z»» ÿÿ    |     EditEngineItemPool è      †   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   d  0  â     !   @  Í     d   d üd x X  <(ž       @  í       X  
+(Ÿ   G   @  @       €                      StarBats       ! -     X  @'    !   @  m       d   d   d    X  '¦    "   @  ›        	 helvetica  X  '§      @  ¿     §d 
+ X  '©       @  Þ     X      ;   [   ®   Û   	  -  
+   P        Database Abstraction Standard    ž<(  Ÿ
+(   @'  ¦'  §'   ©     §     ¦                     DrOb ð  SVDr &   ¾  6  fP  ˜:                       	 
+   
+ 
+  Standard š  ¾  6  fP  ˜:          {     xV4B1 f  Z»» ÿÿ    ¯     EditEngineItemPool è         Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   —  0  š     !   @  V     d   d üd x X  <(ž       @  v       X  
+(Ÿ   G   @  É       €                      StarBats       ! -     X  @'    !   @  ö       d   d   d    X  !'¥       @        €ÿÿ    X  '¦    "   @  J        	 helvetica  X  '§      @  n     §d 
+ X  '©       @  ’       X  X      ;   [   ®   Û     /  S  
+   P   È    8 Core Objects: User,Group,Project,Foundry,Permission,Pool Standard    ž<(  Ÿ
+(   @'  ¦'  §'   ©    ) §    8 ¦    8 ¥  ) 8 © ) 8                 DrOb 	  SVDr &   °  y0  û7  ÿ4                       	 
+   
+ 
+  Standard ³  °  y0  û7  ÿ4          ”     xV4B1 }  Z»» ÿÿ          EditEngineItemPool è      ÿ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ˆ  0  {     !   @  F     d   d üd x X  <(ž       @  f       X  
+(Ÿ   G   @  ¹       €                      StarBats       ! -     X  @'    !   @  æ       d   d   d    X  +'£      @        X  '¦    "   @  4        	 helvetica  X  '§      @  X     §d 
+ X  '©       @  w     X      ;   [   ®   Û   û   )  M  
+   P   ©    
+ Tool-specific Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©    
+ §    
+ ¦    
+  objects Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     §     ¦                       DrOb   SVDr &   C)  [?  Í*  ÊD                       
+       Standard         €ÿÿ€ÿÿ          ¡       þ)  D  *  @    DrCn $                           DrCn $                          ;                                           (#  xi    ÿÿ DrOb   SVDr &   Æ8  x0  @P  þ4                       	     
+  Standard È  Æ8  x0  @P  þ4          ©     xV4B1 ’  Z»» ÿÿ          EditEngineItemPool è         Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ˆ  0  –      !   @  a     d   d üd x X  <(ž       @         X  
+(Ÿ   G   @  Ô       €                      StarBats       ! -     X  @'    !   @          d   d   d    X  +'£      @  !       X  '¦    "   @  O         	 helvetica  X  '§      @  s      §d 
+ X  '©       @  ’      X      ;   [   ®   Û   û   )  M  
+   P   Ä      HTML Utility Objects Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     ¦     §      Layout,Theme,Language Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     ¦     §                       DrOb ²  SVDr &     x0  ã  þ4                       	 
+    
+  Standard \    x0  ã  þ4          =     xV4B1 (  Z»» ÿÿ          EditEngineItemPool è      8#   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ˆ  0  ´$     !   @  #     d   d üd x X  <(ž       @  Ÿ#       X  
+(Ÿ   G   @  ò#       €                      StarBats       ! -     X  @'    !   @  $       d   d   d    X  +'£      @  ?$      X  '¦    "   @  m$        	 helvetica  X  '§      @  ‘$     `d 
+ X  '©       @  °$     X      ;   [   ®   Û   û   )  M  
+   P   â$     XML Utility Objects Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     ¦     §                     DrOb ­  SVDr &   û,  Œ$  uD  )                       	     
+  Standard W  û,  Œ$  uD  )          8     xV4B1 #  Z»» ÿÿ          EditEngineItemPool è      ê&   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ˆ  0  f(     !   @  1'     d   d üd x X  <(ž       @  Q'       X  
+(Ÿ   G   @  ¤'       €                      StarBats       ! -     X  @'    !   @  Ñ'       d   d   d    X  +'£      @  ñ'      X  '¦    "   @  (        	 helvetica  X  '§      @  C(     §d 
+ X  '©       @  b(     X      ;   [   ®   Û   û   )  M  
+   P   ”(     HTML Templates Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©     ¦     §                     DrOb ë  SVDr &   š'  W(  s9  41                       
+       Standard ø      ü  €ÿÿ€ÿÿ        Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è      —*   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Ô+     !   @  Þ*     d   d üd x X  <(ž       @  þ*       X  
+(Ÿ   G   @  Q+       €                      StarBats       ! -     X  @'    !   @  ~+       d   d   d    X  '¦    "   @  ¬+        	 helvetica  X  '§      @  Ð+     §d 
+ X      ;   [   ®   Û   	  
+   P   ú+     Direct API Calls Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       U(  y0  ¸8  )    DrCn $                          DrCn $                          ;                                           (#  xi    ÿÿ DrOb ë  SVDr &   ý7  W(  >E  31                       
+       Standard ø      ü  €ÿÿ€ÿÿ        Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è      ‚.   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¿/     !   @  É.     d   d üd x X  <(ž       @  é.       X  
+(Ÿ   G   @  </       €                      StarBats       ! -     X  @'    !   @  i/       d   d   d    X  '¦    "   @  —/        	 helvetica  X  '§      @  »/     §d 
+ X      ;   [   ®   Û   	  
+   P   å/     Direct API Calls Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       ƒD  x0  ¸8  )    DrCn $                          DrCn $                          ;                                           (#  xi    ÿÿ DrOb ¬  SVDr &   †  ˜$  d$  )                       	 
+    
+  Standard V  †  ˜$  d$  )          7     xV4B1 "  Z»» ÿÿ          EditEngineItemPool è      m2   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ˆ  0  é3     !   @  ´2     d   d üd x X  <(ž       @  Ô2       X  
+(Ÿ   G   @  '3       €                      StarBats       ! -     X  @'    !   @  T3       d   d   d    X  +'£      @  t3      X  '¦    "   @  ¢3        	 helvetica  X  '§      @  Æ3     `d 
+ X  '©       @  å3     X      ;   [   ®   Û   û   )  M  
+   P   4    
+ XML Templates Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   ©    
+ ¦    
+ §    
+                 DrOb ë  SVDr &   9
+  c(  0  31                       
+       Standard ø  ¼   p  €ÿÿ€ÿÿ        Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è      6   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  V7     !   @  `6     d   d üd x X  <(ž       @  €6       X  
+(Ÿ   G   @  Ó6       €                      StarBats       ! -     X  @'    !   @   7       d   d   d    X  '¦    "   @  .7        	 helvetica  X  '§      @  R7     §d 
+ X      ;   [   ®   Û   	  
+   P   |7     Direct API Calls Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       ô
+  x0  u  )    DrCn $                          DrCn $   
+                       ;                                           (#  xi    ÿÿ DrOb ë  SVDr &   º  c(  )  41                       
+       Standard ø  ¼   p  €ÿÿ€ÿÿ        Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è      :   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  A;     !   @  K:     d   d üd x X  <(ž       @  k:       X  
+(Ÿ   G   @  ¾:       €                      StarBats       ! -     X  @'    !   @  ë:       d   d   d    X  '¦    "   @  ;        	 helvetica  X  '§      @  =;     §d 
+ X      ;   [   ®   Û   	  
+   P   g;     Direct API Calls Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       U(  y0  u  )    DrCn $                          DrCn $   
+                       ;                                           (#  xi    ÿÿ DrOb ä  SVDr &   º  §  Ê#  S%                       
+       Standard ò  N  ßþÿÿ€ÿÿ€ÿÿ        Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      ï=   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ,?     !   @  6>     d   d üd x X  <(ž       @  V>       X  
+(Ÿ   G   @  ©>       €                      StarBats       ! -     X  @'    !   @  Ö>       d   d   d    X  '¦    "   @  ?        	 helvetica  X  '§      @  (?     §d 
+ X      ;   [   ®   Û   	  
+   P   R?    
+ XML-RPC ?? Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                      u  ˜$  #  b    DrCn $   
+                       DrCn #                           ;                                           (#        ÿÿ DrOb   SVDr &   80  Q  s9  G%                       
+       Standard        Tòÿÿ€ÿÿ€ÿÿ                  ¸8  Œ$  ó0      DrCn $                          DrCn #                           ;                                           (#        ÿÿ DrOb O  SVDr &   Õ  h  DJ  Õ!                       	 
+      Standard ó  Õ  h  DJ  Õ!          Ô     xV4B1 ¿  Z»» ÿÿ    Y     EditEngineItemPool è      äB   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  !D     !   @  +C     d   d üd x X  <(ž       @  KC       X  
+(Ÿ   G   @  žC       €                      StarBats       ! -     X  @'    !   @  ËC       d   d   d    X  '¦    "   @  ùC        	 helvetica  X  '§      @  D     §d 
+ X      ;   [   ®   Û   	  
+   P   GD     Cache Server(s) Standard    ž<(  Ÿ
+(   @'  ¦'  §'                         DrOb u   SVDr &         î                       	       Standard          î               DrOb H  SVDr &     ç  è  ä                              Standard ò    ç  è  ä          Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      ¨F   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  åG     !   @  ïF     d   d üd x X  <(ž       @  G       X  
+(Ÿ   G   @  bG       €                      StarBats       ! -     X  @'    !   @  G       d   d   d    X  '¦    "   @  ½G        	 helvetica  X  '§      @  áG     §d 
+ X      ;   [   ®   Û   	  
+   P   H     Immediate Term Standard    ž<(  Ÿ
+(   @'  ¦'  §'                    DrOb u   SVDr &     Õ  ‘  «                       	 
+      Standard      Õ  ‘  «               DrOb E  SVDr &     ¤    ¡                              Standard ï    ¤    ¡          Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      eJ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¢K     !   @  ¬J     d   d üd x X  <(ž       @  ÌJ       X  
+(Ÿ   G   @  K       €                      StarBats       ! -     X  @'    !   @  LK       d   d   d    X  '¦    "   @  zK        	 helvetica  X  '§      @  žK     §d 
+ X      ;   [   ®   Û   	  
+   P   ÈK     Medium Term Standard    ž<(  Ÿ
+(   @'  ¦'  §'                    DrOb u   SVDr &     ’  ‘  h                       	       Standard      ’  ‘  h               DrOb C  SVDr &     a  ñ  ^                              Standard í    a  ñ  ^          Î     xV4B1 ¹  Z»» ÿÿ    Y     EditEngineItemPool è      N   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  \O     !   @  fN     d   d üd x X  <(ž       @  †N       X  
+(Ÿ   G   @  ÙN       €                      StarBats       ! -     X  @'    !   @  O       d   d   d    X  '¦    "   @  4O        	 helvetica  X  '§      @  XO     §d 
+ X      ;   [   ®   Û   	  
+   P   ‚O    	 Long Term Standard    ž<(  Ÿ
+(   @'  ¦'  §'                    DrOb   SVDr &   g  }  p4  C                              Standard )  g  }  p4  C          
+     xV4B1 õ  Z»» ÿÿ    |     EditEngineItemPool è      bQ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   d  0  ¾R     !   @  ©Q     d   d üd x X  <(ž       @  ÉQ       X  
+(Ÿ   G   @  R       €                      StarBats       ! -     X  @'    !   @  IR       d   d   d    X  '¦    "   @  wR        	 helvetica  X  '§      @  ›R     `d 
+ X  '©       @  ºR     X      ;   [   ®   Û   	  -  
+   P   èR     System Model Standard    ž<(  Ÿ
+(   @'  ¦'  §'  ©'   ©     §                     DrXX      gg                   ~                  Home~LT~Gliederung            sourceforge-architecture.sda sourceforge-architecture.sda  ÿ     DrPg U       “  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb <   SVDr &   º  ç
+  ›8  '0                      DrOb ô  SVDr &   Ü  Ç3  ˆG  #]                   #    	    
+  Home~LT~Notizenþ¯—  Ü  Ç3  ˆG  #]          x     xV4B1 c  Z»» ÿÿ    ÿ     EditEngineItemPool è      9V   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  $W     !   @  €V     d   d üd x X  <(ž       @   V       X  
+(Ÿ   G   @  óV       €                      StarBats  X   ! -     X  @'    !   @   W       d   d ¨ýd X X      ;   [   ®   
+   P   BW     Click to add notes Home~LT~Notizenþ¯   ž<(  Ÿ
+(   @'                    DrXX      gg                   Ž                  Home~LT~Gliederung                       sourceforge-architecture.sda sourceforge-architecture.sda  ÿ     DrPg 3J       ¹I  JoeM   VT  Çl  {  y  ™  —    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb I  SVDr &   x"  yV  ³/  ;Z                       	       Standard ó  x"  yV  ³/  ;Z          Ô     xV4B1 ¿  Z»» ÿÿ    Y     EditEngineItemPool è      KZ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ˆ[     !   @  ’Z     d   d üd x X  <(ž       @  ²Z       X  
+(Ÿ   G   @  [       €                      StarBats       ! -     X  @'    !   @  2[       d   d   d    X  '¦    "   @  `[        	 helvetica  X  '§      @  „[     íd 
+ X      ;   [   ®   Û   	  
+   P   ®[     Error.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb L  SVDr &   v  Ð7  6  ”>                       	       Standard ö  v  Ð7  6  ”>          ×     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      ”]   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Ñ^     !   @  Û]     d   d üd x X  <(ž       @  û]       X  
+(Ÿ   G   @  N^       €                      StarBats       ! -     X  @'    !   @  {^       d   d   d    X  '¦    "   @  ©^        	 helvetica  X  '§      @  Í^     íd 
+ X      ;   [   ®   Û   	  
+   P   ÷^     Artifact.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb P  SVDr &   á
+     +  Ä                       	       Standard ú  á
+     +  Ä          Û     xV4B1 Æ  Z»» ÿÿ    Y     EditEngineItemPool è      à`   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  b     !   @  'a     d   d üd x X  <(ž       @  Ga       X  
+(Ÿ   G   @  ša       €                      StarBats       ! -     X  @'    !   @  Ça       d   d   d    X  '¦    "   @  õa        	 helvetica  X  '§      @  b     íd 
+ X      ;   [   ®   Û   	  
+   P   Cb     ArtifactHtml.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb O  SVDr &   p,     M  Ä                       	       Standard ù  p,     M  Ä          Ú     xV4B1 Å  Z»» ÿÿ    Y     EditEngineItemPool è      0d   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  me     !   @  wd     d   d üd x X  <(ž       @  —d       X  
+(Ÿ   G   @  êd       €                      StarBats       ! -     X  @'    !   @  e       d   d   d    X  '¦    "   @  Ee        	 helvetica  X  '§      @  ie     íd 
+ X      ;   [   ®   Û   	  
+   P   “e     ArtifactXML.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb â  SVDr &   P  ã  *  ±8                              Standard ï      Ä	  €ÿÿ€ÿÿ        Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      g   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¼h     !   @  Æg     d   d üd x X  <(ž       @  æg       X  
+(Ÿ   G   @  9h       €                      StarBats       ! -     X  @'    !   @  fh       d   d   d    X  '¦    "   @  ”h        	 helvetica  X  '§      @  ¸h     §d 
+ X      ;   [   ®   Û   	  
+   P   âh     Extends Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       1  Ä  =)  Ð7    DrCn $                         DrCn $                           ;                                           xi  (#    ÿÿ DrOb â  SVDr &   \(  ã  ¡=  ±8                              Standard ï  á   ¥
+  €ÿÿ€ÿÿ        Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      ak   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  žl     !   @  ¨k     d   d üd x X  <(ž       @  Èk       X  
+(Ÿ   G   @  l       €                      StarBats       ! -     X  @'    !   @  Hl       d   d   d    X  '¦    "   @  vl        	 helvetica  X  '§      @  šl     §d 
+ X      ;   [   ®   Û   	  
+   P   Äl     Extends Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       À<  Ä  =)  Ð7    DrCn $                         DrCn $                           ;                                           xi  (#    ÿÿ DrOb â  SVDr &   <&  ³=  ,  ZW                              Standard ï  á   ¥
+  €ÿÿ€ÿÿ        Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      Co   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  €p     !   @  Šo     d   d üd x X  <(ž       @  ªo       X  
+(Ÿ   G   @  ýo       €                      StarBats       ! -     X  @'    !   @  *p       d   d   d    X  '¦    "   @  Xp        	 helvetica  X  '§      @  |p     §d 
+ X      ;   [   ®   Û   	  
+   P   ¦p     Extends Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       =)  ”>  )  yV    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb ‡  SVDr &   _    Ë;  ß                              Standard 1  _    Ë;  ß               xV4B1 ý  Z»» ÿÿ    |     EditEngineItemPool è      %s   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   d  0  t     !   @  ls     d   d üd x X  <(ž       @  Œs       X  
+(Ÿ   G   @  ßs       €                      StarBats       ! -     X  @'    !   @  t       d   d   d    X  '¦    "   @  :t        	 helvetica  X  '§      @  ^t     `d 
+ X  '©       @  }t     X      ;   [   ®   Û   	  -  
+   P   «t     Example System Model Standard    ž<(  Ÿ
+(   @'  ¦'  §'  ©'   ©     §                     DrOb O  SVDr &   è  _
+  ˆ(  #                       	       Standard ù  è  _
+  ˆ(  #          Ú     xV4B1 Å  Z»» ÿÿ    Y     EditEngineItemPool è      ¬v   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  éw     !   @  óv     d   d üd x X  <(ž       @  w       X  
+(Ÿ   G   @  fw       €                      StarBats       ! -     X  @'    !   @  “w       d   d   d    X  '¦    "   @  Áw        	 helvetica  X  '§      @  åw     íd 
+ X      ;   [   ®   Û   	  
+   P   x     Html-template.tpl Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb ç  SVDr &   —  B  Ó  á                              Standard ô  }üÿÿEýÿÿ€ÿÿ€ÿÿ        Õ     xV4B1 À  Z»» ÿÿ    Y     EditEngineItemPool è      ûy   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  8{     !   @  Bz     d   d üd x X  <(ž       @  bz       X  
+(Ÿ   G   @  µz       €                      StarBats       ! -     X  @'    !   @  âz       d   d   d    X  '¦    "   @  {        	 helvetica  X  '§      @  4{     §d 
+ X      ;   [   ®   Û   	  
+   P   ^{     Instantiates Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       8  #  1       DrCn $                         DrCn $                           ;                                           xi  (#    ÿÿ DrOb N  SVDr &   …/  _
+  %P  #                       	       Standard ø  …/  _
+  %P  #          Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è      â}   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0       !   @  )~     d   d üd x X  <(ž       @  I~       X  
+(Ÿ   G   @  œ~       €                      StarBats       ! -     X  @'    !   @  É~       d   d   d    X  '¦    "   @  ÷~        	 helvetica  X  '§      @       íd 
+ X      ;   [   ®   Û   	  
+   P   E     Xml-template.tpl Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb ç  SVDr &   -:  B  iB  á                              Standard ô  ^(  ýÿÿ€ÿÿ€ÿÿ        Õ     xV4B1 À  Z»» ÿÿ    Y     EditEngineItemPool è      0   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  m‚     !   @  w     d   d üd x X  <(ž       @  —       X  
+(Ÿ   G   @  ê       €                      StarBats       ! -     X  @'    !   @  ‚       d   d   d    X  '¦    "   @  E‚        	 helvetica  X  '§      @  i‚     §d 
+ X      ;   [   ®   Û   	  
+   P   “‚     Instantiates Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       Õ?  #  À<       DrCn $   
+                      DrCn $                           ;                                           xi  (#    ÿÿ DrOb    SVDr &   6  H  6  Œg                       	       Standard        ,  €ÿÿ€ÿÿØÜÿÿ              6  H  6  Œg    DrOb    SVDr &   7  ï&  QK  ï&                       	       Standard            €ÿÿ€ÿÿ                  7  ï&  QK  ï&    DrOb    SVDr &   7  §K  QK  §K                       	       Standard        ¸$  €ÿÿ€ÿÿ                  7  §K  QK  §K    DrOb ±  SVDr &   C  ñ-  ©,  Ç6                              Standard [  C  ñ-  ©,  Ç6          <     xV4B1 !  Z»» ÿÿ    g     EditEngineItemPool è      Ć   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   O  0  ˆ     !   @  ‡     d   d üd x X  <(ž       @  +‡       X  
+(Ÿ   G   @  ~‡       €                      StarBats       ! -     X  @'    !   @  «‡       d   d   d    X  '¦    "   @  Ù‡        	 helvetica  X  '§   &   @  ˆ     {d 
+   §d 
+ X  X      ;   [   ®   Û   	  
+   P   5ˆ     Core Tool Objects: Standard    ž<(  Ÿ
+(   @'  ¦'  §'    - -Objects common to any presentation interface Standard    ž<(  Ÿ
+(   @'  ¦'  §'   §   - 7 -Core logic such as permissions, creation, updates, etc Standard    ž<(  Ÿ
+(   @'  ¦'  §'   §   7 3 -standard create(), update(), fetchdata() functions Standard    ž<(  Ÿ
+(   @'  ¦'  §'   §   3                       DrOb â  SVDr &   ï  b   R:  @%                              Standard Œ  ï  b   R:  @%          m     xV4B1 V  Z»» ÿÿ    g     EditEngineItemPool è      u‹   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   O  0  ÀŒ     !   @  ¼‹     d   d üd x X  <(ž       @  Ü‹       X  
+(Ÿ   G   @  /Œ       €                      StarBats       ! -     X  @'    !   @  \Œ       d   d   d    X  '¦    "   @  ŠŒ        	 helvetica  X  '§   &   @  ¸Œ     {d 
+   §d 
+ X  X      ;   [   ®   Û   	  
+   P   æŒ    
+ Presentation: Standard    ž<(  Ÿ
+(   @'  ¦'  §'    M Templates and interface-specific reusable libraries, error handling/reporting Standard    ž<(  Ÿ
+(   @'  ¦'  §'   §   M                   DrOb Ù  SVDr &   i  ùO  à0  ×T                              Standard ƒ  i  ùO  à0  ×T          d     xV4B1 M  Z»» ÿÿ    g     EditEngineItemPool è      W   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   O  0  ¢     !   @  ž     d   d üd x X  <(ž       @  ¾       X  
+(Ÿ   G   @         €                      StarBats       ! -     X  @'    !   @  >       d   d   d    X  '¦    "   @  l        	 helvetica  X  '§   &   @  š     {d 
+   §d 
+ X  X      ;   [   ®   Û   	  
+   P   Ȑ     Core System Objects: Standard    ž<(  Ÿ
+(   @'  ¦'  §'    = -Libraries and objects that are used by all systems and tools Standard    ž<(  Ÿ
+(   @'  ¦'  §'   §   =                   DrOb K  SVDr &   ë  ºX  &  |\                       	       Standard õ  ë  ºX  &  |\          Ö     xV4B1 Á  Z»» ÿÿ    Y     EditEngineItemPool è      0“   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  m”     !   @  w“     d   d üd x X  <(ž       @  —“       X  
+(Ÿ   G   @  ê“       €                      StarBats       ! -     X  @'    !   @  ”       d   d   d    X  '¦    "   @  E”        	 helvetica  X  '§      @  i”     íd 
+ X      ;   [   ®   Û   	  
+   P   “”    
+ Project.class Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                 DrOb I  SVDr &   [  °]  –'  ra                       	       Standard ó  [  °]  –'  ra          Ô     xV4B1 ¿  Z»» ÿÿ    Y     EditEngineItemPool è      {–   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¸—     !   @  –     d   d üd x X  <(ž       @  â–       X  
+(Ÿ   G   @  5—       €                      StarBats       ! -     X  @'    !   @  b—       d   d   d    X  '¦    "   @  —        	 helvetica  X  '§      @  ´—     íd 
+ X      ;   [   ®   Û   	  
+   P   Þ—     Group.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb H  SVDr &   #2  º\  ^?  |`                       	       Standard ò  #2  º\  ^?  |`          Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      Ä™   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ›     !   @  š     d   d üd x X  <(ž       @  +š       X  
+(Ÿ   G   @  ~š       €                      StarBats       ! -     X  @'    !   @  «š       d   d   d    X  '¦    "   @  Ùš        	 helvetica  X  '§      @  ýš     íd 
+ X      ;   [   ®   Û   	  
+   P   '›    
+ User.class Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                 DrOb N  SVDr &   k<  ÄS  OJ  †W                       	       Standard ø  ¿<  ÄS  úI  †W          Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è         Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Iž     !   @  S     d   d üd x X  <(ž       @  s       X  
+(Ÿ   G   @  Ɲ       €                      StarBats       ! -     X  @'    !   @  ó       d   d   d    X  '¦    ýÿÿÿ‚   ƒ   „   …   †   ‡   ˆ   ‰   Š   ‹   Œ      Ž         ‘   ’   “   ”   •   –   —   ˜   ™   š   ›   œ      ž   Ÿ       ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   þÿÿÿ«   ¬   þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"   @  !ž        	 helvetica  X  '§      @  Ež     íd 
+ X      ;   [   ®   Û   	  
+   P   ož     Permission.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb G  SVDr &   ½*  ³c  ø7  ug                       	       Standard ñ  ½*  ³c  ø7  ug          Ò     xV4B1 ½  Z»» ÿÿ    Y     EditEngineItemPool è      Z    Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  —¡     !   @  ¡      d   d üd x X  <(ž       @  Á        X  
+(Ÿ   G   @  ¡       €                      StarBats       ! -     X  @'    !   @  A¡       d   d   d    X  '¦    "   @  o¡        	 helvetica  X  '§      @  “¡     íd 
+ X      ;   [   ®   Û   	  
+   P   ½¡    	 Foo.class Standard    ž<(  Ÿ
+(   @'   ¦    	 §    	                 DrXX      gg                   F                  Home~LT~Gliederung                 ÿ     DrPg        “  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb <   SVDr &   º  ç
+  ›8  '0                      DrOb ô  SVDr &   Ü  Ç3  ˆG  #]                   #   
+     
+  Home~LT~Notizenþ¯—  Ü  Ç3  ˆG  #]          x     xV4B1 c  Z»» ÿÿ    ÿ     EditEngineItemPool è      Á¤   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  ¬¥     !   @  ¥     d   d üd x X  <(ž       @  (¥       X  
+(Ÿ   G   @  {¥       €                      StarBats  X   ! -     X  @'    !   @  ¨¥       d   d ¨ýd X X      ;   [   ®   
+   P   Ê¥     Click to add notes Home~LT~Notizenþ¯   ž<(  Ÿ
+(   @'                    DrXX      gg                   V                  Home~LT~Gliederung                            ÿ     DrPg á@       g@  JoeM   VT  Çl  {  y  ™  —    DrLy      Layout  DrLy    
+ Background  DrLy !    Background objects  DrLy     Controls  DrLy     Dimension Lines  DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb I  SVDr &     ¹\  M'  {`                       	       Standard ó    ¹\  M'  {`          Ô     xV4B1 ¿  Z»» ÿÿ    Y     EditEngineItemPool è      ©   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  \ª     !   @  f©     d   d üd x X  <(ž       @  †©       X  
+(Ÿ   G   @  Ù©       €                      StarBats       ! -     X  @'    !   @  ª       d   d   d    X  '¦    "   @  4ª        	 helvetica  X  '§      @  Xª     íd 
+ X      ;   [   ®   Û   	  
+   P   ‚ª     Error.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb Q  SVDr &     ¤)  ¨=  h0                       	       Standard û    ¤)  ¨=  h0          Ü     xV4B1 Ç  Z»» ÿÿ    Y     EditEngineItemPool è      h¬   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¥­     !   @  ¯¬     d   d üd x X  <(ž       @  Ϭ       X  
+(Ÿ   G   @  "­       €                      StarBats       ! -     X  @'    !   @  O­       d   d   d    X  '¦    "   @  }­        	 helvetica  X  '§      @  ¡­     íd 
+ X      ;   [   ®   Û   	  
+   P   Ë­     Member (user_group) Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb â  SVDr &   ¹  S  ”#  š]                              Standard ï  ­øÿÿå  €ÿÿ€ÿÿ        Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      ¹¯   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ö°     !   @   °     d   d üd x X  <(ž       @   °       X  
+(Ÿ   G   @  s°       €                      StarBats       ! -     X  @'    !   @   °       d   d   d    X  '¦    "   @  ΰ        	 helvetica  X  '§      @  ò°     §d 
+ X      ;   [   ®   Û   	  
+   P   ±     Extends Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡          þS  ¯   ¹\    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb º  SVDr &   \     P  Ë                              Standard d  \     P  Ë          E     xV4B1 &  Z»» ÿÿ    ·     EditEngineItemPool è      ›³   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   Ÿ  0  .µ     !   @  â³     d   d üd x X  <(ž       @  ´       X  
+(Ÿ   G   @  U´       €                      StarBats       ! -     X  @'    !   @  ‚´       d   d   d    X  +'£      @  ¢´      X  '¦    "   @  д        	 helvetica  X  '§   &   @  þ´     `d 
+   §d 
+ X  X  '©       @  &µ       X  X      ;   [   ®   Û   û   )  [  
+   P   \µ     Permissions Model Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'  ©'   ©     §        Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'  ©'   §     ©     b SourceForge's permission model is group-based. To have any permissions, you must be a member of a  Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'  ©'   §   b ©   b g group (a corresponding entry in the user_group table in the database). You then have permission levels  Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'  ©'   §   g ©   g 3 for that group's objects only (tracker, docs, etc). Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'  ©'   §   3 ©   3 U There is currently no concept of cross-group permissions except as a site super-user. Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'  ©'   §   U ©   U                           DrOb J  SVDr &   ¼  O  \'                         	       Standard ô  ¼  O  \'            Õ     xV4B1 À  Z»» ÿÿ    Y     EditEngineItemPool è      Uº   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ’»     !   @  œº     d   d üd x X  <(ž       @  ¼º       X  
+(Ÿ   G   @  »       €                      StarBats       ! -     X  @'    !   @  <»       d   d   d    X  '¦    "   @  j»        	 helvetica  X  '§      @  Ž»     íd 
+ X      ;   [   ®   Û   	  
+   P   ¸»     User (users) Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb Ý  SVDr &   +  2  9.  …*                              Standard ê  }üÿÿEýÿÿ€ÿÿ€ÿÿ        Ë     xV4B1 ¶  Z»» ÿÿ    Y     EditEngineItemPool è      Ÿ½   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ܾ     !   @  æ½     d   d üd x X  <(ž       @  ¾       X  
+(Ÿ   G   @  Y¾       €                      StarBats       ! -     X  @'    !   @  †¾       d   d   d    X  '¦    "   @  ´¾        	 helvetica  X  '§      @  ؾ     §d 
+ X      ;   [   ®   Û   	  
+   P   ¿     Is Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡           X-  ¤)    DrCn $                         DrCn $                           ;                                           xi  (#    ÿÿ DrOb K  SVDr &   ‹  ½C  Æ  G                       	       Standard õ  ‹  ½C  Æ  G          Ö     xV4B1 Á  Z»» ÿÿ    Y     EditEngineItemPool è      |Á   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¹Â     !   @  ÃÁ     d   d üd x X  <(ž       @  ãÁ       X  
+(Ÿ   G   @  6       €                      StarBats       ! -     X  @'    !   @  c       d   d   d    X  '¦    "   @  ‘        	 helvetica  X  '§      @  µÂ     íd 
+ X      ;   [   ®   Û   	  
+   P   ß    
+ Project.class Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                 DrOb I  SVDr &      <P  ;'  þS                       	       Standard ó     <P  ;'  þS          Ô     xV4B1 ¿  Z»» ÿÿ    Y     EditEngineItemPool è      ÇÄ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Æ     !   @  Å     d   d üd x X  <(ž       @  .Å       X  
+(Ÿ   G   @  Å       €                      StarBats       ! -     X  @'    !   @  ®Å       d   d   d    X  '¦    "   @  ÜÅ        	 helvetica  X  '§      @   Æ     íd 
+ X      ;   [   ®   Û   	  
+   P   *Æ     Group.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb H  SVDr &   P;  'P  ‹H  éS                       	       Standard ò  P;  'P  ‹H  éS          Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      È   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  MÉ     !   @  WÈ     d   d üd x X  <(ž       @  wÈ       X  
+(Ÿ   G   @  ÊÈ       €                      StarBats       ! -     X  @'    !   @  ÷È       d   d   d    X  '¦    "   @  %É        	 helvetica  X  '§      @  IÉ     íd 
+ X      ;   [   ®   Û   	  
+   P   sÉ    
+ User.class Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                 DrOb N  SVDr &   Ç3  \\  PD  `                       	       Standard ø  Ç3  \\  PD  `          Ù     xV4B1 Ä  Z»» ÿÿ    Y     EditEngineItemPool è      XË   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  •Ì     !   @  ŸË     d   d üd x X  <(ž       @  ¿Ë       X  
+(Ÿ   G   @  Ì       €                      StarBats       ! -     X  @'    !   @  ?Ì       d   d   d    X  '¦    "   @  mÌ        	 helvetica  X  '§      @  ‘Ì     íd 
+ X      ;   [   ®   Û   	  
+   P   »Ì     Permission.class Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb K  SVDr &   þ"  ÅC  90  ‡G                       	       Standard õ  þ"  ÅC  90  ‡G          Ö     xV4B1 Á  Z»» ÿÿ    Y     EditEngineItemPool è      ¦Î   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ãÏ     !   @  íÎ     d   d üd x X  <(ž       @  
+Ï       X  
+(Ÿ   G   @  `Ï       €                      StarBats       ! -     X  @'    !   @  Ï       d   d   d    X  '¦    "   @  »Ï        	 helvetica  X  '§      @  ßÏ     íd 
+ X      ;   [   ®   Û   	  
+   P   	Ð    
+ Foundry.class Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                 DrOb â  SVDr &   G  žF  ~!  Q                              Standard ï  qïÿÿô  €ÿÿ€ÿÿ        Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      ñÑ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  .Ó     !   @  8Ò     d   d üd x X  <(ž       @  XÒ       X  
+(Ÿ   G   @  «Ò       €                      StarBats       ! -     X  @'    !   @  ØÒ       d   d   d    X  '¦    "   @  Ó        	 helvetica  X  '§      @  *Ó     §d 
+ X      ;   [   ®   Û   	  
+   P   TÓ     Extends Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       (  G     <P    DrCn $                         DrCn $                           ;                                           xi  (#    ÿÿ DrOb â  SVDr &   ¼  ¦F  |*  Q                              Standard ï  yûÿÿÇ  €ÿÿ€ÿÿ        Ð     xV4B1 »  Z»» ÿÿ    Y     EditEngineItemPool è      ÓÕ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ×     !   @  Ö     d   d üd x X  <(ž       @  :Ö       X  
+(Ÿ   G   @  Ö       €                      StarBats       ! -     X  @'    !   @  ºÖ       d   d   d    X  '¦    "   @  èÖ        	 helvetica  X  '§      @  ×     §d 
+ X      ;   [   ®   Û   	  
+   P   6×     Extends Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       ›)  ‡G     <P    DrCn $   
+                      DrCn $                           ;                                           xi  (#    ÿÿ DrOb à  SVDr &   ¼  S  ì<  =]                              Standard í  SðÿÿÖ  €ÿÿ€ÿÿ        Î     xV4B1 ¹  Z»» ÿÿ    Y     EditEngineItemPool è      µÙ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  òÚ     !   @  üÙ     d   d üd x X  <(ž       @  Ú       X  
+(Ÿ   G   @  oÚ       €                      StarBats       ! -     X  @'    !   @  œÚ       d   d   d    X  '¦    "   @  ÊÚ        	 helvetica  X  '§      @  îÚ     §d 
+ X      ;   [   ®   Û   	  
+   P   Û     Param Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡          þS  <  \\    DrCn $                         DrCn $   	                        ;                                           xi  (#    ÿÿ DrOb à  SVDr &   *;  S  ÎB  =]                              Standard í  4ñÿÿ·  €ÿÿ€ÿÿ        Î     xV4B1 ¹  Z»» ÿÿ    Y     EditEngineItemPool è      •Ý   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ÒÞ     !   @  ÜÝ     d   d üd x X  <(ž       @  üÝ       X  
+(Ÿ   G   @  OÞ       €                      StarBats       ! -     X  @'    !   @  |Þ       d   d   d    X  '¦    "   @  ªÞ        	 helvetica  X  '§      @  ÎÞ     §d 
+ X      ;   [   ®   Û   	  
+   P   øÞ     Param Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       íA  éS  <  \\    DrCn $                         DrCn $   	                        ;                                           xi  (#    ÿÿ DrOb L  SVDr &   ø-  O  ˜N                         	       Standard ö  ø-  O  ˜N            ×     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      uá   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ²â     !   @  ¼á     d   d üd x X  <(ž       @  Üá       X  
+(Ÿ   G   @  /â       €                      StarBats       ! -     X  @'    !   @  \â       d   d   d    X  '¦    "   @  Šâ        	 helvetica  X  '§      @  ®â     íd 
+ X      ;   [   ®   Û   	  
+   P   Øâ     Group (groups) Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb Þ  SVDr &   w,  2  )?  …*                              Standard ë  Ñ  Eýÿÿ€ÿÿ€ÿÿ        Ì     xV4B1 ·  Z»» ÿÿ    Y     EditEngineItemPool è      Áä   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  þå     !   @  å     d   d üd x X  <(ž       @  (å       X  
+(Ÿ   G   @  {å       €                      StarBats       ! -     X  @'    !   @  ¨å       d   d   d    X  '¦    "   @  Öå        	 helvetica  X  '§      @  úå     §d 
+ X      ;   [   ®   Û   	  
+   P   $æ     Has Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       H>    X-  ¤)    DrCn $                         DrCn $                           ;                                           xi  (#    ÿÿ DrXX      gg                   F                  Home~LT~Gliederung                 ÿ     DrPg ™         JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrLy      Layout  DrLy    
+ Background  DrLy !    Background objects  DrLy     Controls  DrLy     Dimension Lines  DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb <   SVDr &   º  ç
+  ›8  '0                      DrOb ô  SVDr &   Ü  Ç3  ˆG  #]                   #   
+     
+  Home~LT~Notizenþ¯—  Ü  Ç3  ˆG  #]          x     xV4B1 c  Z»» ÿÿ    ÿ     EditEngineItemPool è      Cê   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  .ë     !   @  Šê     d   d üd x X  <(ž       @  ªê       X  
+(Ÿ   G   @  ýê       €                      StarBats  X   ! -     X  @'    !   @  *ë       d   d ¨ýd X X      ;   [   ®   
+   P   Lë     Click to add notes Home~LT~Notizenþ¯   ž<(  Ÿ
+(   @'                    DrXX      gg                   N                  Home~LT~Gliederung                      ÿ     DrXX    þ          º þÿ                                                                                                                                                                                    	     DrVw P     SVDr€  
+   SVDr  :   SVDr    ö  ö  þ   þ   ö     ö                SVDrA  Layout  :   SVDr         è  è         þ      þ         SVDr  Ü        #   SVDr                            SVDr#            SVDr0     SVDr1    SVDr3    SVDr4    SVDr@ SVDr     SVDrD     SVDrP    SVDrQ Â    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrHL      DrHL      DrHL       ‘ñÿÿÚ  c  Vk                                                
+                                                                                                                                                                                                                              R o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ    ‰.½…щР€)ä°±                       À       C o m p O b j                                                         ÿÿÿÿ                                        =        O l e                                                         
+  ÿÿÿÿÿÿÿÿÿÿÿÿ                                              p e r s i s t   e l e m e n t s                                 "        ÿÿÿÿ                                              S f x D o c u m e n t I n f o                                         ÿÿÿÿÿÿÿÿ                                       u      S f x W i n d o w s                                               ÿÿÿÿ   ÿÿÿÿ                                              S f x S t y l e S h e e t s                                       ÿÿÿÿÿÿÿÿÿÿÿÿ                                       «U       S u m m a r y I n f o r m a t i o n                           (     ÿÿÿÿÿÿÿÿ                                       (      S t a r D r a w D o c u m e n t 3                               $  ÿÿÿÿÿÿÿÿÿÿÿÿ                                    1   &ï                                                                          ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,288 @@
+GIF89a¢Mð    ÿ ÿÿ,    ¢M‡    ÿÿÿ33€€€ææÿÿÿÿ   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ÿ H° Áƒ*\È°¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sº,À³§ÏŸ@ƒ
+J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãʝkv Ý»xóêÝË·¯ß¿€L¸°áÈ+^̸ñU»Ž#KžL¹²å˘3kÞ̹³çÏ Cÿ…,º´éÓ¨S«^ͺµë×°cËÆLz¶íÛ¸sëÞÍ»·ïßÀƒï®-¼¸ñãÈ“+_μ¹ó癉CŸN½ºõëسkßÎý³ôîàËÿO¾¼ùóè™OϾ½û÷ðãËŸO¿ëúúøóëßÏ¿¿ÿÿ²Ýà€hà&¨ V.èàƒF(á„f×`…f¨á†vè¡c~(âˆ$–hâ‰(.bŠ,¶èâ‹0ƈߊ2Öhã8æ¨#o4îèã@)䐄õHä‘H&©ä’LBed“PF)å”TÆød•Xf©å–\xe| „)æ˜d–iæ™h¦©æšl¶éæ›pÆIf—tÖi'˜ræ©çžeæõ%{c è „j衈&ªè¢Œ6ê裐F*i¡sÞ)Ÿ˜fªé¦œvê駠Vúb¨¤–jꩨ¦ªêª™~褰Æÿ*«¡cÎõ'z ̪뮼öê믃`iSµëT±%"klg¢V&°ÐFKh˜qÝZÞ³Òf«í¶Ü.*ìg¬êµËRE®ˆß–{Zº—æÚí»³žË–µã¹ï½øæ+«¼–½ªo¤Ê®Ë®ºSñ›¡Á‡6ð±ÿ6ì(Âuõg¯ÃWÜð‘akñ¤b®›pVGˆñÇ
+|”Ƨ,hÈbÑÞÄ*Ç,ó¯&'†ò̐²|™Î$?Å3‚5÷.±8ËôW.ssÑL7ýèÑ„-ít£PKVµÐÇRx5Öšm]€ÔSÿë5VIkvØh£=ö^7§Íèύ­ÍuRrëW·ÙDÝÍ“ÞJ+ÿu¶ÛïòUÙØý
+øá3—áˆÓº™âfõÙ•â_U9c—·.¦ie¾\º5ƒž5~W3Þx¶ž'Eøu¦ŸîºØŠµþ:©ßU;XÃ=ú¥rÝ~˜ïbù«vÀ^oÜØrßÔ²ÏNóY«W×¼óÔo«<îÕ¿Ùõ[a\;å½»Æ}÷Ô_?~kÍ~}n­Âæ¾÷ÞÍnÇ?u|þlGOŸ}¼Ðקÿþ ôÕý@@E
+ð,tVPr·>ŸÌï}Èš¿Òg?¡ÄO^í› 1¨> Hpa„Ÿî“À‚ýiÊ+¡iÜ÷¾~­'í«Ÿ¿Å¡ˆÎ…/„ßµŠrÂJj€Ñ›NÿW&¦`!jbd¢TØ¶iÝMÓZÙõõ,w
+1g†¹"âT.òn0cqHÃŽñ†cœ!½ç@1ž‘†2T£Á(ÇÂэŽñ"Ñ 8Bb‘çŽb¼!‰Gâ0‡5¬WÞ|È- ú/V(³â¥E#VÒ‰ÁZšÆš6IÊpZü¤%CIµÂpz,ž)
+™FDº-ä!ÇZº²i$$.M&Ë[Ò²˜Ì)qv»T
+l–rÔåéÁCöÒ˜©á%#1úœPjž¼$6-yIÚ‰’›Ý¤$¥À™3hi²[ÐdÊ0Q9™tú‘Ž,,# ãéÌ>ÓžÍÜ%.—©ÿOVÒs—îìÞ_ÖIL­”Y!™ _‰Çåž­<hi:MëUS>=üÛ9Å©MZ…“£Û§G¥è/{•´ˆDD"ížøÉ"fs¥0ÇCдIÔ\Yôgá8ϝÖS„Mdý>X,3¾±R¼üi"ûHB¿Ô´ X¹ifþ™ÏeõÌSª-¹ÀŠZ”,A|Î5½5RŽ–¤‰z©HÉ)ÎHRR¥hm«Z;9Jnšô£X$¡WÓjµœVµ†1t¨V#:Xfn™„5êVûùK`2U˜|y*T-תƒ¡WÝ`V	ËÙvu¯Òº_X3V²²µ‰0E)[ë:ÉÕÞµ’/}­7aÛÑÖÿz2¦q…•T	ZÇe̯µìËYˆZ¶•d,,÷yY2¶¹ˆÛzK»¨Vö°u$úP†¾r·Có u£%Zkêömx…éZs;Ò³áv½ïµbHgËÚ¶¦•µñ%%x?É%–“bû}ç*±ëÝV™´#³[Hú8©u|crÛ9]êV.Àý²è&HÜ¥Â2ošõ µ0̎לeíò΋^úÞ÷´«}ë‹aLÎؾ×ųŭFñ[&Lò/0W¼ñà Ù+ûíwé[#ìS%uÄ&®f¨Xd:¹
+5XÕ÷XÈæE²M»°„¾‡+ñžøy`5/‹
+hÖùnÔÿ¬ì¥q7ãK+ÙÒ9Š;–1Ž[º/½î묨`cddœâÌNƒ\¡£èÅŠÇÄgtšç“ÑoêÙµrÞ³‹ç[ãõæ8·²½tJÙ¬ç;Ã9¯ÂŒW{WšI¸¶ºÎ&U폃‰"¡îìË‘nôƒ´|¦“1׳Œ´¤Ç¢âëÖÕ™´tœq¼IMÆZÙÌilÁig@—5›ÕŽq)ýLdmº:Ôà¶ë°³héýz{¸Îµ¡kD¼?šYØ»*¯šûËÉNʔӣN+j£NlËšÕù†3(ë«^'î{Û@Ž—7-íNó{˜åæ!‹Ú}ëC|s³
+¤á­+ySšã .Z¹ƒ<ã‡;œ®Eÿtƃgñ‹¯{å°Ù8È!™âGÎ\l"§©ª[kò”¾
+弊8ˆaŽ»–«»`D×»o>ÓIœé÷:xÅF¾se›èžž5¹“î*£=*BçzÑëuÝÖÜæe‡wÄIÎó«7œ¶)›Ø'çõ3.ìs§;ÙÓ°³£ïã:Û¡mûŠûÔ4—{Þ
+Z÷ß}ñ«‘9àµçô¿OÞ«a¼µeÓ¶ý[êOS9ä)k;Ž?~ô¨‘üåùZùy¯¾¢™w¢C¯xÔ+°ôjGºíW¸ô×Ñï¤óý4ñ>{ÓXôèÚœœÆrÓâ'Z÷U¾¸¾,ý<Q¿úqYï…O)àŸû|DŒÿóK~1äãNù·‘)
+¯,PÜ»ü‹VQ¢)ŽÀO-Éh‘˜é¿ÕƒeÞG:ã÷Öƒw{#6è-æ×=ö/ü7Q	hN]†ÍgzÐgBåÃE 7<j±a3ŽE€¾Elч}&*t#‚§c€0dµÇ€1Ã~X= 8tt‰s`~ùǃ‘・ӂ*,h.Ch@~ƒƒGØ_˜ã‚´}ë·.ä9˜{ðx85x,JˆNç“…¨T7þ÷g9Kø{ý×…gø6[xƒN¸uõ¢†aHznh…`w)°Ç|{ØE}¨NÛG€ek8‚iH‡…,˜Eo(]Qÿ¥†Âó‡:îµV÷æV çR$kÈöi
+Ø}W¸G”89{•B§(`Bx„ƒè,‰8-ír‚²8‹p²3„÷v'çiø¦-’xnz¨…ÌZºv‡·Èp†pƇ-nuŒojŸT‰ý—ŠØƒyÓXŠˆdX„óŠDˆ>vSŒ×s—u¨³€;Ø8½˜‚ҍoq‰p'jŸÖbgjð¨QìH½e<˜/À³ø‚<Ø~­h„ÜX]Þ˜øFâØfÐƋ戅®“Žea/×;ä'_€¦V<¹šÖy8‰Âè*ùX<%ÙI5/V|X÷U$H@s&ÆGŽ4³‘4ivÿù}×F_ßÆ“åŒÚVpÇ“¡hO¸¯#‘6äx÷¨9éc>‡R¦C
+9WH8ŠêH‘\áü¸•‡’{wl|ö‘ÿEjÖVŽ­çŠ?ô46©ˆm”?$>ßhi¹n$EmF”ˆç“v5mÏø‚瘔ÛÔX¹8O©Dˆ7•¸è‘VÉz!©N„I>Z‡“ya‰coòx“(––	0lِn¹–qÇJÙ5¶Å—öe—Þ¤—Y•Ë€€	‘Îsš—Y™Ah‘é—
+¹›qÖ˜Bfˆ>CŠ_I™ÅUvwd·	š:&WO„Z?WRB¹iωˆÂ	aõ?Ø$œ7”ÇipU—ªÿ…D›”ZZ§¶9˜StWçÄžåžo	›Èè˜pø‹åS\	;9îHD vxò¨Œ˜Hm¹—²¹ŸYyœÈ™fȠݵœåÔœ©š@—_ Zxdù0ÚhŸeyr…‡¡ofŒË˜mˈ“¦9—¢Ÿx–—ïÉ¢ñ¹˜Ôy•GI›÷ÙN39J2	EQÙŸh9œî×RUÔj÷‰¤{öyœØš›Ø”Kùu„褟é 6¸Šm·õŽ§æŽwF•ç‰ÆÙ¡“´¥‹éf Zjãœ}—“–·¢wy¦.ʦ­I~¹øQÐùÑ¤Ñi&Bºo`–ž_s£'§üv–Šˆ –h4šI{†z2ÿÄNʆù9nQš”qi™ÁÖm¯u[!*¨ '¦°uJ‰” Y¤	œWpÎx¥Ùgjêz«
+Žºh–±ºd§~ó–x…¦Úq”qªYÇ£™—A·¨í8uœšZ˜<T“nC…l˜lHyOŠNœz¬Š†¾¡¡™© E¤V—¤[ÚcÐÚ¥Hó¥Èúz:®«†mo—¬z¢)«¯I“ºªm¬) ®õ[š^¹z–ˆ–ž¾J§‚º©Ýêlu)¤Òš›‡ê…zê­Uª¨X™Ú¬0Y°Ñª€
+J­¸ê¯Âz6”’-Æ­Gª‘t	£ªJªñÚ2æ:d³ê©*Û¢	;§ðšxòÿª“°Úo¾©ogIjž9›Äé±Y
+°Þ9”žh³™Áú¯é¢Ð
+±°è£Ä({EIšÉJ¬¼UdEŠ°ÔÉ’[­øj¹xµy‰¤ä)uög™˜¶ë‰èšZ®©±z©k6³êŠ¥š–ª¥Ú·+£,{±`ʘõ›qŠ·='¡‹­‘·‘Z±7£CK´{k¯eúlÆ´q©âê¯Û©é
+œ”{7Uø~ZÛ¤\›š}Y¦ä¶¢‰˜*msË®P»°ý
+0=i¸™›»á˜µ§­.§f»'µz¹äêÙ±sV Š¼ª;§|y¯¾‹žŽ;;Ô²âw»{êyxʧ~ÿ;ôÙ„€z¤«’„;Ÿ¶–U›œÊºµA·³òZ®K¨s†²y˜76•Óʼ…»—|À»Ê¸Sz€ÝWI«D%_U”°ÝI¶
+›¼öѲè«À⩤Ȇ¶y6¨¢6žÖ
+¸Ö‹¢+H¹ )´wúºN;²ø«¾LnL¨mÙ:¢Û¼Õ˾üÙˆ;‘û²+L¿ýû­,½ÿ«¿º¾4ê¿¡‹¯ãho¬¹ü§KªÜ{†~ú¾ðñ¸ûb¶¢h«øرE‹¾óËÂ[œGåk°˜Æ=Ì®Nˆ?꾧kAÌúªaÜ™jÉ©¬ù¿ÙûpË¿uŒÄ,ÑËŒb²F¼`Tª‚R˜¯ÿXÅoüX86ÅŒ³‹ašÆþÙÂ.L¯0,š2¾L·9\¬¦ÛÈ"‹µ<¬·[¿Fû›ž|­½ù±k{Àðè¹K,ÄûďŒž)ª‹,—׫ &|ÂÖJÉß$ŸR+°el¿Ä¼“ æ—ãËÆíÌT› ‰*Ç–\¨?ܐåiˍIĵÊS¼CÜŸûkË5ÌJv;„‰|ĉÈÈ˹쐑¬È£‹ÂE¼»Î<Æd¬ÉæÃâì³F
+´ ÍÑ|’VÇ;|ÏDɺt<©Lô¦åÜ­—L–Ý|ÇÏÌÎ.Ñ™{VùêcÚi©‡,‚ëì3i”+1ͯô,¬Ë_žР[ÅñŒÄ‘ÿÊ¢ìƤ¼ÇÖ³/¸ZoªÌDîªÀŠ×ÍÓ9јLÒ¤)d ýÐg¼
+|­K]U!-ˆºÒkèÎÓüËÖÌÂLL¨f5èøÁú¬Š7ŒÓ9ÎÆÚ•ÙuË£ŒËTœÕ½Õ¾ŒÒÔØ«ÝÖ‹kÒd­…$|Öh­›RÚÕŒz1fÍ}̏qýÖ¸²:-|#-’½Üª^íCŒ¬h18ØÚ«èøÓÚkÃýÕˆ­Ã8÷×hÖØÿøج-Íè|ÕÙ¸Ëárk&{yíÖùîÌÙ1(ÚŸŸ‘mÓ7ÒÍ_¸ÛÃ
+فãÚ}=܆lÀ¬h×L­Øö\¾·]©7 3½²øÿÉÜjƒšÆ}Ú†½Ž™Øs]Ûæ­Þ{]·²-ÔmÙTäÅüœÝiºÝÜÝݸÛ5AÞâÝÞÇíúÍØçÚPÊÞ¦-߇ÝP<Ý´­Õl&•ÛÜ—Íæ½ uCŠg‘Ü„í1¢Üq݆@Öß÷Wb#Yà¥
+„(¿jàÃÞë-Ùl-Òñ=¹Þ‚¹I¼»P­ãÌ|¡}ß^fÕLzƒ¸º¿-â4õ¨Œ	^Øm¬ÙÖÖ^Ý~×Ð-ä
+®Î5N±çžccsœãá8»…Ì6±Íà¿;P¼A‹i2Q 3àN >vXaŒD…\.ËÕì€AݹäUÉòüÜq
+ÉÙ:ãXýàVÿ^r^þ©¯æˆÛÊdÎNEÜh®\mæÇñ=r8QS¨}NçÇÆxRnÊ{Nè¯ÍÁ£¹jÎ˝N -ÝZŽèT^Á"êÒ–û©Õ;ZÑÞ=9äX2ØL¤dQemÄ~òÃeOÖ@¿Žì“AU†7™¾•Ýä6ê1)ê¥âuÞÅ‘}n¿¥NÕ’
+áã}æYŽÈ[>겺è§åš¯|Íù;DæF–%?f$K°¤]ÜeA†Hûn`k$ðÒ~<ŃÅÁsžÜÖŽå‘…íl¨w·š3ܶx‰_=j	ä¬.g¹þ³IM°{ñÎY«§ŽÁœái+¿G›Á|Ññ9ÿ'ë
+>“îþɉyÍÍë6+ñËaÉÞO™u`Ý
+5aÐ5KÇUðÅ‘B®ˆ	ylÎ&]5OâQy¾™Îû¼­©ß¬¯M<µ§®ÑÇ8á-éõzóØÄÜhÏoo͆çò=Ú‹%ó“¸JNëlïÌLüŸö?>Ö[¹`F7M†06OE/äÞ£ïKvnKŸ—Î|d!}á±vâ7õjrù[oó~öcîÉÓs9öfä3æ÷+ŽµÛá5Ÿ¿+¬«$Š‹­¿ÆèŽ÷9Hó6ÞîÞÓHúž=½³Q-žÎf¢>/ð?sïÂÅXUèv4bJOT28ù…ƒVù*=âøÝTìÿ¾ãÜÜŒCmÌîT“ú9ñáêo’žè²oþ•;÷ï*öX5cߺÿùÖº]F
+ô5ð Q   
+$h¡Á„.<˜°!ĉ%>|Xñ"FŽ=~RäH’%MB<™RåJ–-º„	²bLš5mÞt9çΗ<}þì	”§Î EšT)R F™*uêô)¨TJ­š4ëÔ«R—~eZÓ«V°]›ZE;µéÚ³`·^5ˮշTÇj¥y—ë\»gëFeÛ*WÀçý«ªÈ™ŠË>†YòdÊ•)õ9 §c˝=žÌ4U¡ND]ÔáÆÔ(M¿$¸6äÿkÚmm¼¥PÞ½wböÜ7p᪋GÞ›xòÙ̝Ë|žÓ¤è²mÇþ}Š8-Úë|½wµ¼¼¤bÇÝ·s¿ü½.YíäõŠY~ðyìç«o_Ÿ®[Îð0@+8Ín¢Ž@´o@ø¤s­©Ûv趞j
+¶‚6’	Ã
+-Ú-C?hÄ ¢Cñ¸SdѸ+|1Fu›ÑÅ‘[qƪ̫úÌÛO;µæ3ÏÇðÄrë>²èSOÉ"ç¿%‹I¾%Ÿ¼ÊÁŒd®ö¦l°@è2b°L3ÜÑ¥mJðL7Ã33M•d›pC:=²°D	ADhO×(ì(6?û”°ÐÕÿî$”FA3¼±Ñ*…4#H匴R-=ÓŸ(eqÇ6½«/- ±$Œ©·>%Í¯¬/Á°‚L°R›¤õ»TóâoÖVE…ÕVS¹J üuÌÕÞD6ÙЄ[IeŸ…62N5.SŽ¦M	[j1Õv[ º-Í[q¤Üq=×ÓðÖÚ?Y]%RKv±b·GW}L®WýÒêÝUïòÑß^ûõ·X˜ÈëªyéÒ¬Xå¸Ý¾ú‹¯Âh/VÖ\’šÅc/Öø\Ý¹9‘O¾åKÞLe—Ç+÷e±Ò=	Տó
+°d›Ó»Ù^g—ÚYËž¥­˜Ì¡e8®20§Ÿ†:j©ÿ§¦ºj«¯Æ:°£æmPB¶Ö'¥eNnl²anÔì³cT{¨µ/õ6Í oö3i·TŷǼõºh£'\²¶1búmÅ—”¤Ãid|ÛÇ#‡¼ÆÉ)ÇQÓË5§yºÂ–¸3¥ç–÷ó½ïÎÐM_‘(ÒMÇxsǼö—e·]qÜ)ßíÜ]î}¥à>¯ša¯®Þ¤sPyäÅüÌÐœÞ`#ª¾zÜiÿ½û¸½ÿÑðÝÞz|‘‹¯Ùü”;/{7Gw?ÎÍâ/³õ@é/|wîÕçŸíþÿ7 ŧ#r®Rè+ûÚ‡?™íuÄó ˜3ß
+n‚=Ó_5Ø©ÿ
+v0lœÿ@˜¶vp[àAã@Žfl¼`Ž€Ã®9ûa[¦Ãÿpm>„eDcˆs^
+E÷-%IlMô™ãŠÅg‡BÄ"KŽ˜Å²qQŠCôb‹¶Ä
+Ž±Zs¢¢áº–ÆX•†ùJžÞø&+†ÑŽ-1㻦ljÌÉcŸ@ÈoŽ«Zã!ÇDER©‚×j$š˜sÅ?VP–Ô&Ñ%FMªÈr„䠳ɫ‡”ÖÊ)å$ž‚ò2Å£d'ïJY¬–"-9D]¦¨—×3¤"eGÃçmŽ˜È[¥ã\):Æò–\üå3ã(M;¡ÿ(š<¢×FxÍõiñÚLäÁÉHqRJ†Çlâ8ãLjò›í <õ4¼wð„læɺÕJҝH?c¨Åšýs‚꼡<+YO…v³¡_ËZD%:QŠVÔ¢ÅhF5ºQ°Ù‘¡uÂ#hPº=‡¤Ö9©I|¾ˆ-#Lõ)S“Ò”M6 (µ¸ÒìiÍš<Õ^KM
+Ôb
+‰9áhR9z£—â´µ)T½(UõQ5|Ve™RµjT^nU«[óêWg@õ5Õ©Þ“ÚY-eU,²õªj%èL'õG·vÑrš«kKÌ
+×Üq¯Äûëp{ÔÁ~Q®iËkæ<š@n%v%ÿ{-,ã Ù»RVl–5,fñ¤2PƆŽ
+N ¹	Z•@¶(aEmj-ÚÃŽj6”®½)l)[¡ŒžÕ#i÷XY²–u3 np…;\â׸ÇEnr•»\æ6¹º-(WiÈ鎵ºd¼î%W>è*g±,WwKbZ<9×¼çEozÕ‹^ñŽGºÙN{í	ßÆe7¯¢½d[¿Æðþ¼Zo€<`?מˆ¢oqäÛÃtº‰Í#‡Â¸`r·¿ýûïµ
+¼awعfB¼©g«ÄÚŬcE¬XçÄÖc=qË¿WÈÃ7ÆqŽ_ÜÇǷǏ¤ïŽmû¶l:8‹BÆÿ#ã†dŽÔ8#͍Zr`Ü)çX U&.–‹«e3y“?ö.˜sb/K·+­‘õ{ä•AͶsòjØe*[ùÊu>.—Œ>ÕöÙÏež«˜ãÙ`@owqoWm'œÏŸRј‹sDæÌ\=·Ò¾´”7Ü;¹,MïUk¡m'êóÁ·½ ³¢-D>#ØÌ-†óoÏ[éÀwÊk®–që]W×¹¶ô•{­ë¦ØZØÅ^/îêi=Zž¤Æ´_mß¾þÙÚ×Æv¶µ½íl“mÆ4–µyõÌå*#ûÎÁF÷¹Õ½ît¯»Ü¿V7–ß
+lõ“ÙÑ’vM]DB›ž¹Ù¯ÿó-hGzC“~n»Ï]n_·›ÖÆN7¹Ñ-q‰×{8'½w¾Îâ}yÄl;¾hVkR¾E©Ìpz³âæÆó®åÝð…o™æéÆ3N´Pw|¶þ¦¶È±Ëæ’còÛàNù¬·Œk—OÜÒNãužƒíòŠ7âWgo8w»žûÜãº4]ðmvòè(g“Ênu–gÚÖ—¾õáýr…¯=ÙZß:¾»îõ¡÷ûº ŸYß‹.p³Ã:ÖIw–i^u»»»ÎqŸ»ÓÙwzã܍yGéYÿÃoÞÂÏÄŒç¿îAÑŸQÚGˆÚÝ=ïˆ_}æX¿yÅéÞúÉߝœ˜™æùîÿP°ÿ]è¼|ÙMžßð¡~ ª?ö­!sb“»×6oüìŸþzØ‹ûö¸Ï=NK;šfUÕÜêëïOxòøà3¾Ûí¼~öçùú؇ÖöÉG[gWHÆ‚åw!ë$Ãï¯5übÿ¹iK´Ø’ù+š|K¿öSÀ4°'‚¿Ì‹ªÂË¿R©ïIµÍš¦ú2<a(3@Ã@à鿸꿔:›47dAT›Oé´0	¢Ê¡bAÔA<ó›À1ÁÙ¸¿Í¸“–ò©yúè*|bB=Á@ÔÐ&Ù¸;BAIB‹;Dñ@j"Ò
+™‘Bý²áÛÀÚIÀDCd!ÿÃá„©•xñЁ'雌@*B:©B=t5\*)tBD,TˆE9”",‘+´“,ï«-ù“9­	HT”G¤D‰0Ú€ÄM´?L5.ÀBD$L!ô#\B>'Cü%Dÿ“@D¼4´Es at 9Ìa©Ã]ÄÁ$Y|Œ¹Ã©¢DUóÄ0”DA:?fìÄjJÄHäÀg”F>ѐ
+«FȡƯÛÆ×hœ“G
+»¹
+oDÆfô6ñ=Y¤E³DìJFÙFh„ÖHÅÞZ(eôž3¼Å~ô°5ÔEœ’aƸ ‹ÂØ¿˜‚L…i˜„£î¸ÿwEr´Kì£GÜXFéH:¹¦¿{dÆAëÆÊ)GqdIÄ¥ÃÉÞÅŒ{¼Èf‘oÌɘìHs92,CH[A4ÊH%Qʽ ¬`˜‰Ê<ž“)<I53ÉhÂlÜH—œÉLÙ(Ô@™¼Äß0Ç&GVÒÆcÔÊv\ɸ|D@”I(<ÂsÊR@›œ”‘ÓÈI,K†ØÄ:KTI’À¼Œ~<ÊÆ´½ù‘–È”˜eF˜`éœéRùÅRºÊÜJKºÄ
+ÿpKe4¹„˹<ÍÆ°Ké
+KIÆœ¤GÞKÉ·,ÄÂLÍܼÍOD±×<´ÿšä˾,ͧÂÊQËѤ͖JÄôAÅ\Ì¢tÌèT<*K%ÉÔÌ8$ª:,Ë앝ù"±¬D¡	‹ÍlÌJ‡úK<áHåÄÍÝ|ÉÞlÏœ*ÏkÄHntG¼„‘ŸlOý¼O—It,@àER”Æ
+ŒDyäÍÿËÃä­æ8Æ”ÎT?èÛ²êH`¤l}aʆô›Í„˜Ë H’+ж\ƤO\ÏEM÷ÄÈåôM¸)Ï­d”¡ëF‹|Åž„FåÔQ®ÄQ"P?ÃôÊŒE=Q¼Ë^Ï|PèŒPö›Ðé¬P½N:”ž8H`™Ã9ôNZ©»°J˜ϝ„ÉÿEQ	ÒíÏhäQ7}SjŒSØôš±”B6UDû¤GCéCÛ°K?¼M*ÌÓѼÓ;=FEÐÛ”K4]Ó$Ò9=ÉôÜÊ Ê(­E_cc3·çk¸O…¹é[½_ëT^3Õw¶U·bË´¤\ÊÍÌ-­L/ÅL0ý8ôÐàUG2ÓY"Ô$LEMD3ð¬?=”EÔ)<Ô?4Tc­
+-ü¿AÂaªª½ìJ¼ºÔaõ`EÂaÝSf­QqeÇætNƁPØc=Ú˲¹sWê“7wu=êc×x«¼Q͵\Œ[%S‡ìL]qY½U©X§ä×E2FÌV|P {B»Ö…MÎÿs%¬·bÔF%=áqØ@JŠUœt¹Ê«;Çk¹Å3Ù’EY<³×”YKÓWiá©V2¤…¦¤LP~1È2ÅÔu$1ä?伍eÏ43³ÉÊÀEl­HP´Ø[²Ÿ5AŒe¬LÝ mW‡»9‘e<–­9°µº¨«×°­>[Û” ‰&¶´¡5´›TÚuô+”ÍŸ©=-EEÚ¼ÅV‰=´¹\«?æ4׍ÓÚä3ÛäU‡ƒºÚc\d«ºÇu>W×ZƒÜ+ÅRµ
+\m#ÉC<
+]b]WLTeEÆ(äÖEY±@=ÄAmÖ{]hMiR£
+Wˆ
+>ÍzÒÿà,ܘªXjýYKªQÿ’Rȍ<©;[äUYɳÒÌ¥W‘e·|}YεÎE$%£OoœÇÕÓ‹„Ôí}ÓnºÑJeÒÚËùô[1ëݾ•%O¡Úùz_5C;±hÞÅ•=¯=YésÞþÅßØS×è˲÷³^ËÙìÕÞ Ñë‘°<iÒjì£5Òlàõɧ6Ak_ü«%¹ÙݧŸ¤_E­%¶èƒ; žW×`v¼O½×{}U.`ùÝ’ÌBªàGÏ9ÀýlÉd½VÉ‘ŒÚΣ¿‹Å]l &kÓlÑ$+áãU\ËåÔWm×V¥<Rma.^;¦‹×·ÓâéE[®áÿf#žÐ<Mää·ž`â´)V	ÖM6]Í÷„¨(ìáÖà$–Ú¥>‹Ø¼ˆb…=—ĵÅ*R—½¼3®=ÒK±™t`à+ÐfÑ	®ãüË6Æ`šìcØÚ`KÞŒäh+ÅUìÖÕ…(¦ÝÓWTTXDÖAd5ìÚEn at 3väå¹Úù\`"uãÔ|àÅäa6æýb&=e0e¼íØ%nbùea.MóÄØ,^µÇ'f‘Zn¿äÅe÷û]¦ ÝÑ__VSHíÞú*ßIMÓúßi¼Û#FbQþãªu1iŽœŒdkÆOtVf†oþæÆ
+gêTƒ¿ú+oeÂÿïE5XÎf¾E]B‘»DOÕÅ-ÓVŽ$ÔhµèAff|Îg at 6eþ¡0=þçkÑ	NœK`¦cí
+ƒNèè´7r¶!#"aC<kÝ¥PæÝß¹NG~6Ÿ³h;žèÙâ56Ö‰æF±é›nLecèŒsè^}–bMÞ­”.i×Rj}<£lT at K«õížN6ÏøÐÄ}k–ëd**¶êå´¬V¥­ö¶É2êñô+$ýäœ^ö5i´‚Z±Lk•\Å^TjNfx4_lv°cán&Bnãì­¤ì,à¦Ⴒ%Bé°6¡ŽkæË
+\“TåcåybêWneŠ–c¿–œ¦åãÿÈvÏðEÏJý^b¦çH¾Ô»Þ=<êìä¦?>n³ºûÍ7®æßþËþ>m.Gnæ,Ýnë¶.Eà^åÛþèµ]é^2¾æ¦.õ^ìã^mNêL’îÉÖÀyè¬äOçÖ'ÑžæÄÔo pãfo½pÃvoÕ&ëÀugütiÊ6ßóâMöOÉše®îàÀ<ëÁ¥ê'pÿjõ~ïײ,ñZj¦­ðólÍåÊ‘©kú&²ïç#{ìëþðRÞp—ïïæÖqkJpÞQRçÄîzÖã™ê~Vë“Îl'åÇñ¸}ò®Þ½÷qè–oÉžp¯Çá¼ìk<ò×^gO¶þïÿ}Œr(?óçqŸ£r;A®gãìItŽëƒéÂÞ[åÖs2ð,Gi{¦itMs†t
+góC·rÝùn }3®úÃBuÆòŽÅóFªÖé}Åm³dPhžÖ2ïžô.ôùuÂÝ·6×·Ÿ_)&ÍJ¿ô8iÝÑ­mS|/ó6EÁ\°—!PulÜu&Gð_Guÿ>ªU¾nuubg,¯è˜î@/! ]ïu7Ÿö 7¡=Çöl×ömçö‹zvlšñ&7,·…âVÇ7\—MëÌöôÿ]¤«öÏ‹wqob7\¡®¶LGí|¼rw/s÷˜CµÑ_ñ²Ìo<'ÚM7Þys†Wøÿã,¯+3{_rj/íݶøƒxÂc˜„ê/â™&ñw‡w‡q“¯ø¼­+S?õ¤ÖÛ/dPô1ω/)ïM‹¤k	_Î7‡öhGyøú”ÇxDôÑæô
+:j)çí>)›¿ùúîy^w ösŸxz_Úz¢'j“øz÷C#]ØžmÙvåZÔXFDŠw÷ö~z¨¿ùdïSJ…g°ÔîÃÊú’ïz»êûó°çéþD_€öað½ìnöÀß¡*‘{ŽåGwÖHç[Z_I·×)„ÿiï{Cgø|;3¾|ÂOw–çûÎd	OÇƯùLJ|ßõõŸ¿]Ù×úÎ_ï¿üÿ¢esþ^TºNÏtÖò!—j«_}^û9zcw¡Ø÷|Ú/þ½ç{Û×Ý®—6wSl¤/ñ<f%5¶sWÐ/7zã÷¦,íÅÏ©ÁÍægÿvÏ|gté縭‡6/„c2»~{vkwÅŸk" XÀ A„2lèð!Ĉ':THñbBŒèèñcGŽ AŠiò$Ê”*Q–\ù±¥Ë˜2eZlXS#ÛuâìéóçD<-j瀣J—2mêô)Ô¨A¥R­jõ*V›Y·*ÊU*€°bÃ~-kölαdѲ½¸¶ ܸsn\ˆð®Â»÷Ú¥;·ï_¾m¡ÿz5ZØ-I±!»8ìc˜&{T\Ò²Jʍ3Ö|’cg’)1o†ÌÙôæÊ!O“¬;øõU¡°gKLJû6î܃ëîí›*ïßOƒߨ¶8rÝj‰'wšWîs¹£~k]°ÞƒÙǽ޼'sð]_’OÍyñêôê'‹4í¾=üÑåÛWŽÏ2>LÉõÑŸçï~¾}!¹öÒùU Y¶!¸ ƒÊ5ø „‚EØՄƍU!†M—¡sJgÝ[Z´Ö… $`¡(¡A*†È!w„Õ’~ú¥vÙLóé¨K“©G£|<âØ£å¥¤yIŒYñÄd“)%•3ø”1JhVÿ–UVÕe“`b¹¢—eîä¡™?‰Y”˜Ì­™Ü›;͘j4Rf'j÷…V$zy™ZAÙ§|®GŸ¡JÊ™f[O2zÔ”JúP‹NåP²-ú复vº©—h~j&™£^Ê¥a8ÅYܪ”ÎÉޏÂz_¢ˆ®7¢Cº„䍂öJ¨­¿:©\9Z,RÈŽZ©•§2•%”­«ìVÒBh­o¥R&¶v¹œ¶ ª©*©±F¤®ÂŠFä µÒÔn’™	š¼îÚËkcÓnœ¾ûF©¿ÜªW¸”’éá†Ú‘XpE$څ׋)¼š‡èâˆZ•ÚmÀ€mËqnw\!È$ŸÕ&ÿ¹e–|¥OéÚúޏFÎ
+s4¶# ü}`´Öü’}4Û¼äÈ2ºZ´C #!^'n©_ÛA‡Ý©'Ä,˧ø!ÕÐa}¥wZ.m)µ+ãföµàª½6Ûm»ý6ÜqË=7Ý	G…¶Äc·lî¹õåùhA3†kà™GšŸ}n£jƒßº3½ñzFZà4ö«wªGc^€Ò›˜qŒ^QwlukNpÔ¦ç½××û5úêÝy¾ÞÈ}[7î¹ë¾;ïmchŽÁ?<ñÅO“¨´Ÿ<;Ff¯ÉøñÆ×=õÐJ¼¤3¿÷åcw¾½í¯hpìZ{ÝüêM»%¾vé³?5Ô¬ƒÏæÿ¾nzF=þù돿ÝÏZ¿? (@ý‰Œ(µßüÊ–¾
+yþáY3ó?›
+/{§K úº·´ïa°7 qÆW"æ&RkŸ³þ’~.š’_Åó±æý/‚6¼aþ
+¨¦â°‡>´¡eX––ëw¯ Ú‡'ø,GzàòYdîä¸
+NFƒ1´¢Ø6xE8½/k
+KÇL(:W‰,ˆ¡›ë¶Ö—Ên‹,EòôÃ9Ò±xfDLó¨ÇÞ1ŽËs£‡3ž=²4 ãw5†!ƒ‰|MU§È4‚‘;cÜZزȢ6Â+`$‰HS†‡†<åû8T²²•‡ÿ¤ßEY»ç¹²–…Ôž(8±þÍ‘¹d‹ú2y:J¢°tO;ĤvI®’5y¦Ó:ùKE"Kt¶¼f™$Glr•`"b 8ËAv³œ$Ú4u¹6Ìù2\"K¥™–-žÁ”çÃ2¶Â;†2y ¢Î–ây1wR³XK2'Bù¨ª„2”ßBU"'S6´¢UÄb.ÅÈË^4àÔ:;: e=©•Û<Eg’Rv½2Ž¶\)JÓë	Z¤DýgѝÆÄŒý”P6ÊQ‘f4[£$ª$II©šî
+{2“žL«WS<:u%3e¾ ŠD©b/S7u#[uRžò´?íTÿPñ°v"u6ë‹Úü8¸Æf™m-¨R+ÂT«Võq}% WsÄ›™Š¥*e)aG’X_ÙÑŽ^eD¿b­±’5¡ª<+Z
+¦V±õ®žÃ,,=«Ë¼æĪƒ“âi;3Eö@Æ1•C^äw(iOt’#âî÷™ ¨4µ‹ÔâøZ[Ë`fµzRRdFŸÚ-?÷Ë­qY2.ÈâT²w‹nek™¼‘ºsIªÜWgE«7Њ÷YõÓ«¯t•Å=•¦9ó«b÷3%hG‡+¬zƒ5AÞöt^øeoaË«§‹]É…}{&,õ®ëpúmiʬ[]ê^·w¾0†3üݤNÓ»Ûoy‘ÿFÞ7Ž¥­×|¯ç2¾8À
+Fð‚[Ü®õŠÆYÝíNÞ%㯘±=–Šaü²çêÅöE°)£õÕ+~tÄmuršB:;“¸cP®òtMlÓÒhŠ£è€ß#ÿjO at VW¼ü³.Êâx•=Þ¬¬cØz6^³lë,ä™­¦J¦0“—Œe«\¹9>ôr¼DåAϐџ;¬ÜÜ&¦¿D2š‹<dœñ˜r/fskrÜÛOSÚË,¦ó}|+M§xƝníªM
+a
+ºƒ?-twg§Û9§r»Z´£«lá˜è݃ý+àSß·½FÖ}é•Õ"“Ú’u¾6RÓÿdïXg7Sv«ÓüìX¯FÚO¥v¢2½ìžfÙX‘­õ°Í‹9l7Õ¡Å.
+°ã
+T}s±Ñ‘þvŠiÜlø*7Õ†µvãJsî=ŸùÎ.µ¶ëpÓ?8À®ðØ6œÜ·—U+a[ovüÆÔ¼ùwÊ{%ß'Ë_~Ì}Û$ÈÜîُ+_qçÇxŒ[}àŸ=ü%.•øÀí„jUÏVg5|ïÀÃýñ›ý?E‡¸Ý÷:Iæò^½-½ò˜'ËëE#»ÌÑ®õš+±Ò§)ÜéíÜÒ„5¶¥ø‘ëÜÖ×ÁØ,lçþvœ3q‚¤ÞÏkßÌñÕêùÈStm߁›d‘¯ÿƒ\ïºÙ3'bÀšô×™™ÚOz̳½›‹Í.Ö#^ÙÓ£>õ®¼å=òÏsoóœïüƒ\Nû(žÑlöRMßúèÙoõï^ha/N¡z÷íýþX/SéÞùÞ²~£èJÚcãpm˜Žâ®‡-:z¯·Þñ«yåϏù|ÃþúlŸÃköþ!Õ‡ÿ„ê?híTÔôOPY`=¼mû5þ¥•EýåÞNÊïE “Èð¹f׆Lv`}(ÏìmÝ
+bImÕ2Èý•à˜X ~IÂ\PHŸ’ߪÔ]
+"Ô•nÑ’àÎÜÇ8 6éC¬ÿ`ÚŽ&a…ý`˜¸
+æ aúI¡úZòUË„y
+jRÙ `ª`†JŽ!›”£GZá•aW Æ¡æ¿ šÍ!æ!ÝÀŸ¦ ‚ ¡Þ!bË8!ïí."#֍!¢E“ev±aðLê[VKT™Þ‚â#ÞÆ%~âL&Šâ/EbÈD!%^€™])þΆa š¢· "-^–Ý¢.†S‚â*n¢J¥Ýب"Áá^xâ.Ó+*G#6£3>£ïÄ_2ÞâYþâaUâ2†Ê0Æ" 2Nã‰`X€9ž#:¦£:®#;¶£;¾#<Æÿ£<Î#=Ö£=Îcn£8êš±¹6žS b"Øy£,‚#B#B&d#ÂÕ=6¤C>$DF¤DN$>JÙ>š!fA1þ£³±Ûþ}
+ô¡9õa8–×XP$J¦¤J®$Kªc(‚ ´¤LÎ$MÖdDâÒE$îGdWa™’A~cs”¤g•£M&¥R.%KÚ¢v0%TF¥T¢$(åä’—“mdOcÈePÕP¾Ô,âRN¥Yž%Zž£ÆdZš%[Æã[¶eM•U¾ S‚`£l¥O$‰ñŸ¿£V*Ô1’¥\¦a*åÆ%T*f;2¦J:&;Bæa¦$NÖ¥õi$Oê¥ -ÿ–>¦ÍWJ HŽäX:_YN¦iž&U‡dÚäj¢ckJäkª%j¶¤‡Yæe^VßfjÏeF•-!)†f9‘äeJ¥ZÌ&rÎä`-åI@s§ZŠ…96ç;R§bÆ$v–ftb§;f'cBçt–ãuj'u²fÙ¦+Þ%žÌ÷‰Y6íeU]U_¾ä	Î_æh~^l6e:Æelîgr"g	!¦kN§lè:'‚6&‚^§s¾¥ƒ†gwB肨‚Jh‚Rh‚š§ˆ ç°Ñ'$æ%cõ\Â'õ¦o†ˆVSL=\ØO$íèc®£†Vg€æhws6(ƒfh…Ú¨h„^ÿ膺d2h‘F¨2¥*$”F©”N)•R)«ˆhddéàmiø5—mEž L¬ii˜Y1B—ÕË|v&¡µ(|i¥ô§~N¥c²åsZ§t>¨v6&R.ižÂ£tÚéƒng
+êŸçF0çwFf“b(\.*‘&©…©¤Rª„.©¤î)b&#›fhõØ{¥é™šÐN”êyÛºiÑñ©b\§.ˆz’JoÕ‰jùVá!ہ
+×JÉ©§ºewé6j°(“©bhik¦Þ(¢RJT.«kj¡¨´Fê‚i²nèIrg¶.Ç´>+5z(§@¢³eO¸é’Œê½8^z¥ÿ+mÕX€±\•Ö«½¾
+91ÛÍ%]GV\ÔÁhŠÊ¨+¢¥¦)’N*±Ff’2«¥ê¤ì…+²2çtЩ >¬ÁÖ©µ^¬lbêÄ
++Èzì„.æ.ƪ0Óm˝x©i™éƒ¡‹»&XÆmÚ·ÅðÀ¨5N¢fîÔŠÒí+ÕÙÜÄõëE	lÚÉå¡Bltf¨µn+„6íb,ÇZ¨¶F+´öè:kÆr+ŽfíÂVjÕV*Â~m¶fêÇ*gÉ’«É™+Ÿ9_±Ù®ÆlÍÆ,»6šáY€ÈŠëAb`î¬Iß›©˜¬A¤ÐìweFfÂv«°þ§Óö'äF-ÄNmÄŠ­ÕVÿ„“F­kÂnëå.mYúéÈ>lç"¬çr­“¦­Ú
+ÊÊkÓ¡«Î%XݪËËÖn˜Ù™|å®úARßú­v…GJáV¹•ÚÎnÒ5Ѭ%‡âÊÒYÖ)–­K¶&dzëôv­×‚låJíójîbjŸêéêé‚/µz§Šg°&-ùªžV.y²oRšì¼µ®ë²-íî.Í¢(ªÖõYªú¯ªºÝßØ™©*Ø6aåï/ý©æ¶	‰ÀÕH’ÑlbùêÑëÁ©È~nSíÖ6¬ö~®åŽp÷Ú„Žê(‚îiÒïxÙïz²§ß(Ý	Îßñá€©9šêîã骭¸eä3ÿ07]¯ýIûëìm0¦×¥0mŠ­³Ž®ê«_+Æ:-	íÒº¯Òf®]œpŽ¦pØN&££–®\—ý•›ŠaeñV–ÐCðà*ñÌ
++ö®ÑŠ^[‚gwëÓ†gÁNoØ–ç„zëwƯú*¨ü‚qBˆñ"ƒ«L²M=r°iž1Ø¥±†@Ò-ð5’*
+^£ûñÑñΖR­
+äé¯ÜÖàŽ²2%Ÿ0«pZ>Ó-¨=*2jr²ˆyò×­q=QâÄ0øÅ2Ü"sœ½nAOã¯*ë¥5Ïæ§-÷ò&cnCæ2Mò2739óÙ3^s5¿ñ®Pÿó:sä5³³ei3¿3.«ÍMâ³&ߣ=_²	“3@ß²9ƒ:“Mf¾³<†;#ô?TB·ò
+æ×s at 3n$ó3ãþsEotr´•t‰2C7–GrÉHkfI=´h:ñs´K¯°F¿´L¦G“"H¯ßAŸt%.¯&êtO¦4oVT-SôLu Ç4ãÊc?ªQCdMÿåMgaNû4¯I×B3Ôïf`’´E
+5&6µXÓ)Ræ~.5öŽu&ëâSåÙduCK:«ÜˆÆ'VÓõ
+µ7XÇZ«5`Ó£8w3\6Ò²uTrPuUï­d™(‰nõpâu^ûì^cÿ5=‡µa§ua¶Ârö.—õ\þé±²/µ*‘†oç’¶±F2úNkÒž¶!Kî!Sì¸&öóÑÆ(´‹4ñÝj®r©În)Ý—|è0rÛlrópšž)«®,ÑòôA¨ôJO´foö~qwövë2ÁŠ¶rRnÄNqkp¸:êÛ©&S1÷¢nô~°["6n×3îv5žFnõˍ“(ºQЪŠ²€ÛíÌp\oö/«reI—Þ‰~u',vswvããgOøaçÄæf¯†{°x“wÃ^l—qènøˆk·mÓb[ÿ&œÜ+‹»ÍbcsdJ’Á®ÌºÛ®‚û+Àö7¼ÄiWïtY=ÿø¯džúimÇ6y¾¯’·¶zkèb1ùŽ§õ¾ïÓBù’Ï6lÿµK‚÷%C*‰§7ØV¨Ær¸¥†8˜7¨–SdŠçâ|¿Ñ#Æ\)Ërë×p3—ßM"¹,ø)ó»FÏ9¼N•ey6g¶_ר±ší‡¿÷øzq!£7÷Ö+¥›n3,|«9—+§··Ä¾·¤Ÿöcn•3r³
+rmŸ¸)®¹IÞvÈDß~§Û ïLß±Ïå/®ôùÝܭﺠs¡;¸¡(e’­y—¹±Gº¤‹y¤§îg:™ûöB{š«å¦‡ó™y{gú™‡¸¢k»‰—7Y»z›K£(Ò+
+‚jÆÕÿËþ
+-®ÃXóºÂõ9ï"ߏ76fyKO$ôº·;¬¥ƒz£Vº7ò·S­—1“Vû–c8ÖF{‰Gü¨7®§o;ÀC»Ä||“{¹3 !Â9Œ÷8øŸ/Øÿ’r #øËÒ:Ÿ² ·¼½ß;µ9UFîy{·È.»êNº‹úÁg,Åow£Sæµ9å†ï¥c:·›.ˆ<{=Ó2úÙn*Çw<b¤Urß0
+[bÕw™0Üí0Ë7ñ¶¬ßõ:Jñ—`yÍï;l*lõö;©W±´°Ö*ëÅ}#k<À缦;¼¢.+Лö#c9Þ—ú ŽzjKyvêjÓ6Ã;ÿ$«_ Ös×'¢{\›ŸVÛ'ñ¹}6
+»¾¿×6³ýö¾‡“9yWm¶Gû”OûÁWþ`Gx±?d凳|g¾æ¿ùÖw>²Íú1P)¾ë ÚüÍ£îÐg0Ó?ÿÐGÿêCºõ»o“z9¦ï³î=îc´gW½÷¾ï›àU¿79s6˜
+·€)ï3'Ѩżè3[¾7HóF‘'9å/2mK1@ ÀÀ‚xpáA &lø Cˆ
+
+R´x£DŽN)‘dI“¤T9òdK—/aÆ”9“fB–.CÞ¬¹“§A•?:”hQ£G‘&Uº”iS§C<•:•ÿjU«W±f½UkW¯_Á†
+ÊUìT ЦU»–m[·oáÆ•;—n]»wñæÕK€ìѳuÿî<8mß²bV¼˜±Q=!G–<™reË0
+x|™sçÊ›MBíyræƧQ§vjZ,kÕ¯aÇN)Z´lÛ·O»¾˜poß¿~W·PÞpW^wÕÄÍ¡GŸMšzuë×±Û›{wïß_—>¾5RñDÏkMOž}{ ´!º—?¬ûäËñç׿ß÷úŸ÷ِ?Âüsï9úk4ðlÐÁÈ2[ðÁ	)¬¤Ì=óžÂÐ*5±1øD,±9pÀYlQ?UDÿ+FézÈÄ ¼QG¥$´ÐÇÁ‹È!‰œÅ£«m¶ø4S²IŸ¶•Þ£’I&«ÄR3$¹LÄ.Á,ëÈÅ¢ÑÌ3ÑÜÊUœ1ͶÆ/Ç0éì±È;ñ,m»<ù쓳8éT­/²­r6*ÝQÃm4Ñ•
+=4ÐI½š’ÒK?œ¯Ì79í4Í5©ÐMOe¤sNLu´ÓÏUY½pÏ;UuP§XûUÅ}ÔÐ-%íªÿ|åUØa#4ÔÖ[)uÙe“:ö°MIVÚá@ý"µFýTÙ.OeVCZ[
+·ÖW‹7ÈÐÄ
+Ï[òª
+ÒDÛE¯X`}ÍuWI]—K-õíÿ—^ú®Và‰‹7+øNXá…nxÛ@»õW>sÓ­HÓ(Æ.cîÛxÈ|%ƪÚAã‹ô]¿šü·W{ÝeÔݐû5æeA&3`‚qÆùáòf–-➥óø:¡5F×â’0Ƴ FêX£…*É& þj›ž)¢©ù¬h³Lvùe™WæJlbUÖì¯ýõšmMMtXî¹é®Ûî»ñÎ[ï/Qsûí£~þÛ6¢«#ܺYFÚ8¥-º!¤3jˆëŽš–ÜñŽ(ß¡Ê»ÜËM^ùÑâì=›åaÕ~¹ç½YoÝõ×aÝïT=?qö™o¯¨ÀuÍpÏ~'­ãÄ=‚Jiª)7ÿúñœçœóä'oþñÎ{'ôÑÃN»¾Eÿe³³ÿZ4âÉž_˜s¯Þ±ôCf¿wÞÕÏ-Ï¥)ºs²¦_ê鯦ÿù‰2Ç‘ÿ•Ëx°’žýø‡æqÍy´ßMê׸qÅïYü‚RmÖtÁóEYÝõ¶¤%÷Ù§~å3!u6¨/ðP}Qaáº^è9øQLó“à §ÁBoy¼ÜFx¿àuÆ5Cüò2<FOì7’µ$ú)†4“‚<WÂn±pU„߬ˆE/"kŒl›a[3?"n‰	ÔÜ'çCÂñ~, ‘ž·´“4ЍA❘<#þ	]ò[ÿÙ5H..k0TX!ÁâBHòh’Z9c%Õ£Æ6Öя;¤ã'›ØÇiN‘–ÑM)!“G-"ñ“|\ÕøÆ R“KêÔó6T2’—ñÖ#k¹Õ—ÄtÊ%Y•]¦‰zT^+)Ë7ªRŠÎœŸ_ð(GNÆQš9ÄšåBÉÍzVÉÑ!Ù¶Ì^ò‘}C˜9¥:x¶hÈ„g<
+Çmþs®å4£¹¹	E4ñ߅“¿Q6í"aÒªÙPmâñž¢'ª
+ºÎE^tD–ªèRä9Ϗ6Åž#eJFgBÍ=:ÑŸá¬+]:Ëkš‡UªòØQºŽšÔ1<Í©F·¸ÿS›¥§÷jŠš”’&›ÙåJ-—Gþéð•Íœ&9)Ê£Ÿê'0å	NgÊTöµN at 5káI¶¤žíždõ×RÅJP<V„%£i(­FWgtŽwIÔæx±¦lU&«„\{ò;ÃþH­q•[
+yVÉO…5é¼*
+Y}ÁÕ±w¬•AK<Zž”xã£aƒÔÙöhvG¨li+«Z]±¶µ²
+gmÛ=*v•‰_-¬Ž´Ø×%¹
+ÚH]{8Ž™²œê‘Ýs¡]¢Òî^"5îOp{Ýé0.<½õíe„[!Ëš'¯Ä]§Gµ‹ÚÞˆhB©¹bE¸äîq+7ËÙ}±5Ýoÿ¹éMIvÓÞU™6´@ï`¥›`/˜Áèõï‘{Äîî´Î*Øð›á¸xµüí¯ì_›·—~ð‰ÿ¶Þ‹À¦¥
+HR^„ZM t£a™&cüY“®OíñTµÈW¬1O‡#nIp5œä
+«øWfAÆdò„øÁ&1#w†b-·ð£´Ú¡6}ˆUüåðËS5³ãÜ94û‘‡aVs?É|æšÀ([JƯ‰Õ«¨'ë*SÕ-æI+Ie-7˜Ð…6tÞ¶œèBJù[\õ¦ò亲¥²<lU1
+æv’¥ÞÅÌjìj¹0ºˆíë
+fù<Ø@+šÕ­võ »¬S†&ÿÌ=šô‰X„n’ŽšŽi7ù™“a¨Î¢Ö°”K)'­°QéYö•ž­Áx¹TÔÎà“t'èWo›ÛÝŽ£-šØÿÌiæ5¥áX»6/Ýmn7°÷îQ¦ò¤Æ¶7r FPeÓË{©6*¼„¾–…­t!ýš¶½p…/\bàNPÆJèkNŽøÖ›d㮏œkêúל¾ô˜u
+Ò{NpÓs²ø
+píý;u¢«×ö¸—ò•÷á·ùÍq&‡?|Îúds¤y‹é`‹²¥ïøK‰îq¡»TÌêâÉ¡¾Ö’£˜•'é0f,‚ë[æ1÷÷Ìjžs±ì&ÏlÏÝO7süÍÿ: ×<aÀòðÇi_ûÜË÷ÀâäéQ÷{©Ø…²[U^`”—QK6[Öˆñ~®gÙ!yÉÇ
+˜Éôr^‹\cÀZ]4^(q¼J#ûÕÆÞõüþªzrr¾°}Or±‰-·Jé—ksùj¶®ò÷ šWŸ9Ø'|á<•7æ|ƒîèv=¼‰ì—}ÀȾøÂhׯÞSÝþö¸ô½×‡	³°Ÿüå7?AßÙVM~wù
+òó7Ü)é׈úIjÖà±B®ß>ƒø’t_îñί 
+ð ­ÅÁ,BfŸ0C2PVܯYF4d¤1ZÞ£LãZÚ¤5ÿEðùøbSŽ£M<PFNð¡þøâ…ÊÙÈKHRœÍ‚¬ÍFúoI¸ÏÚÒfmôKü°ðÑ/ËŽ/Ÿæùþ„Ahð/¤°/­ð
+áD
+µ°
+[°Ýb»ÁPdSpÇðÇ[¸ÏxFðº¬Ï(I}Æ	íð¹MÍÉ	¯ÌŽ8äáä
+¥o
+C0­¿
+ñÑ#1Õ0ÏîïÃBÐè9±ÉO	°E14@êfœO‘³°‘Q]1 at Z1‘%1kñw¤Zè–¬/}q=±±ì†˜øpÅk°ÿ
+'QêT©i	1añÑ¥n
+1±Þﲄi«§qÙq­vnÅ–‘¡ÐCñÁñ7ð³qñQõ9$ñ,L°±Q+16
+äD!QEÛñ!!r+å‘cèq6t±
+³q¥Q#=Ò_Q?R$ѐMò×IR$“ñ
+ç0·Ì!#r&iRdí&q2'ñ±(²"Q(¸ìK2
+U±‡ÒÇQ ÒS1)Mоøq3²óK)c°%±Ha2&k²+½’'B Är,ɲ,Íò,Ñ2-Õr-Ù²-Ýò-á2.å.Aq¨zÒ'ÿ!+ãMîcþð±?bO0¤ð±T
+µL&¿21sIæ²1ó1!32%s2ßÒ
+¿B'133íÔhd%Á0/H²7Š²#A4ÏwVÃ
+1³5g2,)36es6i³6“!Ð/«’6#(37G
+*¥>J²QQ8ñB 25U“+]ó9¡Áls:©³:­“2-3:ñïHnŒ`¤9S;Ås<ÿã:Íó<Ñ3=Í7P7¹“S¼3žÀó0ɳ>Å Ô3?õs?g“=ÍÏ=ßMâ³C|ŠÕXÓ>ôùsA´AÝÒ?ÿ3 at CÍ‹‚k>é3A1ô+ñÓA9´C;BË@ÿ%”E”@
+3<34E#rC«6±S,YT?ÃrCcÔC%D?QDG4?²óMôD/TE…”kÔ6‹ôFat-t=os,iÔFeG?qG¦G}ôG·r5‡tKqIû“6ŸT-½”,ÇTI™J±“K•IG©T4)N¤ô¸Zí@Õ´N]­L±" ?aS4tF“FõTPûÔO	•FULõ4L	õOµQctQÏ3Nst4Û”Gõ2+…1KµÔN=µñôEÕIÉ”-Y´O5UOµ,W5U÷ÔTIõUUVKUU[uOC5M?5T4³WaçDäSQtW‰•ørI]5RÍ´VÿUVõLUY—UV›õYÛ²Z±uR‹m…R!ÌÕèt[ÅU¶Ž52oW+“UÕEku=o•]i•Z]ÕZ•4[­µ\Íu\ðX¼XÁU_–ìð2ÏuTãu]É´F#URç^Ó²U•6L•a¶aѳ_¶wºµ@ÿ5c=–áö1ÖIË´béÕEvdÑuZÃ_MöeÕU[?6DE†cçtfq¶ÛB¶I“µ]ÑfŸõ]c6Z}ögcÕ^6f6VÍcshœÅigÛÂõi­vÑ&•iƒ6^Qukg•d™VZÅôhÃö`Qlmõb¯Vò¢Öfovmá¶Ê²¶aUQÿùÔVáµPgôT#6T!6asÕOQPIöne6nÅ._¤vj_­j÷qggÑtrÁÔhrAöÔ,TÑs=w(7t/Vi‡ö:÷s'%ÊÜömQ·u‘J†?cw.g×r¿v^­ót]LTws;uw×òDwxM·n
+Umƒ÷N+eu
+4y·–$—x¥wzÉôy­ft6²I:×z½·µ¨7|Å—.¿żf{¥Ûº·|Ù÷[Æ÷}á÷,Ñ·}Ç*’˜·yé7S,~ù7~çW¿õ2}—s¸€WGF—Ur[–.	ÖpýÖvmô
+˜0íw€w‚1ø—xlé5]åÕƒÿóo¶h?4ƒ™jv$xD¼m}M¸…ûfƒG˜?øAEZ“‚=4…]8E\2³Vx‡8u/–pq5QŸÔdå—p
+·p—”OÏ–„‹Ø·t‹8Z
+‰M7ˆ}XS…µcµø‹Á·iÑh—wÓöd¡ø‰±¸]õ\ŶkIu[Œ-ïŠ,ø‚é8-JŒ¡øƒÛ‡«Õk©ømwÙXk;x†£7„õzŸå~Y·‘%YSL—Š
+֐yiÑö†ÉÖŒ¿Ö^ÅÖŒáx‘åR‡'Y™’ñ÷”Y™]*™)vV½T“–“e™ƒý>z–‰¸Œ³¸•­(}LWŽ…ù˜ã•ÿ;¹“Wu–I÷a‰}yh1¹ti¹™Ós˜‘ùSHw›Á!•a™omy†µ6š©Ùa_u‘¶ns7œu‡}´¹›Õ—žõ97øxe–œ=9l9”7YŽ©ùvzŒk‘yŸuÉzz¢Å¤i{yQ¥˜¡Ý5£YUž“TžKv™«X”/zo5š:ÃOs#Uú¥·bxIy2gúK‘¦Ñ‡‡U9’qº§ÍBtkÚ\#ø¦}:fTx§W¹¨•z°&—³9¨ó4›—Z…r©“zª±Ú1úw«)7¥)ÊŠÊ«5Ę³Z‹¡š«ÑúFËšfú&¬Ž¬×ˆ:­ÿé:wÅz¢_è®—÷­ãº¯å¥®»¡ýúRbH¯Yzáàz°wx®»±oÓ°÷¹°Ýš¯»²»Ç±1[d!;²Óת¯Ú²+ûx3{´“ØJA{bP³¥?û´-ÛW]ûµY‡µ÷­³U[¢eû¶Ï´qÛ¶JÔ›óy·;uW:¸O¬Œ6»fo.±‰{¹‘;e˜ûzµw²mN¹Ÿ»º±ôϬ;·Œ[º);»½;ßvﻯëM¹±Åû¼;ÌÉÐ;®ÈÛ³½x½á»¡â¸ãû`·¶W»¾õû¨On¿%ò¾}û‡ý{Àù»¿	“艾¯tº¼Áíx}Áå¿ó;Â-Ü,^òÂiè¢<Xÿ\ÃA|SÉ+ĹÌ)ܶI<Å3œ›Uü¡M<ÀŽº[œµé±Ã|§l\Ä“{Æy|ÿ
+³ÇÎþÜû›¼È¿nčü—„üÄ+<ÉINœŒä”ÉQ<Ê[PtÛÊÓ;€a<ƵœÇùõË‘jÉ©Ü¥Å\ã6ǽ›¬Ô\>ÉNÆÏ|©{7ÎW,ð†œjéüÉ+¥Í‰{öÖªìà<Ï{Úmø|·!«Ð|ì]Ðaúý´5ëÑÑQÑͼÒÉ|Ê˼Ê1ÀsGÒ;ÒÿÐ;=Â…Ô×zêÊ[ì½Ô9¢]=µ·¼ËÍ;Ö=½£l½­ícÔI=×ý;¯}Ög½‹s®ÕƒgÿmoÂqÕUZŘ{ýØ[9Ùu¼É|<7žÝ¡×£]ÚO™Ú1Ú
+<E²]Ÿ·}ÕYÝÛ%9ñBh¼¢ÙšÙÏÁØݽ۬Äñ]ÝÅ}Ø·8òŒß‹ÕQœ»?¨ûþïåøÌtN&à"dëx ‡[Ý™¬Ü¯ýÍŒ¿o¥¿GÏúíÈñÅXülã/Èñ2Ù¸½Û3~±Eþ÷$Þä¯íåMþd6þÞ» Ùjå
+¾úîÜËu^®[äežXêQxÏ%	uÀ÷–¾à'Þ×I-åUþç3¸æ›Ïÿ>¼>èC^{¬^æ-žå-Jê1žê]øë}ëýïtZ탰í³þäÿωì)ÝìÏžæPeÖ~í½¾{
+ïï0 {ÜÂÞÚ%/àížKٝðýB‘¾à¥-ç#¿ÿ’ÞÞ#Åñ•þPêêçÝË~ñ™EæX|çm}ç_½^ôŸ»ù¸ÞæWÜé]õé>ô]¿‘oÏÓñ?~æßå;ýWßô?÷—ûýtÐ`òð<¿ÎA÷‘·£>õÙëöë~ú
+ý[Šÿy²û…?ݵû?Óü…¾ØÇŸüÏ	ýQ7ÝõÕýoûüþ±_ú鿵S%þã–=@<ˆ0¡Â…:|1"A+Z¼ˆ1£Æpü2¤È‘$ÿKš<‰2¥Ê•,[º|	3¦Ì™)Òió¦Î<{úüy3'P‰B‡ÅXô¨Ò¥=2}
+5ªÔ©T«Z½Š5«Á¤WpÕ
+6¬Ø±¿R5K¶'Ú´l-:m7®Ü¹tëÚ½«ríY¼|ûúÍ;Vïß’‚·}k8±âÅŒ;~¼•­WÈ”+Ó-ü³åˆš7KEì9´èѤK›æ·óéÕ¬Gª>úºuØ²u‚®;·îݼaǝÜ;¸p†´‡?}|¸ÊÛÊ›;Ýyò¥Ó£[\]íõÙÛ{2ï>¼øñu³û&ž±ùëC·Oïð;üùôëÛŸù(ðûü%ûßž_É'`ÿˆ`dv˜`ƒ®µÅ d
+H ƒ^ˆatú´_†â—€jTáˆ&žˆ¢c^­Èâ{-µ¡‚ú¥X_Œ/Ù¨•¨c>þHÖ‹+¶UNÓéeS‡<áäcL¶ô¤aQÎÇc“V^‰¥QBæ—T’!)ã’Y^7åJeúu&zUŽÉf›næõ¢I]N4›’
+±8ѐuê¹'Ex6Ôb‘9Œ{4(Ÿ‰¦ù&VŒžô(^‘†·f£–^Š)gÊ™Ÿ^‡(	õ)w¢Þ)c’¥Ú¹Ÿª¡Öyj¦žMJ¤ˆ–V*k®ºfºi­ù&BFÆšj¬|:ª‚¤þªl³¯î*á\´ÿ^†)®Ð^‹­•r*l²Ïv:§°«
+(°¯.¬¹¢¢›íbÓ’ô®´Õ¶Ko½mo§Þn˜x–:*©]©®·ì[°©Û‹¦¼¶ÞÊpÄëhçƒÌî‹1q«ûëÂè~¬©ë:ËïÄÔ:Læ¼&¯Ì²…†+rÆï°È ÃXsÂ:Ïl0É2·áÉ)«tÑFS·eÒJ/ÍtÓN?
+uÔROM5Æ\Üjž§f
++ÍÊÖ|tåuïvÖ†vÚ!±(@Ûn¿
+wÜrÏMwÝvߍwÞzïÍwßw¹P¡«:(¢…Ž|,Èøª
+VÙù>1ã’O/ ~_ŽyæšoÎyçvÿWÌsàú†*å-H¶¬g›Î:ë^y{ì²ÏN{ß ‹pÆäBäx먡yä¾O|‘µ|òÊo®´ÖßÞÜíïÅïuWïAgºúôÚKüúòÞ~øÜŽ0¾Û’.úöRY/ûÿ­~üa[.~ýößïùZäˏ¤©«Î¿ ~ø+ ø7‡¸O€fâËO@J0bD /x@$=p‚ó_ð„ÇÁB«‚,¡	Ã'˜
+Šp#*üÒÿ"¸ÂbŠ„Ì£¡æègÃê°s…ÙŸ³ÒB~„?,â˜rx9$f‡ŸÃ›wˆAÌшéëË¥«ìQq‹
+z¢ífÇÄÿºyq|P,£Û¤xE.–LhCƒ¡ߘ¢1êm–ëÛœøº0ŽoEgäãýøGòsyl[	8H2qb¼cëø6>ÊqŽI#-Y–ºŽœüÐ$ó†HDFòo}4¤)ψÊS¦’Œªd¥K¹ÇQªR‘†eeéÊîåò“N´ˆ;)¦¿`’z¹Ò"0I^’²•|"-YÙÌUÆÍ–®¬¦ÜžMYbn¼Ôã)Ÿ™?¤ ó<
+Ó$öƉN)s™ÕÔ%;¿YËkÎM—¡œ#7™yOkzÓš„l%4ó	»Øü2,f&‡x)ct¡ÊYç-ùéNºm–Ò¤£4cùÎ^ÿtŸý›$ýÙÑØÇ $©8JD†ª4™²£&7™OÒs£ç+µ‰Kxâ4§òÜi*ÁΚ˜4~Cõ%xŠZ…®t©¸qèMÛÉÓiÆŸ³¨KaêS}‚t«OÕéOT2µ‰A*SÌÚ¥Žu­¦qªD+U©ÚÔ›Ôlf]ãjՐæ2’‚¬©\mºËUF”sÕA«ïË;sn’­ŒmhK7ÊH‰r—µ£$ëHPNV¦•ý(#;ÏË>²“
+èÚ;9Ô*ð¨×Rkc_[·šñx²õgþæÙÒÂö ee-´\»Ûàºk¶*æjËUã¶rÂ5ª»»ØæJ·4ÿÈ=î–ð—4¨öš×}«`ñzCnMY9BiBÇ‹^ê·¸ MbþéH‘BJµ,£ïCìË!l7½üMÍzÿ`¿½¬¿¸ë-tÏIà;)Àn°á”`ü®Ö¼çU°…‡ëàk8FnW‡KGá”^xÄ’Ò°‰l£Žõà nãoIc+"«N
+ã'«»¼â8‰7š.‹[¬¡ví7ÆDVÊŽ{êÝ{Õ‰ÄÕ1va¢â…þ¸Š.~q‘¯ü›ƒò¸KΨ‘xdÛÉdÊn"3ª4”°]
+ËlfKÛ¢¯*w´‹|é`M	È9×’Ÿ
+e6å\Y;SÖŽ`å!~ÌŒ%D:½jÿm›-–0cv¢|ök`!×™jÉ–Å¥K¡yUOwTÏK
+[=4ÇÉʐnuWDZè¯j”ŸÉý+­'JëMÿ¹Ëzý´“÷šÛ  ºGÃFßp¶ähW+û,°Î´«Šä.cÔ»²Î5®u=լΙж].{–ZlcpÉ^¶¹¡²cpZtÖ•¶õ¬_Jíª‚9ÛµÎê»ÕíÙÏ‚1¿
+wŸÓh5Ÿ{àg
+(½u*ÊyÛÞîNx¼ï}ðwCÜÞ¶Zü!Œ¯±9çc5Á?þ“tGüÙ{~ø>µ[h?›œªÕæõ¦[NÙ}ÏhœßxC£ì¦5ƒ|çei6Fíºd¬þÜÖ6Ô´¥ÿÛëŠöUÚ“æ+xÃkœšHê1³ÎsÎó¬ëDÒp-]=Ê碷÷2»Äÿhç°£½Ûù¦ã§ÃjœNR½êA®—εŽ÷ûZ0ÌîÝrùžkæuîô!<™©†øÄ+¾ãº{Þ§½gð¡Ýþ"ež5ÞŠ+"€ç?úЋ~ô¤/½éOzÔ3þ>Ž‡¼ë·ÂÞØS¾º\Ç<º	ŸLÑtØ+©ï½ïüà‡þêf{½ñSøs÷Î}/cqÜã—÷¯¾õ¯/|âG§õÇ}ò•þR[Eû‡%}€ýô«ý¤'s¸ß}×?üô§$E}úRŸýüï?öÝ/ÿðÇ|õg€µ€7AÐGw’áÕÇ€)!€H€ów€XT8nm%-‚!˜zhh˜)Pf•€FÀ¨…~"(ƒ3z$X&x‚(¨‚;(`0(?ˆX1HƒC(ƒ688˜ƒX€<ȃ«!FÈ„DH…"… „Iè}‹Ç…]è…_†Š'LÓ#…r!„Uˆ†þw…‘…Zè†Ç´†º·†u†ih‡ì‡$ò†{Xd-H/6H‡w(ˆx¨&|hˆ1–‡Ñ2‡f8ˆø…xˆ‘xa~¸+F8…Žˆ‰Á—ˆц’è‰E´;õՁ˜‰¥ø{›èŸ¨ÿŠÖ*¨X=²AŠ¦(‹§çŠ;²Š·È_‹R‹(³ˆ¿1‹¿Xz»ˆ‹Å(AÇ0Wx‰ÀÈŒŸ'ŒAŒÆ(?ˆŒØTŒØŒÙøŒñ1ÝØX䖌׈ÙÈŒÛØÑèéè:Èf/qƒäØŒæÈ討õ¨6ÍÓŽ¹ñŽðŒò¸ôhÉ8ÕX‰úxü؏äɐè†	‘†½‘‡ªU‡™‰þ¨©@é‘	’!é„
+9bqÆ„ Fæ·‰‘§8„™	.û×’5™†#I’鵄'‰’€¸’å¡~9zBi…ÖG”¦“!“Eb“M‰‰‹““>†<Yÿ?”<º¡A9‚üx”Á¨Qç”a™‘I•ö1•Ty?Vi†	”§ØyžÇ"p—rI}s‰”ð–p‰—B˜—x9|4I—ÎØ—ª÷•Ò•b‰˜UH–e	g‰–O6+lÙ–½w†|éŒÃw™z™™Áh™rYƒ›Y™›é—š9š§X˜ìq˜‰©šD¨–ŒiDŽù˜i¨x~.	šÁx›¢9”˜Yš½9š™™uƒ©)z‹YIœ«©œ4hœ®	 ±Ù„³µé{€Iš	šÉé›Ãù™Ý	œšI”Ú錧I⹜ç	‚Í霌&YÍ›¡uvX•”áŠÓ§‰ÂYƒ÷{¹•ÞÙÿÁ)˜-rÿYä‰艠v¨žë)¸õXWy±fOÒænÚUßãoµhŸÙœø9 žy—þ©›Üù¡%ê›#h 1až	Ê¢„È *¥pîIyçwj£7út3¦"ÇV=¶IšûÙ¡º›": $ºEj¢H™¢7Ò¢MJ…ú¢Z…dY;Ig³”g~d’™Å¥´Y|eWôäNw´¥^´¥%¦7l¸¡”ùŸß¹pJ‹Aú¦¢)§?ª‰Kê+ê¤}*Q*eÔftŠ¥A÷]žW¥G¡v¨Ðs
+‡t‘:OåՁ=ê–€Y—úÉ—Ã9˜»Ù—ù©	ª˜*ž|êÿ§©
+|P
+¨MõT»&t‡¨ʨ¯êrŽŠ«·LסˆöŒ†ª/y}Áš}zZPªŠ¬Ȫ­
+‹¶JQecEŸ…:¡¥n4UyܦYõvt㣿*)å8¬/i¬f’¬çÚËʬsè¬N­ÌTë¦OrdK‚T¦ØJZ_JHú
+sJdfஃ˜4'ê£EX®y®	”ë
+‡‚:­+Qw5«ç¬'רŽÊ«Šmàõ¯Òá@âÊ¡¬y°(A¬
+k²êÊ°må°‰
+±_—«¡‡št\lšrÜ¡‡pk²égªÚ³A»ª)L¿†r„zi.[³ÓV«+³(÷g at Gÿ¨R{iUËMR²³<+´:ÄX²[›¬(K´£a´ŠÔ^Óįñõs¢5Wg;«iJ±‘U¥‡„´nw¥w;Mý“µ¶yÚµ@[¤úµëg Ú·8¶pôžÐipÑvFz»·–z¸¦ù·c¶ª‚k…©Y¸ü9¹Ãš¸œ´¸Œ+`#—·ËqhÒ¹”+^{¹Â¹¹ü÷º‚Ù~ƒÛ·bû¹ºg]B‚]ÝÅ^ºoMkHXËh¨›º”9²Òº›§vÉ{sI“…˼ѻ—•I½‚»Bk»·ë¢»Cjë½:i?³u*ºuÅK˜Ç+'É œ* Ó+ Ï+”Îû"t)½ô»¼í˹`›½Ú;ÿ+¡Ë½"Õ±t$F^PV¾æ«¤èK—[šè—©²;½¼¼³Áœû–Ì©ùi¸\»ü+wþû¿7ä«i‘f&ÜcAÀ	\¹*ÊÀÍëÀ£šÁ<ÃC¿LÃö‹Á×»µûëÁ!Œ@)éAs8Ü•âÒŠÀÑ+Âx8c>G0…‰Ó't’Äk³Â^©ÀðòÂ1œ¿ó›¿aƼ¾8¢™*ÆîK»-êÃ?l~")Çsì‘N¾ƒÇâû<[Ã11ã1}Ì5]c8[3,‚Ì m|®Pʺn©—3ŒÁ†KÆcŒiÁԛƚËÃ'Ç|øÆ5qÇ#óo{¬Çc,äÿ2vÊ lsÈªÊª‹¸”ŒÆhLƱËÁ•Ì¾—œË‘\¼¼ÉlâË'Õ8>Ó€ƒ:Îc3W£1ºÃÌéÒÌãÅ[\ƒéË”¹Ëj,¿ H‰Í;\¿l¬¼ßÜÿü†Áì\a‘ÊzlÌÆB0åsÌW¼3UŠ
+CÌÒÊNº¬Õ<‚ª¼¿ÚÌÍÛ¬©\Áî+ªÿÜÁ䬅æLbs.âV$|ü,S2éLϨ\ÏÍL²ÒŒ—T¸‚˜É=ƒ­Ð@BÒ÷EÂMe¤,Ñ~\Ñ*
+ÍÏÈ'ÍêªÏ
+zÏ"͵%}‚']ÀÝ5|f^c5,m3©fÈÈì*cÔ
+6È‹ÿÀ({ÓŠÒ:m…<ƒ>Me$|Ä‹r_Q<ʼnâ<ÛòÿB8~,ÅÀbŝÅr’Ó«ÙšIõÑ7ùÖVí·X=€Z½h¾%Ì!£iR×a׸1Õv¬z×&‚Øïlu
+ýÐ-=‡†½>\؆ª‹Ø‚Ù«\=ìèÖàˆÔÐÃØC-l
+;Ø»Qٖݧ›ÙÂÚªç„m˜U˜8éÑ–«ÚèÊÚ­í ›
+¥RHÇÍÛö‘Újˆ‘­š½íÛ	‚ÙÁ}žmws‚ÁªÜ‹ÝãÜÜÞ§ÙéÁªø81Çíˆ×}Ý	ÊÜÛ=u²¬‹¹j‡4⍙¡z¿BÚ©yi—íGЃùÿ©úÉŸÕ«¿è-7òØÞa6ð
+ЛZ§×y§
+¼ÏL§?á卐ç
+àߪÎ"½èÇVÅm2>¢Λ@Š¤ÙM ¡y¤x
+ Bš°~áÂ;À?½×‰•DÜÖF#â'®â-¾âáÙŸ$¾âä	ãèTÂç¼Õ5¾§ÈQxsXà3	ã@ÑãANßÞ¾B®z)®Ãþ›[åI¾ ]íÞå²Äž¢(z"ÛJ¬$íœ'T*VLÖgþ\N¶D,(cnWî¡?žº)èIêåGΛ½i¤HNæo´ÔB½×MmÔ…Œ;ãBÈSéëòÔå„çô©çJ?~^âYn䆞ÿè¸i§'>êaî⼽芫ҤéGm5¡üت,32­Ñ¦‹ãîÒéT@~æ£þãÃ>èÅYè©ÞàûiÚ­Îè¯Þ/ŒÈ ƒLììÏ\íVd–ØÑëw²ãÓê¡*ªômú}˜€îßØiÏÌ®y×..þçò<ÏÏ1
+ÓÍ‹›^Û8Ý®> n”»mŠ|Îî)]ë¾Î9SÑ’ž;òœëÖ~ðÅ|•QžüŽæEð(ð¥HðA¶.ñ³NÔ-Íðó\ï~}ï´ÎFúnÄß‘§Í8Ÿ}>»%¿ÓŠcë¥<òI-ò·žðJ-ô>ïðDíÑí(.Ï;þB2ÏÿÈ6ÿ”8¿EpîÕ//0ôÞèæãæ†,Ňò)UoíL=HSî0ï;Wõ·-õ'PNNÛFö°¡ô¾$ö?¤ök/Ømn=tíq¯ë5ruoÂwOEy¯÷MÙñ|_æ ]9Žï/<ï“ÿØ„_hÏ?ˆŸø5¹øŒï±KÿæIøš>÷eöfbøœÄùŸÜ ¯lbÛÉ/ƒù_²úÇÔú®Ï•°ïj(ëËë‘úP¦ù1”ûºOŽŸÏû•êÝrÁ¯¢·¿PNÎá~™<Ìß~9ß#ŽýꞺȟüM•4ã̱]û„ý+%ýD.ìÄ©àcì5LáMêýß_á}êdÿõÃ_øó?éè>$8@Áƒ
+\ÈÐ!Á„
+¤XÑâEŒ5näØ‘#€!EŽ$YÒäI”)U®dÙÒåK˜1eΤYÓæMœ9uîäÙÓçO A…%*ÀQ¤G‹.ešdS¨Qƒ>%™T©Ô–I±nåÚÕë×—¶JÔ(1"Y³3¦h¡Ú‡l=Î¥[×îݵ`õîåÛ×ï_À&<ØêÕ‰YRUÜX'ÈÃŒÿju\Ùòåžb±’]ûÖ`ÃÈp/²í™´g¼©U¯fÍókرeϦ]Ûvâ÷K֍97nĽ…ÿ«Y*gŒr?‹v[Ö4ÄçÐÛ6o]Ýúuÿ‹¼‰oçÞÝûwðáRÏU{y°¿CžçKý{ø4GE>:zÜûÉóŸ–®û Uc/>4ð@¼É=°AŸÔ+éÁ®„ðÂ÷惪¾ì ŠHºéâÄ£D‘:…ÎB1@[ôˆBc”qFk)Êq<Q‚qCwr8
+›±¢¤BD
+¡WL®Ä™4kÉ—tñJ,órK.»ôòK•‚s¥½”¦2‰
+rL6-+’©#³ìL at 9ë´¢6óÔsO>ÃKóË?m<“¦@#\³OD‹ë΍ü³+NF#e­ÐD+µôRá"ÓtSN;õôSPCuTRK%Õ¼ÿ1#û‰RœzÄôU¬Þ\
+R 7îV¼h•t×GaõõW`a³J b‹5öXd“UvYf›uöYh£•vZj¥µjÃ-uHVƒõÖ&Y‹ÒµÎ$'åõ\ìºýv]vÛm€jã•w^zëµ÷ÞiÅœJÐké›õPwö)\5Ñ5ø`„“xa†&^|#–xbŠ+¦WßžÔåN[§Øak"x¨q6ùd5ye–…Øb˜c–yæˆ1Ö1AŽ+\Õæ–{fid£Pzh;Uöùh¤w|™f¦›vúéc®ªÀœ÷’º W“Öº$ §"úk°¼zk²ËŽoi¨ÓV{횯»±ª'{—gÿ³ÍîÚÁºšL9l¾ÿ{»nÀÏôÙ£$†m¶q¨þ0U_ëöcÁ¿{UºJ¾Kó¾;­rÐC§špŠo–qdQW<jÒO_]ãÇõŠÛ²@³½ìË#ÌKÎ=÷ÏÛƒ~ãÖ
+'Võã‹_}Yä‹m^€çi†½¶Ù…uÉöáÉÎ=ã¹’<¨ÉrõÓÛJ¸Èg(üõ>¿÷ß]Œ={øãߐp¤ ‡þðúé‡×ôãó¿¿ðÿ0€ýàé
+g:úÏ~ÆB`“â<æoXÉ3 ÿ·@bðt6yß¿°w
+QN~uÛOJ&¢9‰I$¢N
+q%µ¸°}ëàmxÝDÿƒ	d ³^@þQp‡¬âÒž÷Cüõ°ˆDä¡ó”¨Á2ÑuOD¢û·8BU¦zÃ9Ïq˜´æpwåQ‡V%Gá§9iœ¡¤jøE8Æ1+‹³¢5˜,´ñψuL]÷Ȭ<Ú1wâí8De²uƒ$áfòF‰°<’ñ¢‘ÆÇŒñVꛓ‰Ô¨Bð¡5m<$-yJTê‘W„#YIÄÔEñ•>”"èJ*ÚR–±<¤©HUÊ”2Ùâ$×C7TjoQÝs'͸¾rÅ*Ÿ’‡<4MR¢k˜Éäæ
+ƒiËû)ï–lä w9KæÕò—ë$¤aiÄú)ñÿdg97ˆ&Ùól’ì&î–ù"¦¨“¸Zã3™¾lžl›ýdhötxNrNÑŠˆkb;{N@ªÓ¢¸t';WIÁæq¤°ô!>ÇÒ¯¡´¡•Ã¤S4Yš€¢ˆ?ü)hMcšP9-t¥;ÝCùøÇt*±»lä9CªQ‘Ž3—…¨<IªÔ‰>•y&…“JùŝòQ-mÕKË8"¹¸P¬ÖÜdqZJ­¦U­"ñ© ŸTŒµ£¯4*-YYÔŸ&Ñ­sý(%ŠÑõ¡TuUsÔ£¬®5O\]W¯y$´¨4œôž4§Ä¾³V'±ŠålË¢×T2ï€E´ ãYÅêªÌ#ÿ=íÚ𮧽ã<ˆÄý‘3·Ž¼ž¡*‰!Ûm¶³`b,3{\¢	w¸Ë]˜*—3çÂõ¹‰¤.oId¦”Ÿ#Q.s·TÜš`¹ã›wÍ+ÇèN·^öŒWz™–ÔÏö–˜úœÑvMÒÝó漄›¦Èû_…åWÀ6to"5ŶMAñ^¦V‚¥[WÊw1†Óo§6à–í÷‘ æ0¯ð‹aWŠÁêmphå5b™=P·G|É€è{Xû’)Ä+Ó01;|cF}xÆ;ÖŠIüc ·2M”¤pžb,a/¬Æ1/ŽÜ½$GYp²
+r•­\­ìN¨È=>2a¥Ü®%£éÉcvß—Íÿl6*_YÍkŽÚ^Ü%3ùÌs‹É|çZÍYÏZ› ›ýüã-cM¥:ÞN—9¸gvÕùzykrðÜ>B#ZÒÚ5U¥-}iLgZÓ˜>Iä8/hÒÞRtV4©YæŒÒ>.Ú¨]ýê”<%Òjt¬ùê›ÁV¥^Ì©[Cƒ®šÕ9Õu±u-ë\Ûš>fϬecèUûU¼&S÷¨$ÐôAêÚJŸ•°™mh~¤šé6Lj¾'¡{Ûë#(ï¤ýnI#»U×¥µ…»È&\GÞ•¢v˜^*CÈ.§-æ–aˆdêœó%ܬžÄv»U-VˆçxßO2Ž}dòP¥±U#gñÿ		«"—5d²Ü |ï‹â[ýgG ^F$E‡àÂ~¹~}F†³qÕ4Mõ•œ½r ó™­%g«Œ‹¾ž£'*#WöÐ9®tÞ fé#_ÓÏ!wòãOýŽµcÞ(™s9ã8Øožóü8<;À¸ª³du­Ç=d”D:wÃd÷º:ïL÷Ño莵ãýèD¼à!”r8É}±-ÿH3ãÄsÊ>ÖàdhÛqþB†§û{h‡ùÛÿyµþýï}×»–¡Þé3]EôOzÝWoø![ ×}äõÚܦe/xÁ¿l`óÜò7Å|ñuÞ"¸Ó^ùÞz}ëIox­,½*žž¾Rä=xÖçÿÝõܽ¾ö	íô,ÿK¶ï4îÍ
+üON¾øêW;çÝŸþö?íÎ›øíŸÊžLÒ÷¾ô5uw¼k>ï+<ìCºî#À÷=¹¿ïb<³++âS’ô+Þ;¸NB(*鹯Š¸¢¿Ìa@ü"DÀÒ#@þsº á»NË?„=”7̾ïPÀ¯H¾ò»/Ü·F7¢,Ëj¸Pr¦µÛ<‚R·mû#D*	ÂM·VËA*ŒŸ©;&ç;Áô´4ÁºÓÛ;þ“º¢Ã.ì´š*Ô/6¨t	6Ï[C:<Œ[Ák‰¾+$¹	³¾©ƒîÄí;Bÿ,<“ÃAÂ:ÇPÄ:‹œ7\¿\1—³{ÔyDMì§7Û–À,ôB.¿FÜĉĪè¯Ðˆ[9¿J¤[6öÁ4E[!ê[ÀÌÂ{ûDÝHCÂpÄ[Œ•6¼3ôI
+ú;Æc$—alÆžâ£ø?<ÅfËFœ
+atƦ@EîšDp¬?nÇ£éÄ“W‰º¦ÓFRÔFr<od«pœG—{G{l®@óŽm¯v¤ž{,x\zH-ùGƒ|sÌâèÇ_<HøH¬!H‰D‡¬H.ÆÞØÇcH…´Hñ€HZôœ”CœÒH<ÉôÈGœ¡Ž\H”ÿ´ÄÊÓ&Ÿ#/“|Iœ¬7Œôv¼ÉŽÉIîˆÉÕx<“ɘ/ŸJ¥ä •L)aiIðHÊ¥t	¡|ò‰¦ðÁÊ&”!DBv«k‚E)L°»J·sB$dBj‚¹*Ùʲ˜J¸üŦŸÜI}ŒK")FY¤À…ƒ@YT?²û½£œÅ
+ÄD"Ì<šÛÀº¼À¬E¼|ÌFœK8Ó¢lT©„L”¨ÊÆëKXäÌqa;ÐœáMÝû¤€»ÄÑDÌzÄLÖô‹„’m´Kô¸ÌÖ$	ÍüÁÁÌ=	d´÷‹?ÒLÍÒ¾ÓÜ=à<¾Ï©Mä<ÉÜE”Mø Íä‰Û·Qòž3Ò¶%œ?ÑÿÔNJÌMƒ#JÔäNãÌŽè,ϝYN¨<<ó„ét9¾\L±¬¼ß<ËK>øKOâOû,ÈöP4AOXq6çDèŒÎ÷,ÍøÌÎ{¸ÞÔÏâüÏÌC7ôóËüT͏P5
+B;PËìP7ÑKƒŠÏÆtÅÎ,ÌÃÌ%̯ó½ùÔÐĬP™RLÎIPÝ·×Ñ”ÔQÅ Rä\PÍ˽ʸeDKµüÊ°ÔOv“’($JÕ•ì„RÉkËÞÒµeåQÑÒÖ$ÒÎ;ëÉ,Ê¡ÜRÈìRI,0uJ6M2àÜ
+}—ËÓÍDÆ9J7u˜…ŠÓÃÿúS:5Ñœò¯½´ÀX(°RT'ËÐPQ=CuÈ\žaZÏ»T¨S;UB·´ÊQõ9ÅSKõTnT¡‹ÆÊ,PUPÈIÓXå&VE³ÂzÕ_±Õ1ETZ­Õ[¥Â\2ßB_eÍY
+VVKÖažb·áT_qVÈ\VfÅ3k}ÖÀ‰Vh›muInõl¥“¿Ì›lõ›qåÑÅU¦W4\×¾(Wt}C}ÀtÕ,yuµLõ.J!ÔjÝ×½ W_ÃW8ÌW}X3óVüÛH^õ,…Õ‚ý¶'7¯T#ŠõÍ°„R£4ƈ1†e(7{Ørüد ×°êË‹NÍ@¿ÿ,Õ|…W“eÎvͯXw‘Ù¸$Xÿ4M•Àú|P„ž™
+½š±.¢VŸÑٝÖ'é¹âË=Ê;ZŠ,Ú†
+YæŠ:’¦…ˉ­Ò…!¿íN«%Z¬E¯£]Xlص•
+”M»Ÿ9· ϪM[µ[øéWŠk[iå[¹uZ¶t¿±ÛŠµ¹¼Õ[×ÜÛÑÚ(SÚÊùZ°%ÜýÙD\ÔϗíX2£\Ç•Kœå±èÛ)Ð]Ê°…(´&Wœ¬ÔÀÈZYÆUˆÐå3À=6Cä©ÓUJž}»Z™]„¨]–Ü9C,ÝÞn´Ü;IF>Yä}ÓÛ}7~ÚÝúzÞ¥è]÷ÿ‰ÝÃÀWÏý\ëÑè…·¢ÞêýÞ¡ÀÞ2=ÕÙ%_óÕIÉ•¶ßbß‘_œD_àM(úmßÇ_ ¿ü½ÿ=Iû½_R
+`ýÐÑ…µ|3`”;à `ž!vàûâ߸SÀ	FP
+
+ŽàßÉà&Þ‰ãTŽ½
+þ	ž…Ùÿb;ï=á}J`ñUÚ6a扉uCnÞ6ša¬õÛftN¦šÎåÝ\Ó¶#bl„áþíZ£[« ¾G”½Jɨ”õ6ÎÎr+\rƒY²¥bþ`%îÉ÷½?Bb!㜸a•í=Þ»WQLí8®)ÍEJ5¦L&¾à2nAÎBc{dcùÿ»<uÒ	ìYâC#—µÉ<6^Ã>@ÅäwdÈCó3düœP¡µc±KâF¶šG¦Ã=E­¢dr´äýÀ䯢O2ºOÒÜ9Ê3b	eóå:,e=[—"f¿MfeüËàCdLdáÆdä^v_'^Õf~ŒåBåTþe7ÆP=æU†å–µãEÆãeÎ\¶E]öãá’æqä9ÖÀa6[²QunQÅ}e³-ào^p¾Åq^ÇÎ2gnDg²¼N)ÌäLKIåʶSßûPÆîõ°PæU6ÅHN¶}®gùøå¢TÓ´ågÅËÃ|&Öˆ†f¥è™è`rÑá™LWÖº"{èaÿìh/›h‘Ž	’Nÿ¢ÔzåÊŒ¶”nbŽsiHþhOÜÚ˜–‰™NÔ0F8«Ýé¿•Fj£8/¥Æ¢ö`¾‰jùÙ4¬Îj­ö”ôéCƒê¡–i‹¦jzžJc³È˜.¯þc§ž›
+k±Þ²3«~\Kœ>S¯g^ؽV÷†ë°빆4@½ëçJ³Ã®ëTiëŸkÀ¦J‹>êÁ¦¡œ4ì?{øeìÍ0ŶEžìª~IľlÒ¾ŸWÓl]tìÇn‰Ïm°él4+mÙžª=[kqÁ0ØÞÄ)Þâ»]ÙÃ-B×N—“´ìÙ>l¾îk¸AÚÕ†l¹f¦6&än{Ýà~$îâÿ6nÒEn-RîåfmjfL..äéNXL½nóÆ#¤Em¹áîî^	UÏE¶éñǃ´îóÆnUoõÙöþ™ï~¿”]çùΕò¾og hÖîgãïþvïÿdw–ç'ðú>p‡žIÖoÜ`ðO‰÷îÏøîä	_Mƒ´o§±o_¯SÖðäæð?	t.[µæwÌL¯£z¯û«Vò!:kÚYïÈËmÏ~ðĽ,¯èßœ
+ßñŒ
+²·–¿’«{J%¿#OÀW‰©nò]ÙrÏòqÓ*sü1s×ñŸý9sÁŠ 4¯®Ô" 6°½$K²í ­¸.÷pÁó¢|r:ÿ¬»ú)@Ò«Øô¸2t§*C**W°+÷¦!¯A=ßóÌìs?G1^¿(¨ú¦¨"ôÕrª)wô>"sQ·s\ÌrÚØôÙ´ôKoîLßa@­Š
+ ¡2±·²ò‘ÂuR—¨>;kçâõ ×TV·
+WuX7‰/Ÿõ)¼ñÅ	¢&bœÑ†t R*jÇ£)ºuDïqHWui=öŒŒÜe‡qLwv´*ñG‡0ÔAž?ºv=ÒöPªkŸw8õ’zF#Ovc*w®9wtó¿wioô:Ÿ§nOtRô„—wÓÚ«R'vôîVq/´/ã÷:lö€w·Z·-xÊ ‡sêRó6«( ?yÕÁ­Dÿ Bws+<ç"·õwÛxG]èÇxA}öºðÔÙšŠÊ™§ù‘hö©ÝӍ‡ÅG°ž÷y_Ú çÉ¡'zé´ùñ“Þxßù÷Jk±›—°¿ÏŠú~ŸzªO]²S] ÄbQ¥&œÏh‹Lq§oš­Gàœ=³»_ù¥c—­ætNzƒ¨îº/í½ß¿IÏ–â¥úš—õJ
+pµZÁü¹/|Ò>ü
+NüÉ\|Æ	ôÅ@̝Q3|ʯ|ËGëœÕ|@Ñ3̧BµÇÏÀ·N‡‹{½m}†¡ûÓo›u‰ùeýÎ/ú"¾ÓÍáyösÛ¿}ÜÏ}±?|ÞgÏÚþ}Ï~î|Øÿ'þ€?þ†©vå?ñ½7{Áþ»„þªw|îe•ZÒ/}œÔõíŸÕ?<ï—Óçÿxý±L8€{µœå¤ÿ¹c€ p Á‚"L¨p!ƈ  ÅŠ/b̨q#ÇŽ?‚)ò¢Ä‰#O¢L©r%Ë–MºŒ)s&Íš6ov„‰s'Ïž>
+*t(QŠŠR@`)Ó¦NŸB*u*ÕªV¯bͪu+×®Su"
++v,Ù²1K¢M«v-Û¶nߍ+÷­Ùº@%ÚÍ«$ؽ~ÿÆØ70á†#&z©R¯ŽCŽ,y2åǃcάyóÎ’œ?›õztÍˤO£ÿœz5ëÖ®[..Ú¸2íÚ¶oã®lú5ïÞ¾¢ý-œ£èáÆwO^¹òæύMtvîêÖ¯c·Í:÷{?]<|ëíäÏË4~={ïÒ‡RÏ.>ýúOշϯðøý{ñú'^€ª„"ˆÙ{BÅgŸƒB¨[‚R8xÞ †˜¸a~z¢ˆ?-Tƒ¢˜¢ŠU8¢‹/ft!Œ)õ7ã_-ÚŽ9òØ£F%Þµ¢C¹ÔŽ>"IaI&“ü=ùa”SR‰Àew"„ZÙå‘U‚ÉžŒ9.¦X_š‰ši²©ß•>qY[œTÍi$Wuv¹âšmòùÿܘ–Ùçt‚êH¨¡¾Ùž⹨SŽæÉè¡“¨RÊX¦ÇmÚ©‰ò)JIÔ©³•ÊT|©š‘ª¬BU’‘²¾êꨦFꥧ»¶÷çz–òÚY°½í9¬±œÚ™V¶Þ:+®vB-u¨ªjµÏNÛ¬¶¹Yì±ßræ«sÀ‚[Z¹¬y{®º~%‹“¨«F»m³×V+ocJu/®úr[dºë\¹®a°°ƒö/ÂÕîMï>/¼ÚN¬%¾±Þ¯¨ýʧ0Ã/7ðg"ƒ\`É™y|²Ê59lÄØ>[/ªiÅóW­º:íÌsŒ]Ê+=É„
+´H?=ÿÒI3RË¥-ñ¶×{_TÛ{©5÷ŒâÒMƒínÁ‡6K_›Úi³]ÀÓ4½,³ÍóV
+-Õ,ÖMwµôvíuÛ\´ÐNÞÒÚ…{t8âI¿­ô²ôNLqÌÙJkmݶfKyß’.Þùe3ºç!)>ºj¦£>RãéE
+kƒ®?Êl­±³˜qζó›÷æõ•žºï‚	~á¿ŸÔ»ïÆoðêgEíÏ»Cï|òÓ‡%nz¢S¿ò©oŸ}¹Ë»÷Ñ“_]÷Þ'üKØ£ÿRûp¾?=ø†7ßÕó8Ó\>ùçÇO¼õÄ
+¯¤ »è»ù­~ÓådÀ*ÊRêëÿÿFWAN
++¹_;è bÐ š AØ9†°O,[Ø/¦{i‰!_hx"n…4r!óC®lÿáƒÄÂéPm=\b·ŽèD¾°Ï"$ôßMVÅ´%±xz²Þ˜ø "^Qe¢iÑFN…±xi[GÂA9q‘N^ü❨!“ ég<ãpøØ6?ÖqFm<Úµ3Ç2†5Âã
+›À¤ÄJd
+)i´A’®u²›Õëdw*͍j“W‹]æDyÈÜHÒ’›Z¤“EGÂdŒnåGÆ„ÜR5˜šHqxùÈ¥2mÁT%†0É—JìrUcäÿtgµe¾Ê™§Ô1Û'ºXâ1–‰“bE´ÉÍÌ°›9!‰8›TNpöexØü¦:y4Ì°½³š2f-¨7¹Á,Ÿ‘eÍrǵi:Pž"ü%9ÙYPí}œ…$-
+ÄHƒ&ôœËC%ê¢x‚
+£%=gOÞÓnRéœøRy4 õÉ(ÊP‹/Fë;'áʈΗNô ­hN#:"6
+¨+ÝOGsòQNÒênøT‹ûéÔ”âF¨C}Ñ+OWN—&«
+Ý)Eæž*4¬0Å*Yu*"©
+­SeOQ‰sT”>õnqSê?¡:µ®UIUuDaª=oŠõ¥ƒ!¨-qÿV­îÔ°`ÅkY»2ÇæÕ=Õ{+]Oʯ}Æ*o$µëm YýL1±­UÅ
+XÁJ9jQ,kͺØÖþô³~•-¸Úª=dNM™ÒjfåšÚÛPJ“³‘ñ,mɳףu3›³(`qÙ\Ÿ–6œ7¬7ÛÙZëÆ–¶Ä-®rlûMv2¼ûò$Î,WÞ½™R¸’Ù.w›Úœ´’UíOMo¹Ntx­Ìæxr™Ó]Ô—ìTqÜÞßx7FötžnÔ»¥«ë½Ý‘Q:Ýh#3Ã~M‚³à8ÞÕÁtÜ°±Ž+¦ ã÷—æ5LbÖtØÃXycp¿²¸ŠØg/ö”„Cµÿ¯v¡¨Mî-LÕïø[1&IVh\×;99ÇÒK²¡z|úŽÍ¦†õ‹Öe*“fÉR”2™›f>Y˜&Ô†¿|æψ¹›ež3‹Þ¦5³IËrsÀølgÍÄ9)tôÕþü¤4ßÑÜñ3ÀmhÄZЄžô¨Ý#E
+Óh„°£-]˜Hƒ“Ò“î´§]–ß“éÙ¸$&u©êP‹zάnµáðü±Tëų¦µ^^
+ëXçx×¼–¢jmVcóFØàRö°Ëâë([Ìæ5èm6\lÇÓnöX|ýëhsvۭ§ii›Û„ò6:Á
+ÕS«;9l±!¶Ã•dqÇ[ÿ1yI¯»]ˆïR¹Šõ&Û½ó­ÂÏõ{‰ð6¸p~ÈsˆÊÿfxtní„{má§Ñ\:îñƒ<ä¿6Äá'ñ§‰Ýëã7Æ}Xn”;"™9ÍkN´Ø<ç3/ù*y·3Oæ;Q9|Enô£#=éJ_ºÃ….<C=êRŸzÔ54ŸŸ
+èNÑ·NAªƒ=ìb»@‚ÞG¬s¹œö:•ºÎvïÉœìrŸ;Ýbõ ¢$§-øÛŸäö¾§¯î‚<áË.û_—o6;àcò÷Æs¯ð’ŸüØ¿hˆ|£5…|’Ïy–R>ô¢¯zöž_é®:ïŸoŽçWÄÑÃ>ö;ÿßЄˆzNÜõ.j½îÿ(ûßÿ –-°Xyûöæ¾÷"â½òáüçCøú…ßâÌ7¿=ÌÏ~Ò  ýï_ú•²ï…TCìs=ÛOÿÕÁ¿s÷Äû¤⼧ô—³?<ëÏ?ªk.ÿ„üßà CàÜý_ú_É0Ý2`š_£!ÿ•&.„Ÿ†ÝJøE’D|_ZÀ â_ÐD æÇþ© Âp  ”DÙ‰ Î`Ò`Üà
+f 
+Ê àö üÙ ðñ`áÖ zÞà :áè1a	^`
+ÂSzba£]àÍ•]
+¡îàÿ"DÜ™áÊàá¦!Va†!Æ¡Ê¡Ú! FXRá
+Ÿø9àb 
+¢õm!Kha!ž" Šává`$ª¡$Òaü=b%6â$z!&n¢Þ²y"ŠbüÝŽâ)†ß	bá!"â²AF¢
+Æ"–a'n¢&6¡¡Bx .ú"ö¢š"~K(¢â1ZaÃÑâ12ãó©¢²b+‹êbcò¢-’á5Vâ-zã.rb7f"7Š£A,£ðc3ª#¢Ç9®ã;Ê^2"b4Jã°xb&R"#f#$zc#.¢6æ 0Þá8âã7:":N#<*¤9—ÿ1.äCʝ<®b=‘æ#Âá6ZäÆbF®!GŽ#8ö"–c8þ¢"¦#DB$«9¤Jº¤ØI$Ò#EòŠ"2á.!Hº£Â")ú Ò¢)î¤IþàO’¡ÌQbBDB¾äCvZK6eTNBÐLÒ$m`ÎA%*Rå™H¥B>åWŠeáu¥YåU®RVÚÜVžbYÊÆXÂ#£±%\ÒåR¢åEœå]RÊ\îœZt#nåZ¸Ÿ[¾%3&WŽK]*¦êeEäec
+_.&Y2%Ø)¢e¤Ýùß+å& rHædŠæBæcBf•&fabæ>vàZn¦k’ã_Òœ›…fÿjNæj¢ižf¦á&üé&|@,&!N†áP¥'rbâM'^ä6~æq´å:ÞæTgiöf
+]çoN¥+j%@’d0Òf?ú"IÖâGdfdR®¥¼a§lV{ªæï‘ç{ê%ongŸt§wê\p
+ç‚£%š$Dì"yZ䁨	"èü5\|äk"£}Jçt¢¥~î'šõ§>DLæYÕõdr¤gšcˆ%‰åªèû•äRgm>ç*åŒòbO.çe:gg.arÞŠ"a5VèZ#æäqòbcbh†¢‡†€²&ˆ
+ãHb£Ýùc¦§Qö(}*(–vè‹v¨ÿxr¤FÊæ•Ö¡	žéx‚äz¢) tŽ©zÊ)á—æ'“*Ò†:i‰ra|6hyj—Þç>º'?–)›j%˜†©9f©—2ê£þizf&A²)5Š§kR©¡ž§AÚݝâiž2çžúß3¦	TF眒i„r#"çš–äejj vj­eˆሆêŠ6ç0è”Ö`'✌ªjAFh¦ž¤@:*1^è§Òß :ë³ÒE†
+§söàœ"©°²êµåGvfê([vY`⣱n©•n*k¬†d‰ê/>j8ž*9*;Þå’2+úð—‡RžŠê§€èºr)«fªk¥è°"áÿ%’+¥¬…^¥½ÞkéÅ©‚^¿FhÖ¦˜zd‹¨™Êiºªš¦)§bd2g0Žì¥&+BÖëÄn\±Yìßð+Œ’à´ÞìúeÝÙæ¨v«ªi®ÚªqvaŽrë®Î"Ž.ãª,"*Ršl’z*Ì~ ßâÔ,ÆΞÆÒeKfmÖ’”&ÄR-qœ¾Ò¬ÖÆ£Ÿtm‡Î¡‚-LjgÙæ[=àºÄ­Ú*+×JáÎê,	Þãµöaβ«ˆ
+î“Î-ݪ[º\m÷é­è…åãî©ØʏâÆÛÏ4®I®ä±äæú'åV®årÛÚÜ-å­Ú¢-iœ®çgo’­èZl”î^²nÿضcíŽ&è†.ìRYd.Þ®îçN[ðâîÚnçëò.ÖîÛÌÚ#ñæfêŒóïäAoú!oò‘_üî4níÎnbHïô
+ ž^/öÒ¬aloóBëúB«^‰¯JVoþ•¯ù²Í;¥/ýšHø¾ïTÆ/ÿÍ/þ^áÈ0/ ?L÷îo<0ûý/3
+^Ý/0ûJðS°îV%ÿq=0÷Ês°X,ðg—	!é&°Ç÷¢ðЭð¾nÔRkÊàôoGï	Ûp·å°Ù®Évøpõø®
+ïpñ÷DñôÅ—BÍ׍P/=ñ#
+–)‘‘–€qS/áƒqwFÿ{±O q÷Jr™ÓëÔs%ÔiáRi™–SWLÅñUí]þÖ0s1ã1‰ìqý¢t¥ñr©1N1ÇkV…õUO©pèqë;2»Dr _•Yɱ%Ÿ±i]F±]—%—U"“Ö™4²â$Ç›r¡€²#ÖWq•oÕ!Öh}ò"‹ò§2,Ypò¢r.»×Û2¿ñW,tÕ²"oÙ1&ë…‡±3ûòfôr4o2‡2sÑÔA±±1³5#r%¯2ƒ 1A²¢Hc)SswLs:7c—
+s`aW±ÑTsU× OT›ó5¸ìB3;ŸÆ:´oøÿ×’Wå«ýÕ—Wì~Y±sUñ2˜A•3([‘Ñóä:´ú…tn´'Y[ôÝAñC×ßÀØÒ;Òo±8iqFØ(ô§åt©‡2s%™ˆ;ós Ù=k1qh³0ß—=Ïñ>3À
+ôN÷†AKõ¸4]£sGw4 #uP‡sWµUiSÑ2buòW7[TWµpPõZÚÑ0ôé4pt³?g2WÏ3E/Üæ¡5-×õ.ó'N»5²ö=å_/tû×!OqW±O»qY3³¶©ua³žeWä¢!6e31_rDó5d»ÖY?õgU6fCG[£6™hv_ËTgËrX«ÿGǶY×öf_Ÿ`¯6Œí6
+‘Ú}½3_µsÁ¶]˳€ItS+WXÖPOÕi÷öy¨vtÊUƒæ+tVIqC«SCk·/qtsv߶MÓžnS·oLwzïYòL¾Vti314{3ÉzÛw‚Xw¹sÍ5}£w~w—€ÇO}‡Gý‰{c3!‡÷¯‘x•àw„„×d\orv›7…Ï“‡ãk‡ïJ€‹tƒ8¢œx鉸úâ2Ö’xŠ‹4ŒOÏŠƒ"g؋˸öåxúløk˜xâøŽ»‰›m	Ùx¦ü8‘÷È„+9œTð“ÿ!‹÷øçy““[yipñV¹ÿw$y”|y–û˜_šþ>oOy9™9›Ógg"v¹Ž„¹›s_”™ÿf‹OIs8Ÿãù¦`y “œ[捯¹{ù9¡·É 3zNz¢Z¢ûøœ?:8ú¥ÇH¤ËícYº]X¸¦3Ž¨W
+§W^:|¤:©w«W¸©w:<QzÈ̺«º­ï‡žëmš[\­gȪãzÛ{¯ÀzDº¸¯+
+°{˜d:©ë:áÅ­À&ªé,úUû²«K³‹zÍÂ*´ÇæÆÊjmò¸DzƒcûŸû^·&l†»¸ïkíY]
+†zºS¶_úuÞ¨Œî{6Ú¨‘¦è·
+ëà’«¿ž7ÿûHP]»½«¾?úmžêx¦ªÈž)ªZkÇRü,¼9a•‰¯,<ÍÃ3:Ä/¨¦ZêÁj¼¶¬6B<w~Õí­V½‹<º×|bv ­æâ@j+@¾ê­
+,ÓÊâÆo-½5‚ß| ‘<¡o(å"&¨Êãâ?¾kƯª¤ß”k}Ò%½Ù,} ëiÁÎfÔþ|ª½Ï¬»:(>»áü–¯;²wý’Ͻ{µæyÆ©Ç.Z<Éj|zdhòú·}‰F!Ü“e¹×}Ê-þ¿RP§µ¦¬:¢®Òèå·*Rîè»Û©œ»•6þÇ|=Øfx6ãàÃMáŸyè+ë?脺»ÿaò÷çk%ê»>ËÜþw §_c¨zk°Ž/xÒþ´ç¾’?B¿ÁòsüñËè—<óJJ?Ä:¿§@?ÓW¿õ‹êOîõKökÿöÓëò“烧ˆÿøŸÿÞVfû}úgÊú3½÷+¦â_ÚéGÝÙ¾ü‹ýD	4xaB…6tøbD‰)V´xcF9v|@@H‘#I–4yeJ•+Y¶tù²$ 3iÖ´É$L•9QòÔ3¤ÏŸCEòJ´çM¥K™6uújT©S©Vµzâ ¬[¹võúlX±c=8ŠmZµkWš%û–ëY¤r‹²­k¦ÿQ¼1áöõûp`Áƒ	sÕZqbÅ‹7kÖì^É“)„,ÓqæˆtY^
+ùsdžGƒÞiztiѤ{–þl5HÓže‹͹³fÝ»y÷öýûïaàÉ7~êeåË™7wþztéÓ©WGþwJŸ9rç~7¨vËáS¿vÝÓ;ùÕéÏw7¿}îuùóé×·Xø}ýûù÷÷ÿÀÇæ2I®ïÈëŒÀákMÁË[P¯»²{	³ -¼Ã‘ËOÃ=üÄELlBíbƒm6³cÍ@ÕPK°ÁòÔOÆ]L«ÂuÜ‘ÇiâÐÇ …’È"E,±­mk¶–V‹Á!ÿ¤1BÍ#*G#µÜ’KìÌ0Å“̱Ü	ÊOBÒÀ*ۏÉ8Ó<ëL¾Ê¼Ï<ûRÏ>ýüÐ?ë¤qÆ÷”$ÆBÝ;oM8
+uðP	Õ)Ë@-½Ó›øÌ”ÓN=ýt¿AUlRµö¼³
+½%‹:·*»SNÙem¨JA½×[7Í•×^}ýõ-Q+–ØamÙd»ÜUÙf}ÚŠ„-–ÚjÑ:6ÚlµõrÛn½ýöÙi÷jîZæ¬e[pÕ]—8fÙ}Þx»÷Üzí%PÞ|õuÌÝ}ýýàÿè½—`{Ó
+á„«êWá†~رž˜Øƒ!¾cΘãŽ=ÿÆJbŠEÆËâM>¹ Q^™å–¥æ‘Kv™æ‡U®çœk9æžóšYç ÷½Y袍¾UŸ•–Ì­£F˜è§¥ž:ߤ—¾z. ©Þ:Ú¨¹þìl_ÄšìΚmo½N›í¶y¥µì¸]t›î®ë¾og«Û›ï¾ýþ›º¼OvíÁ
+?\a­_ãÂruœò¯ó́\óÎÕ½ÜóÐE·”óÑMwôÓU_}^Ö]ÿ6õ×eŸýHÚmo6öÛuߝ¿Òyÿ½Ì܁žxà|/ù"…Ožùæ;ÞùèE\^úê­ÿ
+ú뵐úí½ÿ¾©ìÁŸ¾îÉ?ý‹ÄÿOŸýßÌoþøZ_þú÷´à1£_#þ'ò?ÌŠ 	8»ýõ¯!àf
+ØÀ¥¼ÏäÚ3R2VeŒ 5ØÁ A¦ aGÂ*g —ˆ
+Sˆ„9Š¡AdRšðl5<›yxöˆ(«PÓrˆ¶p…"“ØD%>щE\a¥¤hÂ#ZщAâµØEŒe‰‚Ltáo8Æ(’Ñ‚Y,#iE6–QŒ^Ô åXÇ„½ñ	ÙaS¸Ä)Î'albã(È5BÑŽ¤c"©/<"R!{”áÕ(IRò‘d,d%9ÙH.Ò“¡\W&ù¨Gÿ?ÂñŒ4<¥&yEBv’”j%þ@9K[j+–¨$W	ÇUö–n„d0]9Ì[ʯ–ÇTf³†¸?`¶‘—b¬¢K9I^žRŠÓtã3—ɾdvœ¾Â$ÂÂ>NÑ-9t揥BuÖ†éD¢©YL†³}ßÄç>wf‘vBó#ü´Ÿ>ZГi-—Td AáGP†>Tι‰DõˆFVÊr!„èìºQÞq3÷4§13úÑóuÔ¤)u¤JŠR–¾´[ρi8]:S›†«97]fMuÚÓ_åÔ§·äiP‰z+æu–CEêR1µ¦†R©O•ªŸ^8U;FÕªY%ÓHµÚE¬vÿ¬\ºgX{øU²žUH{D«ͺV·êH£oµ^[åZ׫ ¯yÕë^ej×ÌÑÕ¯e
+ÜäVت
+öp€Eìb;bµÂ>6&qe,Ë;Y˾²™ÝÉeïVYÎ~6š­‰@Ë6Ï–µ0íjµ“Z°Öµ¥åk{&ÙØ&¶·åìli3Ûê`¹.cyÛ[ß×iÂEn`‹kÜã.WhÊ…n]›ë\‘ývºï’nv×Z]ë^—»8ÛnxÉêݘ—I”Á.yÕÆ^÷6¶`­B—•$#c½weãÅïTÍû&ñl¾ö­Ìz÷û,ý˜©ýՍLÂFVUN$`õ"øcÿÆpQ)±ÇMœ™RØ³&Ów2Þ0²4¼âžvÅJš€R£Iý7½vqãvÜcZ‹E*ŠÓ„!¡WYÈ…*–Š}Œ«7ù¥0&É“®”cFFÉl22ŠSå†=ÙË*•2•À£¦Dù7RQRµ˜fOÙÍ…ñˆM5§ÿ®ùQèy—Çg¨ùÙÅR¦Õzjc(ÇN¹Â¦:4Š\ce¦:¸Þð˜¿[¯6K:PpÆ´A)]i6ozh .p§×B®¬-Gf¢Î—¦U½OR{ú­Ž«eÎWÚdµžµ®Ý{k\£‹×Ú
+6{}ýëk
+›]´Fö1‹mìŸ\zÙdRÿv´m¹hgŸÚÔÓ´µ=Ëf_»µÝ·ÅJkƒÛ`Ù.7˜È½nO>Ý㪻µÕnz››¯ùÖ÷¾wïuÙÛß8ê^pƒ'öà	W¸Û ¾p‡?<O
+‡øÄ)Î%‰WãïÑÅ5ÞqwˆãùÈûr’Ÿå×1yÊYÞòÞ¬Üå1—¹b`>s›ßÜ/5ÇùÎyî÷èA—ÊÏ…^t£Û„èGWúÒ1’t¦?êqzÔ©^u‚LÝêY‡:ÖµÞõ£sÝëa:ØÅ^ö›“Ýìiw9ÚÕÞö“³Ýíq÷8Üå^÷ŠÓÝîyw8ÞõÞwƒóÝï÷7à_ørÞð‰6âÿßx^3Þñ‘W5ä%_yISÞò™w3æ5ßysÞó¡ß0èE_zü’Þô©/êUßúå²Þõ±¿-ìe_ûÒÒÞö¹·,îuß{ÁòÞ÷Á—+ð…_ü³ßøÉ×*ò•ßü§2ßùÑ'*ô¥_ý›RßúÙg)öµß}rßûá7(øÅ_~|’ßüéW&úÕß~Q²ßýñO$üå_¯Úÿâ¦þù¯Èþÿ?Øö –Ð AM PÑ'п§Pçj+ÐÅ"Ð3°x0P;w8ÐCv at PKuHÐSptPP[PsXÐc0r`PkqhÐs0opP{á|ßÝŠƒ·f‹	“+	—PªŽ	Ÿ°fœ
+§0¿¨Ð
+mJ
+¯Pyl»ðû¼*ÐC­ÏœÆ
+×ðsØÐ
+“ê
+ã°‘ÔPëPYèÐóÐWðPûPWüý/‘€øÑOñN‘1L'QK$‘/QH,7qG4‘?D<G1CD‘O@LWq?T‘_±|`QOpkÑt\Ñsñåt‘1{ï'‡áˆÑwð“±n~Q›Q,˜Ñ£±+ !ÿSTARDIV 5.0	y¨  =m   ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.sda
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.sda	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/stats/stats-process.sda	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,657 @@
+ÐÏࡱá                ;  þÿ	               ›                þÿÿÿ        €   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿþÿÿÿ      þÿÿÿ      	   
+         
+                                                             !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   þÿÿÿ2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~         R o o t   E n t r y                                               ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        þÿÿÿþÿÿÿþÿÿÿ               	   
+         
+            þÿÿÿþÿÿÿ            þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿ
+  ÿÿÿÿ ‰.½…щР€)ä°±   Drawing 
+   StarDraw 5.0                                                                        |&  ýùÿÿ‡«  iG                                                SfxDocumentInfo                                     LU1,̉                                  ¹U1x'¡                                  uKô                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Info 0                                   Info 1                                   Info 2                                   Info 3                                      LU1,̉ °í4       <                                        1,,,1                                                         þÿ                        à…ŸòùOh«‘ +'³Ù0   ø      	   h   
+   t      €   
+   Œ      ˜      ¤      °      ¼      È      Ô      à      ì         18  @    ":Þ  @    Öè)   @    ãFA ÍÀ@   €ßbÓ!®À                                                                                                                                                              »» ÿÿ    ¨     XOutdevItemPool      1   èèéêëìíîïðñòóôõö÷øùúûüý
+ è)èéêëìíîïðñùúûüýþ	
+
+&'()*+,-./06789:;UVWXYZ[\] ècèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst ètèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
+
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef”•–—˜™š›œžŸ ¡    d   î   ì  c  0 ƒ œ  ¹'è       @  q          X  X  º'é    6   @  ·     
+ Standard 1ÿÿÿÿ               X  »'ê    .   @  é           –     2   X  X  X  ¼'ë        @         ÿÿÿÿ €      X  ½'ì    ¨   @  É     
+ Standard 1ÿÿÿÿ       Arrowÿÿÿÿ   
+                                   Arrowÿÿÿÿ   d           È                   d           X  X&  X]  ¾'í    ´   @  ‰     
+ Standard 1ÿÿÿÿ       Arrowÿÿÿÿ   d           È                   d              Arrowÿÿÿÿ   }           ú   ú           ú       }           X  X&  Xi  ¿'î    .   @  à     ,    ¼    È   X  X  X  À'ï    .   @  ý     ,    È     ú   X  X  X  Á'ð       @  )        X  X  Â'ñ       @  L      X  òò    
+   @   f  óó   
+   @   |  ôô    
+   @   ’  õõ    
+   @   ¨  öö    
+   @   ¾  ÷÷    
+   @   Ô  øø    
+   @   ê  ´'ú       @      +      X  X  µ'û    Û   @  Û       ÿÿÿÿ €  ¸¸ÿÿ    ÿÿÿÿ €  €€€€    ÿÿÿÿ €ÿÿÌÌ™™    ÿÿÿÿ €ÿÿÿÿÿÿ  	 Blue grayÿÿÿÿ €ææææÿÿ 
+  Red 4ÿÿÿÿ €ÿÿ3333  	 Magenta 8ÿÿÿÿ €^^¦¦  
+ Light cyanÿÿÿÿ €  ÿÿÿÿX  X   X2  XD  XV  Xq  Xˆ  X£  ¶'ü   @   @  C     
+ Standard 1ÿÿÿÿ        ÿÿÿÿÿÿ      2 2 d d   X  ·'ý    2   @       
+ Standard 1ÿÿÿÿ               X  ¸'þ   ,  @  ¹	     
+ Standard 1ÿÿÿÿ    BMv      v   (   @   @     SD               Ä   @      x^íSI
+Ã0ô¯sŒ½å\èzéü ÿ
+ª–46•Z…Bn›8x‘Ç)1²Ì”³.<觔B+ï Ì„¨Þ¢Ï40:prf
+š‡·í|q±ìüâÊ]~½+Háë•~|ðWíF¼ðúúMñbÀöž þâPÙ@úaüoÌCÄ“Ø[½È¡z¼6~U{Û߃<ª½Õ?¥ †ü–{¿rü=+Îý÷ô—|´¨ý•¿.©MåÛxò³åG¦
+Ü«±X  ÿÿ    
+   @   Ó	        
+   @   é	      
+   @   ÿ	      
+   @   
+      
+   @   +
+      
+   @   A
+     
+   @   W
+      
+   @   m
+      
+   @   ƒ
+      
+   @   ™
+  		    
+   @   ¯
+  
+
+    
+   @   Å
+      
+   @   Û
+      
+   @   ñ
+  
+
+    
+   @         
+   @         
+   @   3      
+   @   I      
+   @   _      
+   @   u      
+   @   ‹      
+   @   ¡      
+   @   ·      
+   @   Í  (    
+   @   ã  (    
+   @   ù  (    
+   @     (    
+   @   %  (    
+   @   ;  (    
+   @   Q  (    
+   @   g  (    
+   @   }  (     
+   @   “  (!    
+   @   ©  ("    
+   @   ¿  (#    
+   @   Õ  $$    
+   @   ë  %%    
+   @   
+  &&    
+   @   
+  ''    
+   @   -
+  ((    
+   @   C
+  ))    
+   @   Y
+  ;(+       @  y
+        X  X  ,,        @  ©
+       ÿÿÿÿ €€€€€€€X  --    "   @  Ó
+     ,    È   X  X  ..    "   @       ,    È   X  X  //    
+   @     00    
+   @   5  11    
+   @   K  22    
+   @   a  33    
+   @   w  44    
+   @     55    
+   @   £  66    
+   @   ¹  II       @  ×    ( ô  X  JJ    .   @  	          '(    ’,  X  X  X  KK       @  5        X  X  (L    
+   @   S  MM    
+   @   i  NN    
+   @     OO    
+   @   •  PP    
+   @   «  QQ       @  Ç    J  X  RR    
+   @   á  SS       @  ÿ         X  TT    
+   @     UU       @  4     X  VV       @  Z    H      X  X  WW    
+   @   x  XX    
+   @   Ž  YY    
+   @   ¤  ZZ    
+   @   º  [[    
+   @   Ð  \\    
+   @   æ  ]]    
+   @   ü  ^^    
+   @     __   
+   @   (  ``    
+   @   >  aa    
+   @   T  bb    
+   @   j  cc    
+   @   €  dd    
+   @   –  ee    
+   @   ¬  gg       @  È      X  hh    
+   @   â  ii    
+   @   ø  jj    
+   @     kk    
+   @   $  ll    
+   @   :  mm    
+   @   P  nn    
+   @   f  oo    
+   @   |  pp    
+   @   ’  qq    
+   @   ¨  rr    
+   @   ¾  ss    
+   @   Ô  tt    
+   @   ê  uu    
+   @      vv    
+   @     ww    
+   @   ,  xx    
+   @   B  yy    
+   @   X  ùù    Þ   @  
+          è¹'    è¹'  #      í¾' ïÀ'        è¹' ë¼'         è¹' 	   è¹' 
+ #      í¾' ïÀ'     
+   è¹' ë¼'  X  X  X   X,  X2  XD  XJ  X\  Xb  Xn  Xz  X€  X’  X˜      Z  @  `          ú´' ûµ'    ú´' ûµ'    ú´'  ûµ'        ú´'  ûµ'    ú´'    ú´' ûµ'     	   ú´' ûµ' 
+   ú´' ûµ'    ú´'  ûµ'     
+   ú´'  ûµ'    ú´'    ú´' ûµ'    ú´'  ûµ'    ú´'  ûµ' X  X  X&  X8  XJ  XP  Xb  Xn  X€  X†  X˜  Xª  X¼  XÂ  XÔ  Xà  Xò  X **  
+  n   @ 
+ ú                >                    >   	    X  X  X  X   X&  X,  X2  X8  X>  XD  77  
+  n   @ 
+ t                >                    >   	    X  X  X  X   X&  X,  X2  X8  X>  XD  HH      @  L      £+'            £+' ¦' §'     ž<(   @'  £+' ¦' §'     ž<(  Ÿ
+(  @'  £+' ¦' §'     ž<(   @'  £+' ¦' §'
+    £+' ¦' §'    £+' 	   £+' 
+           £+' ¦' §' 
+    ž<(   @'  £+' ¦' §'     ž<(  Ÿ
+(  @'  £+' ¦' §'     ž<(   @'  £+' ¦' §'
+    £+' ¦' §'    £+'    ¦' §'    £+'    ¦' §'    £+'     ž<(   @'  ¦' §'     ž<(   @'  £+' ¦' §'     ž<(   @'  ¢1' £+' ¦' §'     ž<(   @'  ¢1' £+' ¦' §' X  X  X   X&  X>  Xh  X˜  X  XÚ  Xæ  Xò  Xø  Xþ  X X@ Xp Xš X² X¾ XÐ XÜ Xî Xú X XH Xx ff    ¦  @  &      QQ  VV     JJ KK     JJ KK   !  II  QQ  VV     QQ  VV     II  QQ  VV     JJ KK SS  UU  VV    JJ KK    QQ  VV  	   JJ KK  
+   JJ KK   !  II  QQ  VV     QQ  VV  
+   II  QQ  VV     JJ KK SS  UU  VV    JJ KK X  X   X2  XD  X\  Xn  X†  Xª  X¼  XÎ  Xà  Xò  X
+ X X4 XX zz    *   @  ”      gg     gg  X  X      8   z   ´   à   ”  T  Ž  È  ð    %  ;  Q  g  }  “  ©  Ó  º    D  |  ’  ¨  ¾  Ô  ê       ,  B  X  n  „  š  °  Æ  Ü  ò      4  J  `  v  Œ  ¢  ¸  Î  ä  ú  	  &	  <	  R	  h	  ~	  ”	  ª	  À	  Ö	  ì	  
+  
+  @
+  l
+  š
+  È
+  Þ
+  ô
+  
+     6  L  b  x  š  Ô  ü    (  >  T  j  Š     Â  Ø  ÷  !
+  7
+  M
+  c
+  y
+  
+  ¥
+  »
+  Ñ
+  ç
+  ý
+    )  ?  U  k  ‹  ¡  ·  Í  ã  ù    %  ;  Q  g  }  “  ©  ¿  Õ  ë        g  á  [  s  %  
+   P   ¶  (     EditEngineItemPool è      °   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ~!  0 / †?  ——    
+   @   ä  —*˜    
+   @   ú  ™™    
+   @     g*š   |  @  €7      
+              "ð                    ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý°°              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý`	`	              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý¸¸              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýhh              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýÀÀ              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýpp              ,    StarBats      N  
+            ÿ                 €      -      
+              "ðX                  ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý°°              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý`	`	              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý¸¸              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýhh              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýÀÀ              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýpp              ,    StarBats      N  
+            ÿ                 €      -      
+              "ð  È È               ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý°°              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý`	`	              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý¸¸              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýhh              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýÀÀ              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýpp              ,    StarBats      N  
+            ÿ                 €      -      
+ Z            "ð|ü°°              ,    StarBats      N  
+            ÿ                 €      -          "ð|ü°°              ,    StarBats      N  
+            ÿ                 €      -          –ðàü`	`	              ,    StarBats      N  
+            ÿ                 €      K          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          –ð¨ýÀÀ              ,    StarBats      N  
+            ÿ                 €      K          "ð¨ýpp              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý                ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýÐ Ð               ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý€%€%              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý0*0*              ,    StarBats      N  
+            ÿ                 €      -  Z    
+              rð                    ,    StarBats        
+            ÿ                 €      -          rð  èè              ,    StarBats        
+            ÿ                 €      -          rð  ÐÐ              ,    StarBats        
+            ÿ                 €      -          rð  ¸¸              ,    StarBats        
+            ÿ                 €      -          rð                  ,    StarBats        
+            ÿ                 €      -          rð  ˆˆ              ,    StarBats        
+            ÿ                 €      -          rð  pp              ,    StarBats        
+            ÿ                 €      -          rð  XX              ,    StarBats        
+            ÿ                 €      -          rð  @@              ,    StarBats        
+            ÿ                 €      -          rð  (#(#              ,    StarBats        
+            ÿ                 €      -      	              "ð¨ýXX              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ý°°              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ý`	`	              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ý¸¸              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ýhh              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ýÀÀ              ,    StarBats      i  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      i  
+            ÿ                 €      -     X  X. XN Xn XŽ X® ››    
+   @   ®7  œœ       @  Ð7          X  X     !   @  8   P d   d üd x X  <(ž       @  !8    Q   X  
+(Ÿ   Á   @  æ8       €        
+             StarBats  °   !"-         €        
+             StarBats       !"-         €        
+             StarBats       !"-     X  XG  X€  @'    L  @  :    P   d   d   d        d   d Xd        d È d   d      ,d   d |üd °   @d   d àüd `	   ¸d   d ¨ýd    hd   d ¨ýd À   d   d ¨ýd p   Èd   d ¨ýd   	  xd   d ¨ýd Ð  
+  (#d   d ¨ýd €%   Ø'd   d ¨ýd 0*   ¨ýd   d ¨ýd    
+    d   d ¨ýd X X  X!  X4  XG  XZ  Xm  X€  X“  X¦  X¹  XÌ  Xß  Xò  X A'¡ 	  Š   @  À:       d   d   d d d d   ¤d Ò d     d ôd     d d     d ,d     d È d     d d d X  X  X&  X2  X>  XJ  XV  Xb  1'¢    (   @  ;     d  È     d    X  X  +'£   (   @  <;           ]  X  X  X  '¤    
+   @   ^;  !'¥       @  €;      €      X  '¦    N   @  Ò;      Times   @    	 Helvetica   '    	 helvetica  X  X  X2  '§   À   @ 
+ v<     Nd 
+   4d 
+   d 
+   öd 
+   {d 
+   îd 
+  [ §d 
+   hd 
+   Ûd 
+ 	  Ád 
+ 
+  d 
+   id 
+ 
+ 
+ `d 
+ X  X  X"  X,  X6  X@  XJ  XT  X^  Xh  Xr  X|  X†  ?(¨    
+   @   À<  '©       @  à<       X  X  'ª       @  =      X  '«       @  "=      X  '¬       @  F=        X  X  '­       @  i=      X  '®       @  ˆ=      X  %'¯    
+   @   ¢=  S'°    
+   @   ¸=  "'±    
+   @   Î=  '²    
+   @   ä=  $'³    
+   @   ú=  ‰*´    
+   @   >  Ž*µ    
+   @   &>  ‡*¶    
+   @   <>  Œ*·    
+   @   R>  ˆ*¸   
+   @   h>  *¹   
+   @   ~>  ‹*º    
+   @   ”>  *»    
+   @   ª>  Š*¼    
+   @   À>  *½    
+   @   Ö>  “*¾    
+   @   ì>  ¿¿    
+   @   ?  ÀÀ    
+   @   ?  ÁÁ    
+   @   .?  ÂÂ    
+   @   D?  ÃÃ    
+   @   Z?  *Ä    
+   @   p?  {(Å    
+   @   †?      $   :   P   Ø  î    E  e  2  Š     T  ˆ  ž  Ä    ê     (  G  f  Ž  ­  Ì  â  ø    $  :  P  f  |  ’  ¨  ¾  Ô  ê         ,   B   X   n   „   š   °   †  P 
+ ˜E  g*š  
+              "ð¨ýXX              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý°°              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý`	`	              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý¸¸              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýhh              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýÀÀ              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ý              ,    StarBats      N  
+            ÿ                 €      -          "ð¨ýpp              ,    StarBats      N  
+            ÿ                 €      -   œœ    
+(Ÿ   €        
+             StarBats  °   !"-     !'¥   €      '¦    Times  '§ Od 
+ $'³  	‰*´  	Ž*µ  	‡*¶     > Andale WT UI;MS Mincho;HG Mincho L;MS PGothic;Arial Unicode MS  Œ*·     / Simplified Arabic;Andale WT UI;Arial Unicode MS  ˆ*¸ Od 
+ *¹ Od 
+     0  8  s    “  Ÿ  §  ¯  ·    >  J     2        + 2T   Standard   Standard     ¾é  # è¹'  éº'  ê»'  ë¼'  ì½'  í¾'  î¿'  ïÀ'  ðÁ'  ñÂ'  ú´'  ûµ'  ü¶'  ý·'  þ¸'  +;(  ,,  --  ..  šg*  œœ  Ÿ
+(   @'  ¡A'  ¢1'  £+'  ¥!'  ¦'  §'  ©'  ª'  «'  ¬'  ­'  ®'         Object with arrow Standard Object with arrow     ¿é   è¹'  ê»' ë¼'  ì½' î¿' ïÀ'  ðÁ'        Object with shadow Standard Object with shadow     Àé   +;( ,,  --  ..         Object without fill Standard Object without fill     Áé   ú´'        Text Standard Text     Âé   è¹' ú´'       	 Text body Standard	 Text body     Ãé   è¹' ú´' §'        Text body justfied Standard Text body justfied     Äé   è¹' ú´' £+'        First line indent Standard First line indent     Åé   è¹' ú´' šg*  @'        Title Standard Title     Æé   è¹' ú´' §'        Title1 Standard Title1     Çé  	 è¹' ú´'  ûµ' +;( ,,  -- .. £+' §'         Title2 Standard Title2     Èé   ê»' ûµ' +;( ,,  -- .. šg*  @' ¡A' £+' §'        Heading Standard Heading     Éé   è¹' ú´' ¡A' §'         Heading1 Standard Heading1     Êé   è¹' ú´' ¡A' §' ©'        Heading2 Standard Heading2     Ëé   è¹' ú´' ¡A' §' ©' ¬'        Dimension Line Standard Dimension Line     Ìé   è¹'  ì½' í¾' î¿' ïÀ' ú´' §'        Home~LT~Gliederung 1   Home~LT~Gliederung 1þ¯ÿß  Ïé   è¹' ú´' šg* œœ  @' ¡A' £+'  ¥!'  ¦'  §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Gliederung 2 Home~LT~Gliederung 1 Home~LT~Gliederung 2þ¯ÿß  Ðé    @' ¡A' §'        Home~LT~Gliederung 3 Home~LT~Gliederung 2 Home~LT~Gliederung 3þ¯ÿß  Ñé    @' ¡A' §'         Home~LT~Gliederung 4 Home~LT~Gliederung 3 Home~LT~Gliederung 4þ¯ÿß  Òé    @' ¡A' §'	        Home~LT~Gliederung 5 Home~LT~Gliederung 4 Home~LT~Gliederung 5þ¯ÿß  Óé    @' ¡A' §'	        Home~LT~Gliederung 6 Home~LT~Gliederung 5 Home~LT~Gliederung 6þ¯ÿß  Ôé    @' ¡A' §'	        Home~LT~Gliederung 7 Home~LT~Gliederung 6 Home~LT~Gliederung 7þ¯ÿß  Õé    @'	 ¡A' §'	        Home~LT~Gliederung 8 Home~LT~Gliederung 7 Home~LT~Gliederung 8þ¯ÿß  Öé    @'
+ ¡A' §'	        Home~LT~Gliederung 9 Home~LT~Gliederung 8 Home~LT~Gliederung 9þ¯ÿß  ×é    @' ¡A' §'	       
+ Home~LT~Titel  
+ Home~LT~Titelþ¯ÿß  Íé   è¹' ú´' QQ  šg* œœ  £+' ¥!'  ¦'  §'
+ ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Untertitel   Home~LT~Untertitelþ¯ÿß  Ýé   è¹' ú´' QQ  šg* œœ   @' £+' ¥!'  ¦'  §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Notizen   Home~LT~Notizenþ¯ÿß  Úé   è¹' ú´' œœ  ¥!'  ¦'  §'  ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Hintergrundobjekte   Home~LT~Hintergrundobjekteþ¯ÿß  Øé   +;(  ,,  --  ..         Home~LT~Hintergrund   Home~LT~Hintergrundþ¯ÿß  Ùé   è¹' ú´'        Title   Title  @  Íé           Subtitle   Subtitle  @  Ýé           Background objects   Background objects  @  Øé          
+ Background  
+ Background  @  Ùé           Notes   Notes  @  Úé          	 Outline 1  	 Outline 1  @  Ïé          	 Outline 2	 Outline 1	 Outline 2  @  Ðé          	 Outline 3	 Outline 2	 Outline 3  @  Ñé          	 Outline 4	 Outline 3	 Outline 4  @  Òé          	 Outline 5	 Outline 4	 Outline 5  @  Óé          	 Outline 6	 Outline 5	 Outline 6  @  Ôé          	 Outline 7	 Outline 6	 Outline 7  @  Õé          	 Outline 8	 Outline 7	 Outline 8  @  Öé          	 Outline 9	 Outline 8	 Outline 9  @  ×é                t  Ð    P  ”  ê  D  €  â  P  –  ä  8  ž  >  ¤  
+  p  Ö  <  ¢  	  n	  ú	  –
+    x  Â  ä    H  t  –  À  ó  &
+  Y
+  Œ
+  ¿
+  ò
+  %                                                                                                                                                                                                                                                                                                   DrMd Ï  Ï  JoeMp   0   LU1 µ‰    ¹U1x'¡    ¹U1”jœ               
+      ÿÿ                               O  â   DrLy      LAYER_LAYOUT  DrLy    
+ LAYER_BCKGRND  DrLy      LAYER_BACKGRNDOBJ  DrLy     LAYER_CONTROLS  DrLy !    LAYER_MEASURELINES  DrMP Á       '  JoeM   t  R  Ð  Ð  Ð  Ð    DrML      DrOb <   SVDr &     Ð  Á(  %                     DrOb <   SVDr &   BK  Ð  ø_  %                     DrOb <   SVDr &     ì,  Á(  7J                     DrOb <   SVDr &   BK  ì,  ø_  7J                     DrXX      gg                   f                  Home~LT~Gliederung                                        ÿ    DrMP 9       ·   JoeM   y¨  =m                    DrML      DrOb €   SVDr &           y¨  =m               '                Home~LT~Hintergrundþ¯           y¨  =m               DrXX      gg                   N                  Home~LT~Gliederung                       ÿ    DrMP ¶       ,  JoeM   R  t  Ð  Ð  Ð  Ð    DrML      DrOb õ  SVDr &   Ò  %  57  K3                 !         
+ Home~LT~Titelþ¯š  Ò  %  57  K3          {     xV4B1 f  Z»» ÿÿ    ÿ     EditEngineItemPool è      á   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  Ì     !   @  (     d   d üd x X  <(ž       @  H       X  
+(Ÿ   G   @  ›       €        
+             StarBats       !r-     X  @'    !   @  È       d   d   d    X      ;   [   ®   
+   P   ê     Click to move the slide
+ Home~LT~Titelþ¯   ž<(  Ÿ
+(   @'                     DrOb    SVDr &   ±  27  eE  Ãc                 #          Home~LT~Notizenþ¯£  ±  27  eE  Ãc          „     xV4B1 o  Z»» ÿÿ    ÿ     EditEngineItemPool è      Ø   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  Ã	     !   @  	     d   d üd x X  <(ž       @  ?	       X  
+(Ÿ   G   @  ’	       €        
+             StarBats  X   !"-     X  @'    !   @  ¿	       d   d ¨ýd X X      ;   [   ®   
+   P   á	     Click to edit the notes format Home~LT~Notizenþ¯   ž<(  Ÿ
+(   @'                    DrXX      gg                   V                  Home~LT~Gliederung                            ÿ     DrPg å        c   JoeM   t  R  Ð  Ð  Ð  Ð    DrML 8    DrMD ,     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrXX      Handoutsgg                   F                  Home~LT~Gliederung                ÿ    DrPg K¿       Ѿ  JoeM   y¨  =m                    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb ß   SVDr &   4A  ]  VI  9	                              Standard ‰   4A  ]  VI  9	          j      xV4B1 U   Z    FTP logs Standard   ž<(  Ÿ
+(  @'   ¦    §                     DrOb º  SVDr &   £,  b  t6  ¯                              Standard d  £,  b  t6  ¯          E     xV4B1 .  Z»» ÿÿ    }     EditEngineItemPool è      ‚   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  ß     !   @  É     d   d üd x X  <(ž       @  é       X  
+(Ÿ   G   @  <       €        
+             StarBats       !"-     X  @'    !   @  i       d   d   d    X  +'£      @  ‰      X  '¦    "   @  ·        	 Helvetica  X  '§      @  Û     §d 
+ X      ;   [   ®   Û   û   )  
+   P   	     Project  Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §      WWW Logs Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §                       DrOb ê   SVDr &   º<  O  âM  	                              Standard ”   º<  O  âM  	          u      xV4B1 `   Z    stats_ftp_downloads Standard   ž<(  Ÿ
+(  @'   ¦    §                     DrOb ð  SVDr &   å=  X  ®L  0                              Standard ý  Y;  E	  €ÿÿ€ÿÿ        Þ     xV4B1 É  Z»» ÿÿ    Y     EditEngineItemPool è      &   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  c     !   @  m     d   d üd x X  <(ž       @         X  
+(Ÿ   G   @  à       €        
+             StarBats       !"-     X  @'    !   @  
+       d   d   d    X  '¦    "   @  ;        	 helvetica  X  '§      @  _     §d 
+ X      ;   [   ®   Û   	  
+   P   ‰     stats_ftp_logparse.pl Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       EE  9	  NE  O    DrCn $                          DrCn $                            ;                                           xi  (#    ÿÿ DrOb K  SVDr &   e•  =-  Ú¡  Š3                              Standard õ  e•  =-  Ú¡  Š3          Ö     xV4B1 Á  Z»» ÿÿ    Y     EditEngineItemPool è         Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  S     !   @  ]     d   d üd x X  <(ž       @  }       X  
+(Ÿ   G   @  Ð       €        
+             StarBats       !"-     X  @'    !   @  ý       d   d   d    X  '¦    "   @  +        	 Helvetica  X  '§      @  O     §d 
+ X      ;   [   ®   Û   	  
+   P   y    
+ stats_project Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                  DrOb H  SVDr &   œ—  œ  m¡  é                              Standard ò  œ—  œ  m¡  é          Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      a   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ž     !   @  ¨     d   d üd x X  <(ž       @  È       X  
+(Ÿ   G   @         €        
+             StarBats       !"-     X  @'    !   @  H       d   d   d    X  '¦    "   @  v        	 Helvetica  X  '§      @  š     §d 
+ X      ;   [   ®   Û   	  
+   P   Ä    
+ stats_site Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+                  DrOb V  SVDr &   ZX  hM  _h  ìP                              Standard    ZX  hM  _h  ìP          á     xV4B1 Ì  Z»» ÿÿ    Y     EditEngineItemPool è      ©   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  æ     !   @  ð     d   d üd x X  <(ž       @         X  
+(Ÿ   G   @  c       €        
+             StarBats       !"-     X  @'    !   @         d   d   d    X  '¦    "   @  ¾        	 Helvetica  X  '§      @  â     `d 
+ X      ;   [   ®   Û   	  
+   P        stats_site_last_30 Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                      DrOb U  SVDr &   ZX  YV  _h  ÝY                              Standard ÿ  ZX  YV  _h  ÝY          à     xV4B1 Ë  Z»» ÿÿ    Y     EditEngineItemPool è      ÿ    Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  <"     !   @  F!     d   d üd x X  <(ž       @  f!       X  
+(Ÿ   G   @  ¹!       €        
+             StarBats       !"-     X  @'    !   @  æ!       d   d   d    X  '¦    "   @  "        	 Helvetica  X  '§      @  8"     `d 
+ X      ;   [   ®   Û   	  
+   P   b"     stats_site_months Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb Y  SVDr &   $8  C  )H  †F                              Standard   $8  C  )H  †F          ä     xV4B1 Ï  Z»» ÿÿ    Y     EditEngineItemPool è      T$   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ‘%     !   @  ›$     d   d üd x X  <(ž       @  »$       X  
+(Ÿ   G   @  %       €        
+             StarBats       !"-     X  @'    !   @  ;%       d   d   d    X  '¦    "   @  i%        	 Helvetica  X  '§      @  %     `d 
+ X      ;   [   ®   Û   	  
+   P   ·%     stats_project_last_30 Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                      DrOb ç  SVDr &   E?  ©2  €œ  ãC                              Standard ô  ‘  Ê2  €ÿÿ€ÿÿ        Õ     xV4B1 À  Z»» ÿÿ    Y     EditEngineItemPool è      ­'   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ê(     !   @  ô'     d   d üd x X  <(ž       @  (       X  
+(Ÿ   G   @  g(       €        
+             StarBats       !"-     X  @'    !   @  ”(       d   d   d    X  '¦    "   @  Â(        	 helvetica  X  '§      @  æ(     §d 
+ X      ;   [   ®   Û   	  
+   P   )     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  ¦'  §'                 ¡       Ÿ›  Š3  &@  C    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb X  SVDr &   $8  L  )H  œO                              Standard   $8  L  )H  œO          ã     xV4B1 Î  Z»» ÿÿ    Y     EditEngineItemPool è      ”+   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Ñ,     !   @  Û+     d   d üd x X  <(ž       @  û+       X  
+(Ÿ   G   @  N,       €        
+             StarBats       !"-     X  @'    !   @  {,       d   d   d    X  '¦    "   @  ©,        	 Helvetica  X  '§      @  Í,     `d 
+ X      ;   [   ®   Û   	  
+   P   ÷,     stats_project_months Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb   SVDr &   E?  ©2  €œ  ùL                              Standard    ï  07  €ÿÿ€ÿÿ          ¡       Ÿ›  Š3  &@  L    DrCn $                         DrCn $   
+                         ;                                           xi  (#    ÿÿ DrOb ,  SVDr &   Hr  9  |  †                              Standard Ö   Hr  9  |  †          ·      xV4B1     Z    Logo  Standard   ž<(  Ÿ
+(  @'  £+'  ¦    §     showings Standard   ž<(  Ÿ
+(  @'  £+'  ¦    §                       DrOb 3  SVDr &     9  íˆ  †                              Standard Ý     9  íˆ  †          ¾      xV4B1 §   Z   
+ Group .net Standard   ž<(  Ÿ
+(  @'  £+'  ¦   
+ §   
+ 
+ Page Views Standard   ž<(  Ÿ
+(  @'  £+'  ¦   
+ §   
+                    DrOb 3  SVDr &   Ћ  9  ¡•  †                              Standard Ý   Ћ  9  ¡•  †          ¾      xV4B1 §   Z   
+ .net total Standard   ž<(  Ÿ
+(  @'  £+'  ¦   
+ §   
+ 
+ page views Standard   ž<(  Ÿ
+(  @'  £+'  ¦   
+ §   
+                    DrOb Y  SVDr &   
+m  á  }  K                              Standard   
+m  á  }  K          ä     xV4B1 Ï  Z»» ÿÿ    Y     EditEngineItemPool è      3   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Í4     !   @  ×3     d   d üd x X  <(ž       @  ÷3       X  
+(Ÿ   G   @  J4       €        
+             StarBats       !"-     X  @'    !   @  w4       d   d   d    X  '¦    "   @  ¥4        	 Helvetica  X  '§      @  É4     `d 
+ X      ;   [   ®   Û   	  
+   P   ó4     stats_agg_logo_by_day Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb é  SVDr &   *q  ¥
+  {                                Standard ö  h_     €ÿÿ€ÿÿ        ×     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      é6   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  &8     !   @  07     d   d üd x X  <(ž       @  P7       X  
+(Ÿ   G   @  £7       €        
+             StarBats       !"-     X  @'    !   @  Ð7       d   d   d    X  '¦    "   @  þ7        	 helvetica  X  '§      @  "8     §d 
+ X      ;   [   ®   Û   	  
+   P   L8     site_stats.php Standard    ž<(  Ÿ
+(   @'   §     ¦                  ¡       0w  †  u  á    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb [  SVDr &   çs  V  y„  ¾                              Standard   -t  V  2„  ¾          æ     xV4B1 Ñ  Z»» ÿÿ    Y     EditEngineItemPool è      Ò:   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  <     !   @  ;     d   d üd x X  <(ž       @  9;       X  
+(Ÿ   G   @  Œ;       €        
+             StarBats       !"-     X  @'    !   @  ¹;       d   d   d    X  '¦    "   @  ç;        	 Helvetica  X  '§      @  <     `d 
+ X      ;   [   ®   Û   	  
+   P   5<     stats_agg_logo_by_group Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb   SVDr &   Ov  ¥
+  }  7                              Standard    ‘p  ƒ   €ÿÿ€ÿÿ          ¡       0w  †  /|  V    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb å  SVDr &   f‰  ¥
+  R“  q                              Standard ò  y  îþÿÿ€ÿÿ€ÿÿ        Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      ??   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  |@     !   @  †?     d   d üd x X  <(ž       @  ¦?       X  
+(Ÿ   G   @  ù?       €        
+             StarBats       !"-     X  @'    !   @  &@       d   d   d    X  '¦    "   @  T@        	 helvetica  X  '§      @  x@     §d 
+ X      ;   [   ®   Û   	  
+   P   ¢@     site_stats.php Standard    ž<(  Ÿ
+(   @'  ¦'  §'                 ¡       ¸  †  ÿ‹      DrCn $                         DrCn $   3                         ;                                           xi  (#    ÿÿ DrOb [  SVDr &   â{    ÖŒ  t                              Standard   â{    ÖŒ  t          æ     xV4B1 Ñ  Z»» ÿÿ    Y     EditEngineItemPool è      $C   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  aD     !   @  kC     d   d üd x X  <(ž       @  ‹C       X  
+(Ÿ   G   @  ÞC       €        
+             StarBats       !"-     X  @'    !   @  D       d   d   d    X  '¦    "   @  9D        	 Helvetica  X  '§      @  ]D     `d 
+ X      ;   [   ®   Û   	  
+   P   ‡D     stats_agg_site_by_group Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb é  SVDr &   :  ¥
+  &‰  ÷                              Standard ö  ?|  £ÿÿÿ€ÿÿ€ÿÿ        ×     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      F   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¼G     !   @  ÆF     d   d üd x X  <(ž       @  æF       X  
+(Ÿ   G   @  9G       €        
+             StarBats       !"-     X  @'    !   @  fG       d   d   d    X  '¦    "   @  ”G        	 helvetica  X  '§      @  ¸G     §d 
+ X      ;   [   ®   Û   	  
+   P   âG     site_stats.php Standard    ž<(  Ÿ
+(   @'   §     ¦                  ¡       „  †  \„      DrCn $   
+                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb €   SVDr &   jp  )  —  Î                    '          Object without fill    jp  )  —  Î               DrOb ß   SVDr &   {  ~  T‡  {                              Standard ‰   {  ~  T‡  {          j      xV4B1 U   Z    activity_log Standard   ž<(  Ÿ
+(  @'  ¦' §'                    DrOb à   SVDr &   ÎQ  K  ª[  '	                              Standard Š   ÎQ  K  ª[  '	          k      xV4B1 V   Z   	 HTTP logs Standard   ž<(  Ÿ
+(  @'   ¦   	 §   	                  DrOb ë   SVDr &   O  =  ©a  ÷                              Standard •   O  =  ©a  ÷          v      xV4B1 a   Z    stats_http_downloads Standard   ž<(  Ÿ
+(  @'   ¦    §                     DrOb ñ  SVDr &   µO  F  b_                                Standard þ  ­M  3	  €ÿÿ€ÿÿ        ß     xV4B1 Ê  Z»» ÿÿ    Y     EditEngineItemPool è      ’M   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ÏN     !   @  ÙM     d   d üd x X  <(ž       @  ùM       X  
+(Ÿ   G   @  LN       €        
+             StarBats       !"-     X  @'    !   @  yN       d   d   d    X  '¦    "   @  §N        	 helvetica  X  '§      @  ËN     §d 
+ X      ;   [   ®   Û   	  
+   P   õN     stats_http_logparse.pl Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       ¼V  '	  [X  =    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb   SVDr &   Ú]  X3  §j  ˜9                              Standard    äÿÿ}%  €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      ƒQ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  àR     !   @  ÊQ     d   d üd x X  <(ž       @  êQ       X  
+(Ÿ   G   @  =R       €        
+             StarBats       !"-     X  @'    !   @  jR       d   d   d    X  +'£      @  ŠR      X  '¦    "   @  ¸R        	 helvetica  X  '§      @  ÜR     §d 
+ X      ;   [   ®   Û   û   )  
+   P   
+S     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       8d  94  Id  ·8    DrCn $   !                      DrCn $                             ;                                           xi  (#    ÿÿ DrOb €   SVDr &   º>  2  ^  J                    '          Object without fill    º>  2  ^  J               DrOb €   SVDr &   	<  }  ¹c  G                    '          Object without fill    	<  }  ¹c  G               DrOb ç   SVDr &   .F  –  ‘U  “                              Standard ‘   .F  –  ‘U  “          r      xV4B1 ]   Z    Download server logs Standard   ž<(  Ÿ
+(  @'  ¦' §'                    DrOb   SVDr &   ãN  ¡"  e  `2                              Standard   Þ÷ÿÿá)  €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      {W   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  ØX     !   @  ÂW     d   d üd x X  <(ž       @  âW       X  
+(Ÿ   G   @  5X       €        
+             StarBats       !"-     X  @'    !   @  bX       d   d   d    X  +'£      @  ‚X      X  '¦    "   @  °X        	 helvetica  X  '§      @  ÔX     §d 
+ X      ;   [   ®   Û   û   )  
+   P   Y     Db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       ÄO  ‚#  8d  1    DrCn $   '                      DrCn $   !                         ;                                           xi  (#    ÿÿ DrOb X  SVDr &   pY  ·8  "o  q;                              Standard   pY  ·8  "o  q;          ã     xV4B1 Î  Z»» ÿÿ    Y     EditEngineItemPool è      Œ[   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  É\     !   @  Ó[     d   d üd x X  <(ž       @  ó[       X  
+(Ÿ   G   @  F\       €        
+             StarBats       !"-     X  @'    !   @  s\       d   d   d    X  '¦    "   @  ¡\        	 Helvetica  X  '§      @  Å\     §d 
+ X      ;   [   ®   Û   	  
+   P   ï\     frs_dlstats_grouptotal_agg Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb W  SVDr &   ëZ  1  †m  94                              Standard   ëZ  1  †m  94          â     xV4B1 Í  Z»» ÿÿ    Y     EditEngineItemPool è      ä^   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  !`     !   @  +_     d   d üd x X  <(ž       @  K_       X  
+(Ÿ   G   @  ž_       €        
+             StarBats       !"-     X  @'    !   @  Ë_       d   d   d    X  '¦    "   @  ù_        	 Helvetica  X  '§      @  `     §d 
+ X      ;   [   ®   Û   	  
+   P   G`     frs_dlstats_filetotal_agg Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb ì   SVDr &   ô    Ÿ%  î                              Standard –   ô    Ÿ%  î          w      xV4B1 b   Z    CVSROOT/history files Standard   ž<(  Ÿ
+(  @'   ¦    §                     DrOb é   SVDr &   ¿  ‘  ¢"  m                              Standard “   ¿  ‘  ¢"  m          t      xV4B1 _   Z    CVS "traffic" logs Standard   ž<(  Ÿ
+(  @'   ¦    §                     DrOb ï  SVDr &     
+  n"  r
+                              Standard ü  ëþÿÿŸ  €ÿÿ€ÿÿ        Ý     xV4B1 È  Z»» ÿÿ    Y     EditEngineItemPool è      d   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Me     !   @  Wd     d   d üd x X  <(ž       @  wd       X  
+(Ÿ   G   @  Êd       €        
+             StarBats       !"-     X  @'    !   @  ÷d       d   d   d    X  '¦    "   @  %e        	 helvetica  X  '§      @  Ie     §d 
+ X      ;   [   ®   Û   	  
+   P   se     cvs_history_parse.pl Standard    ž<(  Ÿ
+(   @'   ¦     §                  ¡       I  î  0  ‘    DrCn $   "                      DrCn $   #                         ;                                           xi  (#    ÿÿ DrOb   SVDr &   OK  f  VT  M                              Standard *  …
+  v-  €ÿÿ€ÿÿ             xV4B1 ö  Z»» ÿÿ    }     EditEngineItemPool è      ÿg   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  \i     !   @  Fh     d   d üd x X  <(ž       @  fh       X  
+(Ÿ   G   @  ¹h       €        
+             StarBats       !"-     X  @'    !   @  æh       d   d   d    X  +'£      @  i      X  '¦    "   @  4i        	 helvetica  X  '§      @  Xi     §d 
+ X      ;   [   ®   Û   û   )  
+   P   †i     stats_sum.pl Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'   §     ¦                  ¡       áO  G  ÄO  l    DrCn $                         DrCn $   '                         ;                                           xi  (#    ÿÿ DrOb ¦  SVDr &   E  Ý*  ¶Z  0                              Standard P  E  Ý*  ¶Z  0          1     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      l   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Ym     !   @  cl     d   d üd x X  <(ž       @  ƒl       X  
+(Ÿ   G   @  Öl       €        
+             StarBats       !"-     X  @'    !   @  m       d   d   d    X  '¦    "   @  1m        	 Helvetica  X  '§      @  Um     §d 
+ X      ;   [   ®   Û   	  
+   P   m     frs_dlstats_group_agg Standard    ž<(  Ÿ
+(   @'   ¦     §      daily dl's by group/day Standard    ž<(  Ÿ
+(   @'   ¦     §                       DrOb ¤  SVDr &   ëD  l  Z  ‚#                              Standard N  ëD  l  Z  ‚#          /     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      Âo   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ÿp     !   @  	p     d   d üd x X  <(ž       @  )p       X  
+(Ÿ   G   @  |p       €        
+             StarBats       !"-     X  @'    !   @  ©p       d   d   d    X  '¦    "   @  ×p        	 Helvetica  X  '§      @  ûp     §d 
+ X      ;   [   ®   Û   	  
+   P   %q     frs_dlstats_file_agg Standard    ž<(  Ÿ
+(   @'   ¦     §      daily dl's by file/day Standard    ž<(  Ÿ
+(   @'   ¦     §                       DrOb   SVDr &   jI  ¡"  7V  ¾+                              Standard   è  O/  €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      fs   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  Ãt     !   @  ­s     d   d üd x X  <(ž       @  Ís       X  
+(Ÿ   G   @   t       €        
+             StarBats       !"-     X  @'    !   @  Mt       d   d   d    X  +'£      @  mt      X  '¦    "   @  ›t        	 helvetica  X  '§      @  ¿t     §d 
+ X      ;   [   ®   Û   û   )  
+   P   ít     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       ÄO  ‚#  ÝO  Ý*    DrCn $   '                      DrCn $   &                         ;                                           xi  (#    ÿÿ DrOb I  SVDr &   Ï—    #¤  f                              Standard ó  Ï—    #¤  f          Ô     xV4B1 ¿  Z»» ÿÿ    Y     EditEngineItemPool è      ww   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ´x     !   @  ¾w     d   d üd x X  <(ž       @  Þw       X  
+(Ÿ   G   @  1x       €        
+             StarBats       !"-     X  @'    !   @  ^x       d   d   d    X  '¦    "   @  Œx        	 Helvetica  X  '§      @  °x     §d 
+ X      ;   [   ®   Û   	  
+   P   Úx     Misc tables Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb é  SVDr &   I˜  …
+  5¢  }                              Standard ö  êöÿÿmx  €ÿÿ€ÿÿ        ×     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      Àz   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ý{     !   @  {     d   d üd x X  <(ž       @  '{       X  
+(Ÿ   G   @  z{       €        
+             StarBats       !"-     X  @'    !   @  §{       d   d   d    X  '¦    "   @  Õ{        	 helvetica  X  '§      @  ù{     §d 
+ X      ;   [   ®   Û   	  
+   P   #|     site_stats.php Standard    ž<(  Ÿ
+(   @'   §     ¦                  ¡       ù  f  „œ  œ    DrCn $   )                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb U  SVDr &   $8  iT  )H  íW                              Standard ÿ  $8  iT  )H  íW          à     xV4B1 Ë  Z»» ÿÿ    Y     EditEngineItemPool è      ©~   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  æ     !   @  ð~     d   d üd x X  <(ž       @         X  
+(Ÿ   G   @  c       €        
+             StarBats       !"-     X  @'    !   @         d   d   d    X  '¦    "   @  ¾        	 Helvetica  X  '§      @  â     `d 
+ X      ;   [   ®   Û   	  
+   P   €     stats_project_all Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb   SVDr &   À9  »N  F  JU                              Standard   æ  ¥9  €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      þ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  [ƒ     !   @  E‚     d   d üd x X  <(ž       @  e‚       X  
+(Ÿ   G   @  ¸‚       €        
+             StarBats       !"-     X  @'    !   @  å‚       d   d   d    X  +'£      @  ƒ      X  '¦    "   @  3ƒ        	 helvetica  X  '§      @  Wƒ     §d 
+ X      ;   [   ®   Û   û   )  
+   P   …ƒ     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       &@  œO  &@  iT    DrCn $   
+                      DrCn $   +                         ;                                           xi  (#    ÿÿ DrOb   SVDr &   E?  ¥E  =a  IN                              Standard           €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      †   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  l‡     !   @  V†     d   d üd x X  <(ž       @  v†       X  
+(Ÿ   G   @  Ɇ       €        
+             StarBats       !"-     X  @'    !   @  ö†       d   d   d    X  +'£      @  ‡      X  '¦    "   @  D‡        	 helvetica  X  '§      @  h‡     §d 
+ X      ;   [   ®   Û   û   )  
+   P   –‡     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       &@  †F  \`  hM    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb   SVDr &   E?  »N  =a  :W                              Standard       $úÿÿ€ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è       Š   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  }‹     !   @  gŠ     d   d üd x X  <(ž       @  ‡Š       X  
+(Ÿ   G   @  ÚŠ       €        
+             StarBats       !"-     X  @'    !   @  ‹       d   d   d    X  +'£      @  '‹      X  '¦    "   @  U‹        	 helvetica  X  '§      @  y‹     §d 
+ X      ;   [   ®   Û   û   )  
+   P   §‹     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       &@  œO  \`  YV    DrCn $   
+                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb R  SVDr &   ZX  ö]  _h  za                              Standard ü  ZX  ö]  _h  za          Ý     xV4B1 È  Z»» ÿÿ    Y     EditEngineItemPool è      1Ž   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  n     !   @  xŽ     d   d üd x X  <(ž       @  ˜Ž       X  
+(Ÿ   G   @  ëŽ       €        
+             StarBats       !"-     X  @'    !   @         d   d   d    X  '¦    "   @  F        	 Helvetica  X  '§      @  j     `d 
+ X      ;   [   ®   Û   	  
+   P   ”     stats_site_all Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb   SVDr &   öY  üX  Ãf  ×^                              Standard   8  B  €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      ƒ‘   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  à’     !   @  Ê‘     d   d üd x X  <(ž       @  ê‘       X  
+(Ÿ   G   @  =’       €        
+             StarBats       !"-     X  @'    !   @  j’       d   d   d    X  +'£      @  Š’      X  '¦    "   @  ¸’        	 helvetica  X  '§      @  Ü’     §d 
+ X      ;   [   ®   Û   û   )  
+   P   
+“     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       \`  ÝY  \`  ö]    DrCn $                         DrCn $   /                         ;                                           xi  (#    ÿÿ DrOb ]  SVDr &   Oq  µM  Ò†  9Q                              Standard   Oq  µM  Ò†  9Q          è     xV4B1 Ó  Z»» ÿÿ    Y     EditEngineItemPool è      ”•   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Ñ–     !   @  Û•     d   d üd x X  <(ž       @  û•       X  
+(Ÿ   G   @  N–       €        
+             StarBats       !"-     X  @'    !   @  {–       d   d   d    X  '¦    "   @  ©–        	 Helvetica  X  '§      @  Í–     `d 
+ X      ;   [   ®   Û   	  
+   P   ÷–     stats_site_pages_by_month Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb   SVDr &   /{  3  àŒ  –N                              Standard   á   â   €ÿÿ€ÿÿ        ÿ     xV4B1 ê  Z»» ÿÿ    }     EditEngineItemPool è      ñ˜   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  Nš     !   @  8™     d   d üd x X  <(ž       @  X™       X  
+(Ÿ   G   @  «™       €        
+             StarBats       !"-     X  @'    !   @  Ø™       d   d   d    X  +'£      @  ø™      X  '¦    "   @  &š        	 helvetica  X  '§      @  Jš     §d 
+ X      ;   [   ®   Û   û   )  
+   P   xš     db_stats_agg.php Standard    ž<(  Ÿ
+(   @'  £+'  ¦'  §'                 ¡       ÿ‹    |  µM    DrCn $   3                      DrCn $   1                         ;                                           xi  (#    ÿÿ DrOb [  SVDr &   >    Á–                                Standard   >    Á–            æ     xV4B1 Ñ  Z»» ÿÿ    Y     EditEngineItemPool è         Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ?ž     !   @  I     d   d üd x X  <(ž       @  i       X  
+(Ÿ   G   @  ¼       €        
+             StarBats       !"-     X  @'    !   @  é       d   d   d    X  '¦    "   @  ýÿÿÿ‚   ƒ   „   …   †   ‡   ˆ   ‰   Š   ‹   Œ      Ž         ‘   ’   “   ”   •   –   —   ˜   ™   š   þÿÿÿœ      þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž        	 Helvetica  X  '§      @  ;ž     `d 
+ X      ;   [   ®   Û   	  
+   P   ež     stats_site_pages_by_day Standard    ž<(  Ÿ
+(   @'  §'   ¦     §                     DrOb   SVDr &   {_  3  àŒ  IN                              Standard            €ÿÿ€ÿÿ          ¡       ÿ‹    \`  hM    DrCn $   3                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb   SVDr &   {_  XP  ñ|  :W                              Standard            €ÿÿ€ÿÿ          ¡       |  9Q  \`  YV    DrCn $   1                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb   SVDr &   Â&  J  q<  —                              Standard   Â&  J  q<  —          £     xV4B1 Š  Z»» ÿÿ    }     EditEngineItemPool è      ¢   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  Þ£     !   @  È¢     d   d üd x X  <(ž       @  è¢       X  
+(Ÿ   G   @  ;£       €        
+             StarBats       !"-     X  @'    !   @  h£       d   d   d    X  +'£      @  ˆ£      X  '¦    "   @  ¶£        	 Helvetica  X  '§      @  Ú£     §d 
+ X      ;   [   ®   Û   û   )  
+   P   ¤     stats_subd_pages Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §      subdomain pages  Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §      by group/day Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §                         DrOb õ  SVDr &   K(  Î  Ù:  +                              Standard   :ýÿÿ  €ÿÿ€ÿÿ        ã     xV4B1 Î  Z»» ÿÿ    Y     EditEngineItemPool è      ™¦   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Ö§     !   @  ঠ    d   d üd x X  <(ž       @   §       X  
+(Ÿ   G   @  S§       €        
+             StarBats       !"-     X  @'    !   @  €§       d   d   d    X  '¦    "   @  ®§        	 helvetica  X  '§      @  Ò§     §d 
+ X      ;   [   ®   Û   	  
+   P   ü§     stats_projects_logparse.pl Standard    ž<(  Ÿ
+(   @'   §     ¦                  ¡       ‹1  ¯  ™1  J    DrCn $                         DrCn $   6                         ;                                           xi  (#    ÿÿ DrOb   SVDr &   s    "&  Ü                              Standard Å  s    "&  Ü          ¦     xV4B1   Z»» ÿÿ    }     EditEngineItemPool è      Žª   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  ë«     !   @  Õª     d   d üd x X  <(ž       @  õª       X  
+(Ÿ   G   @  H«       €        
+             StarBats       !"-     X  @'    !   @  u«       d   d   d    X  +'£      @  •«      X  '¦    "   @  ë        	 Helvetica  X  '§      @  ç«     §d 
+ X      ;   [   ®   Û   û   )  
+   P   ¬     Stats_cvs_group Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §      cvs commits/adds/cos Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §      by group/day Standard    ž<(  Ÿ
+(   @'  £+'   ¦     §                         DrOb ò  SVDr &   ô  Œ  †#  p                              Standard ÿ  þóÿÿÉ5  €ÿÿ€ÿÿ        à     xV4B1 Ë  Z»» ÿÿ    Y     EditEngineItemPool è      ©®   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  æ¯     !   @  ð®     d   d üd x X  <(ž       @  ¯       X  
+(Ÿ   G   @  c¯       €        
+             StarBats       !"-     X  @'    !   @  ¯       d   d   d    X  '¦    "   @  ¾¯        	 helvetica  X  '§      @  ⯠    §d 
+ X      ;   [   ®   Û   	  
+   P   °     db_stats_cvs_history.pl Standard    ž<(  Ÿ
+(   @'   §     ¦                  ¡       0  m  J      DrCn $   #                      DrCn $   8                         ;                                           xi  (#    ÿÿ DrOb V  SVDr &   %]  6  Ôr  «                              Standard    %]  6  Ôr  «          á     xV4B1 Ì  Z»» ÿÿ    Y     EditEngineItemPool è      ›²   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  س     !   @  â²     d   d üd x X  <(ž       @  ³       X  
+(Ÿ   G   @  U³       €        
+             StarBats       !"-     X  @'    !   @  ‚³       d   d   d    X  '¦    "   @  °³        	 Helvetica  X  '§      @  Ô³     §d 
+ X      ;   [   ®   Û   	  
+   P   þ³     stats_project_developers Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrOb “  SVDr &   N    ;  
+                              Standard =  N    ;  
+               xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      ñµ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  .·     !   @  8¶     d   d üd x X  <(ž       @  X¶       X  
+(Ÿ   G   @  «¶       €        
+             StarBats       !"-     X  @'    !   @  ض       d   d   d    X  '¦    "   @  ·        	 helvetica  X  '§      @  *·     §d 
+ X      ;   [   ®   Û   	  
+   P   T·    
+ Tables which  Standard    ž<(  Ÿ
+(   @'   ¦    
+ §    
+  must be kept Standard    ž<(  Ÿ
+(   @'   ¦     §                       DrOb û  SVDr &   O  à  <  b                              Standard ¥  O  à  <  b          †     xV4B1 o  Z»» ÿÿ    ¦     EditEngineItemPool è      „¹   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   Ž  0  »     !   @  ˹     d   d üd x X  <(ž       @  ë¹       X  
+(Ÿ   G   @  >º       €        
+             StarBats       !"-     X  @'    !   @  kº       d   d   d    X  1'¢       @  º     d    X  +'£      @  °º      X  '¦    "   @  Þº        	 helvetica  X  '§      @  »     §d 
+ X      ;   [   ®   Û         N  
+   P   4»    
+ Tables which  Standard    ž<(  Ÿ
+(   @'  ¢1'  £+'   ¦    
+ §    
+  are regenerated Standard    ž<(  Ÿ
+(   @'  ¢1'  £+'   ¦     §                       DrOb å  SVDr &   }c  e  im                                Standard ò  øk     €ÿÿ€ÿÿ        Ó     xV4B1 ¾  Z»» ÿÿ    Y     EditEngineItemPool è      ½   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  ¼¾     !   @  ƽ     d   d üd x X  <(ž       @  æ½       X  
+(Ÿ   G   @  9¾       €        
+             StarBats       !"-     X  @'    !   @  f¾       d   d   d    X  '¦    "   @  ”¾        	 helvetica  X  '§      @  ¸¾     §d 
+ X      ;   [   ®   Û   	  
+   P   â¾     site_stats.php Standard    ž<(  Ÿ
+(   @'  ¦'  §'                 ¡       éh  F	  üg  6    DrCn $   >                      DrCn $   :                         ;                                           xi  (#    ÿÿ DrOb r  SVDr &   d  ù  Òm  F	                              Standard   d  ù  Òm  F	          ý     xV4B1 è  Z»» ÿÿ    }     EditEngineItemPool è      dÁ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   e  0  Á     !   @  «Á     d   d üd x X  <(ž       @  ËÁ       X  
+(Ÿ   G   @  Â       €        
+             StarBats       !"-     X  @'    !   @  K       d   d   d    X  +'£      @  k      X  '¦    "   @  ™Â        	 Helvetica  X  '§      @  ½Â     §d 
+ X      ;   [   ®   Û   û   )  
+   P   ë    
+ user_group Standard    ž<(  Ÿ
+(   @'  £+'   ¦    
+ §    
+                 DrOb é  SVDr &   Ö—  …
+  ¡  .                              Standard ö  %ûÿÿNy  €ÿÿ€ÿÿ        ×     xV4B1   Z»» ÿÿ    Y     EditEngineItemPool è      ÖÄ   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  Æ     !   @  Å     d   d üd x X  <(ž       @  =Å       X  
+(Ÿ   G   @  Å       €        
+             StarBats       !"-     X  @'    !   @  ½Å       d   d   d    X  '¦    "   @  ëÅ        	 helvetica  X  '§      @  Æ     §d 
+ X      ;   [   ®   Û   	  
+   P   9Æ     site_stats.php Standard    ž<(  Ÿ
+(   @'   §     ¦                  ¡       ù  f  Ÿ›  =-    DrCn $   )                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb R  SVDr &   s‡  Ñ!  }š  (                              Standard ü  s‡  Ñ!  }š  (          Ý     xV4B1 È  Z»» ÿÿ    Y     EditEngineItemPool è      ¿È   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   A  0  üÉ     !   @  É     d   d üd x X  <(ž       @  &É       X  
+(Ÿ   G   @  yÉ       €        
+             StarBats       !"-     X  @'    !   @  ¦É       d   d   d    X  '¦    "   @  ÔÉ        	 Helvetica  X  '§      @  øÉ     §d 
+ X      ;   [   ®   Û   	  
+   P   "Ê     stats_project_metric Standard    ž<(  Ÿ
+(   @'   ¦     §                     DrXX      gg                   F                  Home~LT~Gliederung                 ÿ    DrPg        “  JoeM   R  t  Ð  Ð  Ð  Ð    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb <   SVDr &   Ò  %  57  K3                      DrOb ô  SVDr &   ±  27  eE  Äc                   #          Home~LT~Notizenþ¯—  ±  27  eE  Äc          x     xV4B1 c  Z»» ÿÿ    ÿ     EditEngineItemPool è      1Í   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ š¶š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ÂÃÄÅ    6   f   œ   ç   0  Î     !   @  xÍ     d   d üd x X  <(ž       @  ˜Í       X  
+(Ÿ   G   @  ëÍ       €        
+             StarBats  X   !"-     X  @'    !   @  Î       d   d ¨ýd X X      ;   [   ®   
+   P   :Î     Click to add notes Home~LT~Notizenþ¯   ž<(  Ÿ
+(   @'                    DrXX      gg                   V                  Home~LT~Gliederung                            ÿ     DrXX    F            	     DrVw P     SVDr€  
+   SVDr  :   SVDr    è  è  ô  ô  è     è                SVDrA  Layout  :   SVDr         è  è         ô     ô        SVDr  Ü        #   SVDr                            SVDr#            SVDr0     SVDr1    SVDr3    SVDr4    SVDr@ SVDr     SVDrD     SVDrP    SVDrQ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrHL      DrHL      DrHL       |&  ýùÿÿ‡«  iG                                                
+                                                                                                                                                                R o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ    ‰.½…щР€)ä°±                       À       C o m p O b j                                                         ÿÿÿÿ                                        =        O l e                                                         
+  ÿÿÿÿÿÿÿÿÿÿÿÿ                                              p e r s i s t   e l e m e n t s                                 "        ÿÿÿÿ                                              S f x D o c u m e n t I n f o                                         ÿÿÿÿÿÿÿÿ                                       u      S f x W i n d o w s                                               ÿÿÿÿ   ÿÿÿÿ                                              S f x S t y l e S h e e t s                                       ÿÿÿÿÿÿÿÿÿÿÿÿ                                       ÞT       S u m m a r y I n f o r m a t i o n                           (     ÿÿÿÿÿÿÿÿ                                       (      S t a r D r a w D o c u m e n t 3                               $  ÿÿÿÿÿÿÿÿÿÿÿÿ                                    1   dÑ                                                                          ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/templating.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/templating.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/templating.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,170 @@
+<HTML>
+<HEAD>
+<TITLE>Templating Standards</TITLE>
+</HEAD>
+<BODY BGCOLOR="WHITE">
+
+<H3>Coding Example:</H3>
+<P>
+The following code examples demonstrate how all coding on SourceForge 
+is going to be done in the future. The first example shows the "switchbox" 
+page (taken from www/tracker/index.php) - where the various objects 
+are included, instantiated and checked for errors every step of the way.
+<P>
+Once the objects are instantiated, the template file can be included. In this 
+example, the template file is detail.php (example2).
+<P>
+<?php
+#highlight_string($string);
+
+$example ='<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id: templating.php,v 1.2 2001/03/06 16:04:31 tperdue Exp $
+
+
+//
+//	Include core objects
+//
+require(\'pre.php\');
+require_once(\'common/tracker/Artifact.class\');
+require_once(\'common/tracker/ArtifactFile.class\');
+
+//
+//	Verify proper params passed in
+//
+if ($group_id && $atid) {
+
+	//
+	//	  get the Group object
+	//
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group) || $group->isError()) {
+		exit_no_group();
+	}
+
+	//
+	//	  Create the ArtifactType object
+	//
+	$ath = new ArtifactTypeHtml($group,$atid);
+	if (!$ath || !is_object($ath)) {
+		exit_error(\'Error\',\'ArtifactType could not be created\');
+	}
+	if ($ath->isError()) {
+		exit_error(\'Error\',$ath->getErrorMessage());
+	}
+
+	//
+	//	Fusebox-like architecture
+	//
+	switch ($func) {
+
+		case \'detail\' : {
+			//
+			//	  users can modify their own tickets if they submitted them
+			//	  even if they are not artifact admins
+			//
+			$ah=new ArtifactHtml($ath,$aid);
+			if (!$ah || !is_object($ah)) {
+				exit_error(\'ERROR\',\'Artifact Could Not Be Created\');
+			} else if ($ah->isError()) {
+				exit_error(\'ERROR\',$ah->getErrorMessage());
+			} else {
+				//
+				//	Include the template file
+				//
+				include \'../tracker/detail.php\';
+			}
+			break;
+		}
+		default : {
+				//foo
+		}
+
+	}
+
+} else {
+	exit_missing_params();
+}
+
+?>';
+
+$example2='<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id: templating.php,v 1.2 2001/03/06 16:04:31 tperdue Exp $
+
+echo $ath->header(array (\'title\'=>\'Detail: \'.$ah->getID(). \' \'.$ah->getSummary()));
+
+?>
+	<H2>[ #<?php echo $ah->getID(); ?> ] <?php echo $ah->getSummary(); ?></H2>
+
+	<TABLE CELLPADDING="0" WIDTH="100%">
+			<FORM ACTION="<?php echo $PHP_SELF; ?>?group_id=<?php echo $group_id; ?>&atid=<?php echo $ath->getID(); ?>" METHOD="POST">
+			<INPUT TYPE="HIDDEN" NAME="func" VALUE="monitor">
+			<INPUT TYPE="HIDDEN" NAME="artifact_id" VALUE="<?php echo $ah->getID(); ?>">
+		<TR>
+			<TD COLSPAN=2">
+			<?php
+			if (!user_isloggedin()) {
+				?>
+				<B>Email:</B> &nbsp;
+				<INPUT TYPE="TEXT" NAME="user_email" SIZE="20" MAXLENGTH="40">
+				<?php
+			}
+			?>
+			<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Monitor">
+			</FORM>
+			</TD>
+		</TR>
+		<TR>
+			<TD><B>Date:</B><BR><?php echo date( $sys_datefmt, $ah->getOpenDate() ); ?></TD>
+			<TD><B>Priority:</B><BR><?php echo $ah->getPriority(); ?></TD>
+		</TR>
+
+		<TR>
+			<TD><B>Submitted By:</B><BR><?php echo $ah->getSubmittedRealName(); ?> (<?php echo $ah->getSubmittedUnixName(); ?>)</TD>
+			<TD><B>Assigned To:</B><BR><?php echo $ah->getAssignedRealName(); ?> (<?php echo $ah->getAssignedUnixName(); ?>)</TD>
+		</TR>
+
+		<TR>
+			<TD><B>Category:</B><BR><?php echo $ah->getCategoryName(); ?></TD>
+			<TD><B>Status:</B><BR><?php echo $ah->getStatusName(); ?></TD>
+		</TR>
+
+	<TR><TD COLSPAN="2">
+		<P>
+		<H3>DO NOT enter passwords or confidential information in your message!</H3>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="SUBMIT">
+		</FORM>
+	</TD></TR>
+
+	</TABLE>
+	</FORM>
+<?php
+
+$ath->footer(array());
+
+?>';
+
+echo '<H4>Switchbox page:</H4><P>';
+
+echo highlight_string($example);
+
+
+echo '<H4>Template page (detail.php):</H4><P>';
+
+echo highlight_string($example2);
+
+?>
+
+
+</BODY>
+</HTML>

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first0.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first0.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first0.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,4 @@
+GIF89a    ð    ÿ ÿÿ!ù    ,        ‡$$$(((LLLBYYPPP]]]eeebuuvvvzzzo¥¥v©©xªª”””ŸŸŸ…££‹¨¨¹¹™¿¿¦¦¦µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÃÙÙÊääÒèèÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ÿ AHІ0XÐ@ÂJœ8°C 2jÜH BŠ=\ @‚4h¨ð@A  :F)0 PØÀ³§O
+ @f8ðÉ”©ƒ1‹N<À@…¦X{V8“ƒDªZÈJvƒ®f
+Œ `ÀÕ²d+@P‘€€¥XdÕÛӁ A°=°÷dÓ†{r… Âҝ‡$î‰xò
+P ïIˈC3à  M)œÍSõÖ= @€/eìEÃæù € Þ¶N,Ú5oË* ` \COãÇ@ß°{ƒ  p~2õÕ	¼W¯¿Î<øÏðÑ/£ÿn›§rj3¥ @/kúö‘÷vx:5xÛ®U—  q†•k–!ØÞ  Ñcžé'Y{˜i& „y¶ {>qE …×a{ùä`±å\qÍUÐMŒÅ"S0”Zq€‘U3je#RIdS[#ÂõTTFÝ€Ne%^ÑÔØH%Õ—ÒJ-‘S8JiF…I I9‘Aü¶ s\ ‘” ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first1.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first1.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/first1.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,5 @@
+GIF89a    ð    ÿ ÿÿ!ù  " ,        ‡$$$(((666GGGLLLBYYPPP^^^Oeeeeebuuexxyyyo¥¥v©©xªª”””ššš†¤¤‹¨¨°°Œ··š¿¿   µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÍææÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÿ EH‡
+ <pPÁ Jœ8… 2jܘ€BDŠ-  @	<xÈ ¡A  x9°’
+$|Øɳ'0t Ùc=“&P @‚¡‹@A©Už8…ZqÁT
+WÃ~Р À‚) (PÕ*‚«o?HhJ¡¢ H­ —ïÎ|T«à*’JèY¶.ˆ»:gôËó0 Êr$0à€^‹+ƒNz ÀA 
+$k¤lyrÒ ˆ,z£ßÖ®{J `ံ;q»~9i |{¨½ñ2ñâ== w `yðæ“Ÿcþ áïžÄù†ž7 áì¤Âo7ß¾Û!jÕ¹?àÞûáÚÏñå¯NÚb‚ àZm˜I YD PØgÛé7à	ô^W½ÔO€	6Zl]µ Rqe at WA^! –XVi ÕYIEŠÆiõERã_MÍR^“X eW ‰DÒ'¥´RKÀ$Z4IHÁHØiôd”Erp8œ@e@ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.htm
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.htm	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.htm	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>Slide 1</title>
+</head>
+<body text=#000000 bgcolor=#FFFFFF link=#000080 vlink=#800000 alink=#000080>
+<center>
+<img src="first0.gif" border=0 alt="First page"> <img src="prev0.gif" border=0 alt="Back"> <a href="img1.htm"><img src="next1.gif" border=0 alt="Continue"></a> <a href="img2.htm"><img src="last1.gif" border=0 alt="Last page"></a> <a href="standards.htm"><img src="index.gif" border=0 alt="Overview"></a> </center><br>
+<center><img src="img0.jpg"></center>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.jpg
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.jpg	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img0.jpg	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,326 @@
+ÿØÿà JFIF      ÿÛ C 		
+
+ $.' ",#(7),01444'9=82<.342ÿÛ C			
+
+2!!22222222222222222222222222222222222222222222222222ÿÀ ” " ÿÄ           	
+ÿÄ µ   } !1AQa"q2‘¡#B±ÁRÑð$3br‚	
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ        	
+ÿÄ µ  w !1AQaq"2B‘¡±Á	#3RðbrÑ
+$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ   ? ÷ú(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¯¼ñ׈µ‰Zæ‰'‹ì|c¦æ8VòÖ9ç
+€ù”óï”®|Í@áEpþÔü]¥èz»|A†×Lß*jp²0¹„nfo.1‘´/($0rt.>"xVÓÂöž%ŸUÙ¤]Êa‚ãìòî6…Ü>ãu¾”ÔQ\߉|}á\Ao®êÑÚÏ:Ž1ÈÛAÆHE$äqœt5Åøóã5–‘á-7WðÝŽ¡5íÛÄ«<R÷™R¬EÃc!òЬQ\úøãÃMáxüJÚ¼éïÜL?0©`UU€bß#a@ÉÇ ÔzO¼/®èÚ†­¦êÑÏg§#=ÛÝZ%
+X’…Cc àÎ ÐIEpéñƒÀ2Kkñ®±å–Š@,Wç%q ýìqƒÐƒZ?Ä_ëúãèº^·ÍúïÄj®íûÛ€¯Üü¤äG4ÔQ\Å-oQðçÍ[VÒn>Ï}“å˱_né‘O<9_À<·ñÃTñ£>É,"tÔŸa;^%˾Fr¸|(8݁’(¸¢¼Ÿà׏5Ÿê>(›SŸ6°ËÙÛìOôts)Ù¹TÀU>žõÔÂÔð7öÇö_ü$Ö?hþþãäýÝßë±åôÿ k¯x ŠÃñ/Œ4ÛÁ>½©Gf“¹HFvrNA8dã#ÔWá]ø›ã.³¦ÙêÑÞxm4Ĺ³D D;¶‡Î]ÁV<‚ z¥ÉÁñ7Áw^ ‹C·ñ¤×ò¸HÖ=ͱ JÂOLnëÇ^+FñN³wñçÄ>žó~‘i§¤Ð[ùH69X	;€Ü~ûu=þ”éQE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE á~!ñ†ï|k¬h¿´+KXíœ>“{¼Áæ€3…Ý$lX‚!ó† WºQ@7ð&»¯ëöóEw7„¥¸)¥G¨ª6ø‰q #¡lÉ»~9Ý\G‡|1«ÝxóOøo~òM§øS›RœÌáâ–܈Œ`Â[ 7¦X´6G
+Ÿ¦ëð‡åðþ±ªëš¶­ý³­ê^ZIxÖ‰ØÑ@
+ª¹Æp3ƒƒµxÈÉ ó_èþø¹¨ßCâWÂú½Å¢‹‹»%/-®#ÛQ0ûœ’Ê°ÈÆ1âµ›¿ÙâÆîÿ F‚Ó:ÚÜ+ÚY%¸’‰•ftŒf '\‚~Ÿ¢€<?ãïâïøgÄþž{ÍÞîY.|›F›OúæÀVTòå~ÍŽŒMdiNšÄþ8ד[¾×[þ«»WÔÿ °ÖÊÚBnðÙi Àà 8p~‡¢€>\×`†Ù‹ÃQ£Í¬;ÊÊ lÜ.[ÔíU=€«¿Ö †×ö™ðu½¼QÃZ;$qÆ¡U%È À qŠöJ(Ïþ6ÿ É!×íßÿ J#¯4‡KÕìôÝ/ºZIŸŽ´Í=Òxe-›E}¬ùyýáxÀf9]Û±ó_EÑ@ðÛMšMgâæ—£4v3µÃÛÙ´dÄ°6ë•B6Œ¨SŽƒŒq\§öžÿ 
+_þÿ ö÷ü&_kßöìæó·oó|î™ÿ SògïcŒm澟¢€</ÆÜøGÆÿ 5ÏM%î“cd¶w2€ó¬wŠºc¸u,QÃ}ó匨ª™|Kñ—Ç2øpI§CB›ìR¼mnw¸ƒlü
+À3062CÆM}E |‘c²xJ?ßêZ¬¦ì»øz$·*ÛK‰ƒ–V?&r`§5êþÿ “¡ñgý‚£ÿ ÐmkØ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹+Ÿ‰ž´¼¸µ–þçÍ·•á&rà:1V–2#ƒÚºÚùÒïþC:Ïý…oô¦JƽWJ7G§•`#Ž¬éÉÚÊÿ Šÿ 3ÖáiøGþ¯?ðWuÿ Æê[o‰ž»¼·µŠþç͸•!Œ>r€»°Uš0I“Þ¼v¤´ÿ Îÿ a[/ý)Ž¹¡Œ”¤•·=¬OR£Fuߺ›û‘ô<sÃ3Ì‘K¼/²UV£m
+†ô;YNbz’¼¿[±Ö×Ä%º±UÊŠöòÌÛ4¨’Ü¥¥€‡*¿,¿2Ê0`pãZË_·¾Õ¡²}pÛé–—Óieg÷Ì!³xƒ1$ÏûƸ\¸8eÁÞ|‘êÓÃlç–8º g` ³0U÷,@¹ WŸêöÚä}텥ƥo¬*yÌ—7RýÚ+ü¦7´62‘È?"²Õ;Ûmvym"ÔW\¹ÔPÒÜâl­lÒ´ª…¡V	Xì&AÏ”	 L‚xn­â¸·–9 •Ç$l]HÈ Ž#œÑðÝ[Åqo,sA*ŽHØ2º‘AG9¯/ð~ g³·ÖF³7šaŠöƒvÏÆÔ1¿žîB—A3~è Œ²£’á*?‡vzýµÎòê¶öÚEØîm'Àˆ[(}Ï#„L\ï„2à.Óä‘€D›Äº
+¶¨4¹õ½6-@º ´{¤YK66„ç'#äV¥aÝA3xëI¸X¤0&™z SµY¥µ*	è	
+ÄûO¥qz]·‹ÃW)w¨ê¢þ[½8LÑÚ¼mo1¸OµÌŽûÔ)䢋}£å Ô(¯+“L×,´ëÇ´“Ä
+<vúÅÌ;îîe&x.Ù3ƒ6•”`°|=R€
+(¢€
+(¢€
+(¢€
+(¢€
+ŽyyeHdÑ,Q•äº72zr@õ"¤¬½R›MÒØÙ¬rj-죐­3ð¥€9(¼»ãˆçµ q~øªx›âF¡áûû2ÆÖÒiÎ;æ•ã¸Ü͹Ü]Øe?1¯HªzV›‘¥ÛØ@Ò:B˜2JAy[«;çf%˜÷$žõr€
+(¢€
+(¢€
+(¢€
+(¢€
+¯kg}çýŽî"V‚o&@þ\‹÷‘±Ñ†FAäUŠò{/‡×ø”Þ#>%¾[
+cP‘å‚ÙDQ¬®ÌÑ$Û‹+Æw<`á[{Ç·–È õŠ(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+ómCGøUý©x׺½„7q#ÜFuù"+)b_(&Nâr00kÒkÀdÿ ž¯ÿ a[ïý)’¶¡AW—+f´y¹½×c¬þÇøCÿ AÝ?ÿ 
+YøõYÓô…_Ú–me«ØMx—½¼c_’RÒ†0†bî&¸ª#ÿ ž‘ÿ a[ý)Žºg—Fr¾ÞFòuy]æÏzŽxfy’)cw…öJªÀ”m¡°Þ‡k)ÁìAïDÃuoż±Í¨9#`ÊêFApAæ¼îï÷—,×Y"ž;MsPŽÂüù$¬¶«iîÝü+ò\A•ÇÍqœîEcøÏƶžž7–ú=R=H᳚ѣH¦
+¯Ï+ùe‚V4 dùÇxà8ÏXû}ŸööwÚàûw•çý›Ìg—»öõÛž3Ó5b¼m ÖSâך<^'"閍æ]¬ùqüo*ÿ ½r#3á2ÎdBÚsQžîõψâ·V’æÜM©Ü¤¿»ÈÁÍ$nv0Û€@¨O<6¶òÜ\K0D…ä’F
+¨ d’O Îjž™®èúß›ý“ªØßù8ó>Ép’ìÎq¤ã8=}
+WðÇÛŠc½óüȮϒæžEˆ’Ü·îÂ|Ç%º’IÉäï­u˜¼#6Íwgk·ÏxÑÛÏ$‚Ý®.YHY&!œÂsƒ“”ݐD¢¼ÎßGׯõ[_í{ï2N(§TíSÊ`gÜ6 k€ò)ù›vç‚?¶Únÿ HÒ¬o&û^ó‹É<ß<
+ßscýÚáSŒ*琊( Š( Š( Š( Š( ¹ý'þ'äú÷Þ³Ž/²i®:ImyfSÆUÙQFA„:’²s'‰gšKx4k9dŠóTs’&*ðBf˜Ê•_•[	 x5±ÚÛÅoopÁŽ8Ô*¢€   	(¢Š (¢Š (¢Š (¢Š (¢Š *ž«¦Ã«éw´ˆ“&‘&ꮄƒµÕ€e=ˆµ\¢€2ô
+JmKKSx±Ç¨[¹·½Ž0B¬ÉÃä#péžJ:õ©\þ«ÿ Ùk#‹{¿/M½öÜçìïÜñ#´xŸ´nc„®‚€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+òCÃþMVüÍñìsÉw4³[hY*G‘™×
+a†'‚r+ÕëÌ´õZ‡ý…uý+–·ÃÂR•¢ìgV³¤¹‘›ý‡à/ú)¿ùQ°ÿ ãUcOðÿ _U°0üAûdñÝÃ,6ßÚGÍ‘$VEÂÆå€àšÛ¬ícýVŸÿ a]?ÿ J⮩Ѩ¢Û›þ¾f1ÆÊMFÛùž›EpðÃ¥ßxæÞÎæÒ]x\5Å–œÎ[†]>¡c;TŽ=
+gØk®­ã¨ô-'Æ^è­¦ItúœQ[M!˜K˜‘Ñ@¨(H(Çœýä)çG¦Q^Woã]^ößL¼—TŽÎîêãKQ¦Çjf¶œ[4³‚è7Ë,^abŸ.Ìy„5tšŽ…£Ïñ;H¼—J±’é´û¹Úg·BæHä´¹lgr‚@=Fx Šòý/ÄÞ)»ðÕÍÌ×ö1ß=ޝ
+¦²K5Â$ÐH¾\av†Ê,Ò¦Nçå
+G&¹â?N¼¸:ýÝËÛÛëŠ&‚Üû
+ÀŠ8ÎØ×äul¾0ÙQµ“@=RŠ( Š( Š( Š+?[¼¸Óôyïm„­öË Â)‰XpÄ€`}¥ˆPØÜ@Í hQ\?ü&÷‰â.7µ€èÚ”·’ä¬Ð*<Æd\Ÿ™®%d)€Ê7l(âxÞóÄ~#–ÔÚÁ
+ƒ}¦Kg—’K7†BsÆõºf*@#* 丢²áñ.ƒsª.
+oM—PÈméP˝Ã`9ÈÁÈÇ5åw>;Õµï5¼²XË#h®]Àtë‹@‘D„_¼fÉ!TbSÊ9. ôÄÇí^$~µ6}—ÚÍ3äÿ ß[ž^@açm?pWA\=¿‰5ùšÞÌ,eíÚÛÛêéSÚ¢·•4®¦ÚW6*7U>oÆÀõšhÔ’Ý“T’ÒYÕÈYmQ£Y ä£(A$csg ägh ¹Eqÿ ÛÚßØõ’]*$·•íË²ÄŽK#5ÄŠá#Ü¥74„CÔXMqq§[MyköK©"GšßÌyN@,›‡
+ƒ‘‘×bŠ( Š( Š( Š( Š( 
+÷ö6úžsay™kuÃ2n#r0!†G# ž•Ÿ _\IÚf£'™©éû"¸—hQr
+‚³ªŒa_ž1€ë"‚Û2v+Ÿ×¿âS¨Ùø…>Xbÿ EÔ1À6îxôÿ TømÌp‘´ç© ‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹àYî^ßÄZÍ´sÜKpaŒ[F‘ÚFt$ãs¤×_E8ÉÇTì'-9øA$ÿ ¡¯\ÿ ¾-?øÅÀ(ÓÛ=Ljµ›˜à¸ŠàC ¶
+í¬ŠØAÆ宾Š§VoFÙ*œ© ¢²õ/è:5ÂÛêšÞ›c; uŽêé"b¹# 1gØÖ|ÿ |-!ñ6•.:Got“HÇ 
+ˆK1ö š‚ÍK­ÊûQ‚öåg’Hv”ŒÜÉäåNåcï-˜C$¤¨Æ…q²|P𸍌RêHÙé—
+\öP]Fzeˆ¤j—ü-{úuÏü–ÿ ãõ¢¥Qí÷•ö;ú+Ì?áikô-Xÿ àÙÿ øÅ𴵏ú¬ðlÿ üb¯êÕ¿”¯g.ǧÑ^Y?ÄízhZ;}M´”ýÙ¤¼{…_¬b8÷g§ßÎyÆ
+?øX0ÿ žÚþæÿ ãôÖ³û!ìåØõú+È?á`xÃþ{hø/›ÿ Ódñï‹å£7ZDA_2	®{®é™r;eHÏPzSúnߐý”ûÃEx‡ü$¾+ÿ ¡ªûÿ ­?øÍð’ø¯þ†«ïü´ÿ ã5Q¬?c#Ûêž©¦Ã«X5•ÃH wC"¡¼UpÅ ‚ŒÖÕ˜w¯ÿ „—Åô5_à5§ÿ ¨.µMrÿ gÛ|EªË³;<©Å®3×>@MÝÞÎ;c'"ÀÕòc#Ô¯<¦Þ¾¢^{´Kë{»vŽ7P‘-ÊÄ%(6ðKC¿¿Í#“Ü^Š]n]bÓWÔ´ûÉ^Fw·òXéÄ‘°Æ-£>¹ÝÎ’ù—ßô×?ðosÿ Ç(ó/¿è5®àÞçÿ ŽUgÕýŒv¿¾·Ó4ë›ûÉ<»[XžiŸi;QA,p98 ô®/@øym…aµÔ^î+»2{+•!dI’ÚHYãŽc ØX®Z¼æhî.P$ú®³*W
+ú­Ë ÊÁ”ó'PÀ{
+Iæ_Ðk\ÿ Á½Ïÿ £û>¯uý|ƒØÈöí[IMV(?Ògµ¸¶—η¹ƒnøŸk! :²œ£ºüÊ~öFI¦Ø6ŸnÑÉ}w{+¹wžé”³ 0*( …P:“’I>æ_Ðk\ÿ Á½Ïÿ £Ì¾ÿ  Ö¹ÿ ƒ{Ÿþ9Gö}^ëúù±‘íßÙ}‡ì›¾Oµý¯>L_{Î󱍛~÷ñcwñnßóV…|óu©µŽÏµø—U·ß¾n·p›±×“ž¢‹«(¯öh´úŽÌìþНõÛæÛœãÀÏABÀM»]±}Ï¡¨¯›Î‹¢	3¦iáØä&HÉÆ;d~býƒ£ÿ Ð&Çÿ Óü*¿³åüÃö¹ôuó\Úg‡­äŠ9ìt¸žS¶5x£RçŽ #ž£ó©¿°túØÿ à:…Ùòþa{Üú:ŠùÇûGÿ  Mþ§øQýƒ£ÿ Ð&Çÿ Óü(þÏ—óØ>çÑÔWÏqÎðÙ,kZœ6idòuYã…#¡\*¨ ÀÚ¦ó/¿è5®àÞçÿ ŽTýB§uý|…ìd{õà>e÷ýµÏüÜÿ ñÊ<Ëïú
+kŸø7¹ÿ ã”gÕ{ýQÏ7VòÛÜEÐJ…$ŽE®¤`‚Æ+Á|Ëïú
+kŸø7¹ÿ ã”y—ßô×?ðosÿ Ç(þÏ«Ý_ ö2=‹@žh./ôK¹d–{’1f’ÖBÆ"IÉÊ•’,±,ÞNó÷ÅnWϦ;†¸K†Õu“:#"Hu[Ê¬A`™	U$wÚ=*O2ûþƒZçþ
+îøåÙõ{¯ëäÆG¿Q^»âKHV_jQ¿udÎÃ<œ¼±³ž}Xã À TŸð’ø¯þ†«ïü´ÿ ã5?Qª/c#Ûè¯ÿ „—Åô5_à5§ÿ © ñg‹-¦YGˆd¹+ÿ ,®í 17o˜FˆÞã9¨È+ê5»²‘ítWÂÀñ‡üöÐÿ ð_7ÿ £þŒ?綇ÿ ‚ù¿øýOÔë/â…ì§Øõú+È£ø‡âÔ‘ZOìI‘H-ÚKqÜó[nzgkc®J½ÿ KXÿ ¡jÇÿ Ïÿ Æ)<-eöEìåØôú+Ì?áikô-Xÿ àÙÿ øÅXµø«*ïþÑðÜã8ÙýŸv“ýwyžV;c³Îq™xj«ì°ä—cÑ變ºSÌ«u¤k6Ÿ½<Ç"¯¦V)ÎO)ëÎH»Äß¼Š©K b™uc<®¼îWêH¨tæ·LžVºuÏÿ Âwàÿ úô?üÃÿ ÅVōýž§gå…Üv²gdÐH$FÁ á‡øT±EPEPEPEPEPEP^Uã_x£TÖ.7ÙÞjöŸÝÁosV«ÁUx¤•C8l’Hoá Ž?U¢ªpwCNÎç€bj/ú3x_R³-ûÏ.ÖÄΧ<d´Ô:ž#4£Ö´©dXãÔìÜ…UYÔ’O@kèÊŽx!º·–Þâ(æ‚T)$r(eu#x Ž1]‘ÇÍ+4Uf¢½rOxBHÙ†4ˆË7Ãgn¾êê)ô ‚ ÕøVÿ ŸKïüÝÿ ñÚÙf+¬Jöë±æ4W§°ð§üú_àÖïÿ ŽÕkŸ…z3È
+ž£«ØGŽbŠáfÿ {3¬è08霓K0‡TÇí×cΨ®öO…qG5§ˆ5Ÿ ½Š"ã%cHØã¨ÃŽ@ÎFA£ÿ 
+·Xÿ ¡–Çÿ /ÿ ÇêÖ>“î?m¢ºÿ øUºÇý¶?ø)þ?Gü+
+b?ŸûzÆão>OØ3ýŸ3Í}™é»kc®Óҟר‡¶‰ÈQ]-Ï€|NÒki¤D˜äKªÈç?Ql¿Ê¡ÿ …ãùã¡ÿ àÂoþ1T±”{þcö°î`Q[ÿ ð¯üaÿ <t?üMÿ Æ(ÿ …ãùã¡ÿ àÂoþ1G×(ÿ 7àÃÚùEoÿ ¿ñ‡üñÐÿ ða7ÿ ¬˜t/ËqwZ^-´æqewBì Ü¥hÉÚÄ¡ùpXg €Ö.‹ûCö°îV¢¯ÿ Â5â¿úo¿ð&Óÿ Qÿ ׊ÿ èU¾ÿ À›Oþ=Oë4˜=¤{”(«ÿ ðx¯þ…[ïü	´ÿ ãÔÂ5â¿úo¿ð&Óÿ Qõš?ÌÒ=ÎrY…–³=ÄÑNbšÞ$FŠ—•i	h8ûë×®xèk.í(fº[8'·o*ÅnÊ̱J9‹XÇ‚.xS“¶»øF¼Wÿ B­÷þÚñê?áñ_ý
+·ßøiÿ Ç«7V“ûbæsŽÌ]ê6»RKEŠqºVtc“qýày §øx¨ü2uiM©Ë?šñ,o"©ÈÙÉm¹ÛžG}܁]Ÿü#^+ÿ ¡Vûÿ m?øõðx¯þ…[ïü	´ÿ ãÔ•J<×æ4o{œ¦°’‰š§óe·"ó#¹ ¶#;në•ÈsÏËÅ;Xõc¦H³\Ýý¡å¶V&SùƒÍÚX¶áŽ¸<Þ®ßþ¯ÿ Ы}ÿ 6ŸüzøF¼Wÿ B­÷þÚñêZ-ßœ9£Üâ5}N)#³†YÅŒ2™^|Í$…[jå3á÷àÉÏÍN¿†ñ¢•ï&¹0Ggoö€p¨à³‰É‘Ÿ/<)=F2B‘Úÿ Â5â¿úo¿ð&Óÿ Qÿ ׊ÿ èU¾ÿ À›Oþ=G´£¯¼ÐîsVBäkw[šå¡!²%RFÜrU²3˜À>XäM¡ÿ È
+¿ê~o#þ¸î>_þ9·¯>¼æ¶ÿ áñ/ÙþÏÿ …ß‘³g•çÚmÛŒcv1Ž1RÂ5â¿úo¿ð&Óÿ UF½$ïÌ58÷(QWÿ áñ_ý
+·ßøiÿ Ǩÿ „kÅô*ßàM§ÿ «úÍ洏r…þ¯ÿ Ы}ÿ 6ŸüzøF¼Wÿ B­÷þÚñê>³GùƒÚG¹BŠÛƒÀ¾/¹…em°oùew|D«ÛæÆëî0Ç‚:€Oà?Co,©g£Nè…–(õ9îÐ“Ó’©?\£üߘ½¬;˜”V½‡ƒ<O©éÖ×ök¡ÉkuMýºa¹§ß# Žµcþÿ Œ?率ÿ ƒ	¿øÅ\£ü߃kæ¿ÿ 
+ÿ ÆóÇCÿ Á„ßüb¯Gðû[ž5ŠHôû7 nº[ç¹
+{â"<ç§úÁŒçœ`§¢º‡µ‰ÉQ]ü*Ýcþ†[ü¿ÿ £þn±ÿ C-þ
+_ÿ Òúõ{hœ…ÚÛ|0ÔRB.uû)bqµ¶i®Ž õdo<€Àt,¬¹ê§¥Zÿ …Qcÿ C¹ÿ ’ßüb¥ãé.áí¢pW¥Að»Ãi
+­×ö•ÜÃïO&¡4lÞ™X™`qÂŽœää™?áXxSþ}/¿ðkwÿ Çj?´!Ø^Ýv<Æ£žxmai®%Ž(—ï<ŒGnI¯X¶øsáki
+>Y•†×†êö{ˆœuÃG#²7 p@#
+iXøOÃzeäw–Ò­.£ÎÉ ²Ž7\‚Œ‚GãRóÑüDëù#k{þÿ ìåŸQٍÿ Ùð=×—ž›¼°ÛsƒŒã88èjÜÖîf]NǺ’Lßrö7ŠÎà	ÁyUã#2=AçÞè¬gœ´²!Õlæ|gâK-)ÓÄWk1%M´LâIaM£å’@ cÛøŽA&GÜ1ÓQEq·ws ¢Š) QE QE QE QE QE QE QE QE QEcë>*дòõ=Nn
+[`KÎêN2±.]†AäŒØÐÅÇÿ ÂÏð§üýßàªïÿ Qÿ ?Ÿó÷}ÿ ‚«¿þ5UÉ.ó;
++ÿ …ŸáOùû¾ÿ ÁUßÿ £þ…?çîûÿ WüjŽIv3°¢¸ÿ øYþÿ Ÿ»ïü]ÿ ñª?ágøSþ~ï¿ðUwÿ ƨä—`³6<I}qk§Gka'—©j‹KGÚ–ì	i0x>Z,’m8ݳnr´,lmôë8ímcòáL$’K31Éf$’X’I$’I¯ð.¥g¥|Fñˆõ-_Rµ°šöìÙÙ.›pâtš@ÆFýÙHøbPg a½Oþ…?çîûÿ WüjŽIv3°¢¸ÿ øYþÿ Ÿ»ïü]ÿ ñª?ágøSþ~ï¿ðUwÿ ƨä—`³;
++ÿ …ŸáOùû¾ÿ ÁUßÿ £þ…?çîûÿ WüjŽIv3°¢¹½;ÇÞÔîÞY"ÝR8ï#{V•˜àĪ¥Îp0¹ÆG¨®’“MhÄQE 
+(¢€
+(¢€
+(®RëâW„-e5”¹ÈÎûdºAì^%eØœò9›Kr£IÚ*çWEq¿ð´ü#ÿ ?ןø+ºÿ ãtÂÓðüÿ ^à®ëÿ ÒçsO«ÖþG÷3²¢¸ßøZ~ÿ ŸëÏüÝñº?áiøGþ¯?ðWuÿ Æèçpú½oäs;*+ÿ …§áùþ¼ÿ Á]×ÿ £þŸ„çúóÿ w_ünŽx÷«ÖþG÷3KJÿ ‰GˆotcŽߙ©Y{nqö„îx‘ÖL“ÏÚ6¨ÂWA^ñ[_Ò¼]áæ]Äš¤7Vÿ ¼ŽËû2tŽs±Ñ†ÿ $2³$Œ¼¶Â8 d°ïÿ áiøGþ¯?ðWuÿ Æèçpú½oäs;*+ÿ …§áùþ¼ÿ Á]×ÿ £þŸ„çúóÿ w_ünŽx÷«ÖþG÷3²¢¸ßøZ~ÿ ŸëÏüÝñº?áiøGþ¯?ðWuÿ Æèçpú½oäs;*+ÿ …§áùþ¼ÿ Á]×ÿ £þŸ„çúóÿ w_ünŽx÷«ÖþG÷3²¢¹+‰¾¸bþÕh7g÷—v“[Ƽw’DU_l‘“Ô×SðÝ[Åqo,sA*ŽHØ2º‘AG9¦š{ʃ´•‰(¢Šd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿5û@ŒÙ6ËÛÛ…µ‚R¡„d«;6· ÛrÍy,PGóá¤s$ŽNZG=Y˜òÌ{“’{×gñKþF/×¥ïþ‡m\…zø%n¬é¢•®QEw®}³÷cóÿ ÕKçyyÿ WòîُùmÓfxûÕNìê¿Úó$Owöf»‰€UùB©·Ž€ÿ µœåS–úåc¤¢³ì¦“ûOQ‚Q?úÐñ¶lòã+coÞÝÀ>µN5¾³Ð.M¸îEÄ›|çwašW#vãÄc#ƒž¸là¾×ðÍÊ+™Žï\:„r9”ÄJ‰mñ" Äewõ’žO9èE7Ï¿½g at gž%½ÃC…eÚ…BÃ`bÇ-¼‘Þ}²ì.c¨¢¹—Z½´³˜År—PNÒD’F>``}¾a( |áà/=UŽ’]jOm¦¬2¼¤J&RP62Ìñ€>^H*›Ý#¡dú‘¹EV¥
+’4–6ŽDWGYXdz‚+·øm®N—òxnfi-–ØÜXägÉTeW?Ýde8ùÆB…Š«þÿ ‘÷Ã_õ÷7þ’Ï\¸È)Rmô3ª“‰íôQEx‡ QE QEã¿uÉumzëÃçþA–>ZÏ/ÌÊ$ËuÜŠ¯Ç͸v¡•Iwÿ !gþ·¿úS%G^>"nUÏÒ2Œ<(àáʵi7óÔ(¢ŠÄôÆ—A Œ²‡`H\ò@ÆN?ùÕoí=?Ïò>ÝmçnÙåùË»vqŒg9Ïj‚òÚiõkVŽi U‚`ÒDªy-Üçòªúm¼Ñ]Ûù‹)
+/;®3™Ô‚p äÿ *ÑEZíÿ Zœs¯QTäŠÒûÿ à>~¬fˆDò™SËMÛŸpÂã®Ol`çéNGIr2°Œ©Ï àÀ‚+•ºÓnÂþŠ_*àÝ\<b2wH®Û9ëóf21ÿ <úƶ´©B¬ÖÍË"Ï;üðº©V#F
+‚Jé“G)Ôäœm§ãÿ 
+óû‹6ú…•Ü†;kËyœ•ŽUb®«5qÒ꘣½Ìd0RIM‘ ÀoºsÇÕyã¿û,²]¼‘Z\H…C¦\2ùy\œñœÉ<äg4r'³Šœ.¥Û·­¼ýN†šŽ’.äe`	SžAÁW=)–T[Jú‡Ø×ÍÚ"wf+¶	#ç`›‘’3»š­fº¤öo4wÜ,Œóa]„™™ŒƒjƒåɃ»pÈý–—¹ÔÜyv½þVüï§{3ªWGfUe%÷NÁü?:¹{›{ÈõKÁl÷q+Ì_pI$å#ُ˜¾`äí¸Û[Ap5{ÍpÑr$*œ¸ä«dgq€>l±á8$¯sJx©JN.;;~×ßØÓ¢Š+3´*Α¯\xBìêvrH–ˆþmíªcš<ƒ#lÈ_7hÈnUA;r
+j*¡7tsâpÔñ4Ý:Š÷ü<Ï£è®ÀŸòO<5ÿ `«_ýµÐW¸~XQE QE QE QE QE QE QE QE QE QE QE s>9ðüºþ€¦æ¾±ÝÚÄi:ùdœcpv ä`N@ ù*8‘I«+)VVXAAäA¯ +ŸÕüáÝrðÞ^éøºoõ“[Í%»ËÀ{FÊ_  7g±“]xlS£tÕÑ¥:œ§Ñ^ÿ 
+ßóé}ÿ ƒ[¿þ;Gü+
+Ï¥÷þ
+nÿ øíuhGùM}ºìyéßð¬<)ÿ >—ßø5»ÿ ã´°ð§üú_àÖïÿ ŽÑý¡ån»cEzwü+
+Ï¥÷þ
+nÿ øíyGŠ>ê·Š4×ð=Öº4+ÉV‹†–F†Üã&HÚG
+$emܡ8
+ìX*ŸÚþPöë±fŠMwá~»§üEÓ¢Ó»¨øi¢ŽiÄwcyòð²FYåA¹Î9\y´„W¦x/ÀzÇš¶I|ÓC:ÞMJö)¡Îvù‘<Ó 7‘ÈÈ£ûB?ÊÝv8+Ó¿áXxSþ}/¿ðkwÿ Çhÿ …aáOùô¾ÿ Á­ßÿ £ûB?ÊÝv<ÆŠôïøVÿ ŸKïüÝÿ ñÚ?áXxSþ}/¿ðkwÿ ÇhþЏò‡·]1®ßᶅ$—2x–q$hÑ5µ’ãhXÆí/® Ó…-–¸Ùá—„ã‘\Ø\ȃ²mBæDofF«PApEuÕψÆ{XòÅXÎuy•QEÄdQE QE xÿ Ľ	´f_†ca~A»•ðÚUD2{+ªŽO—;ÔB¾®Rëᯄ.¥4d¶ÀÆˤµCîR&U'ÜŒðxÉ[Ï.dì}]Ÿ¼-%F¤y’Øñº+×áVxGþ|o?ðiuÿ Ç(ÿ …Yáùñ¼ÿ Á¥×ÿ ¬~¥.ç£þ´Qÿ ŸoïG‘Q^»ÿ 
+³Â?óãyÿ ƒK¯þ9Gü*Ïÿ ύçþ
+.¿øåR—pÿ Z(ÿ Ï·÷£È¨¯]ÿ …Yáùñ¼ÿ Á¥×ÿ ¬½KÁ~ÓnÌÙê:ƒ xìmu+¹'e$€ÅD¿"|Ç*€‘–}J]Ãýh£ÿ >ßޏ6¢ºKàþ¥«ø—MšÎ[EtcwjR\Jª¤å‰WT¨Ü‰å“¹òÈÖ¾ëzwÄØE¿ö½Ç„ÅÔ†‡™ã…Jù‘¹\œœ »œ©Êïe"©K¸­çÛûÑL¢…Tº‚c23øʝ^«cðïÀºœw–	-ݬ™Ù4Å̈Ø$0—øUøUžÿ ŸÏü]ñÊ>¥.áþ³Ñÿ Ÿoð<ŠŠõßøUžÿ ŸÏü]ñÊ?áVxGþ|o?ðiuÿ Ç(ú”»‡úÑGþ}¿½EEzïü*Ïÿ ύçþ
+.¿øåð«<#ÿ >7Ÿø4ºÿ ã”}J]Ãýh£ÿ >ßޏ"«š'Œu¥À³/õäI”Êü¾aʨ\’7†*@ úµ¿Ã/[βÿ e4ûsû»»¹®#n;Ç#²·¶AÁÁê+©‚mmâ··Š8`‰GjQ@À  ŒV”ðj.òg3ˆåV›§F¿VIEWióEPEPEPEPEPEPEPEPEPEPEÇÞx‡X´¹ñ ^Å´\Kl-ßÏ–1mÎË/™·pó
+Sh—;€aEppüQÒ“H†êê²J@­3G´O,°$êªÒK±IGc‚ç'-ýË?YêlN—g}‰].!ˆgh„ËÌÀ«4lŒ‚§Ì°o–€:
++›Ò|PÓ|>±ñ.¥i$RÍeÃÛÄ´ŽÀmX†ã’ì@E''rƒƒÅsú‡ŽukN{‹K=Bá.¡¼O컋Òn`1ecŠ'•ÚU-ɏaÀÍ z%cßkéäšv™ö–§<ÛxeUÀ€U§bv§#Œ3‘’¨ÛN0쮼GâfãLÕ–=l­®¤·°¸ó§“ÍiT£LT DAòÆìଂ¤Ñ¤Õ#±’}ÏJ‡Hµ»¹·H·´ò¤aϗ̆b¬à'iaÌ”¡ÿ ßö¯ï¼I'Û·óý»6q³³ÎÆî”7Ì»•cÎÑÐWŸ¿Ä„¾¸Ó¿±Ö†iD7"FYLoö«(°'d?»º-ò³`í2×Q ø’ÏÄ?lû$s§ÙeòŸÍQÉü	ÚÜsí‘xÜ‹‘
+ŠÏÔôM;XòšößtÐçɸÚ)¡Î7l•tÈ ¤dpr+B¸ûÏë—>#Ôض‘¡Ë‰m…»ùòÆ-¢™Ùeó6îcaJ`í ²çp Ðÿ Š‹Fÿ ¨ý ÿ ®p^/þƒ¼ŸúeµWøØÖ¦›ªØêöí=…Ìs¢9Ž@¼4N %O(ã#*ÀÜ
+ãáø£¥&‘
+ÕÔ7d”ZfŽ;hžY`IÕU¤—b’ŽÇÎ6NZ=ö&¿Ñ|Kt/tÛJk”·_#VÓÔDûŒBxà,Ä
+º¾ÙWÉ%”1ÝòÐiEyþ…âÏZøL×uÍ;ûF‹H¥/eåÅs¹À
+<¦}¸à‚ŽŒŠ¢ süwusáîÎHúãP}:ÿ t÷&cŠVp¶èÂQ–ˆÁ`; zÍøs\Ôµ-JâÏPµŽ
+”ˆÙ÷Ëp›Ê±%,(á̛ʱ$TvšŸˆ/ÖãSµ2ØÃwqn4á	äÊñ1Ý7…À(!K¾ :Š+ÏßâB_\ißØëÃ4¢‘#,¦7ûU”X²ÝÝùY°vƒ‚k¨Ð|Igâ¶}’9Óì²ùOæ¨äþín9öȼnEÈÈÅQ@â}BóLÑDöº’îÖÙẍ¾lñÄX¨e'ÉÆGJçî¼rþ×ÿ ±uÑö‹ˆíé¤Ó옉’[ˆàŒ„ó••Ý@pƒòPqEqöÿ 4K›«»0³­í¶Úi|Õ„Å…s±„²$y}ªIܬÈ‘ø–îoi:bé7q[^Y\Ï4“ª+C$Oí#~Hˆ%CßRWq %Íê^+‡MñÛÎcK…^ÞɁ¼ÎDBv¨ÚŒ79šß~¸¹~$ø’H5{Í/MƒQ±¶Šúhî¾Ç$6‘ÇȨßi20ˆNÈпï®Ö X¬9üK—ÙèÖòjב¹ŽA,ÇåR§n„V½¥_ÊÚe¾¡ª}²ïQ»6È…$ŠÆ"’VÝo¦VXv•–FbF(n'ˆ…î4ÍZ†Ò!pëoeseåÃ䪪,
+!•H,«„ bÊ	sû+XÕùÖoþÇnåÇJ™Ó?ïÜadn at a°EŒ•mâµ4Ý'MÑ­ÚßKÓí,`g.ÑÚ±)l’œ 3ì+‹Ðþ#ùÚ=½æ±m‰.%¶Š1h˜’ÒÞvûíó6é˜,iºFåF*ƽ€
+(®nòÿ ^›ÅWzv—.šYÙ[Ý4wP;4í#Ì»ŠàF1ù¶>7ƒŒ—ÚIy&£¦Oý›©É6â•…È YԏÞ(Àç*àd+®ã˜àñ[ÜEi¯ZÇ¥ÜLâ8$7%½Ë“ÂG!
+Kò>WT$îÚ)5ÍÚüWÑåmAä·¾ÛEir] HÒ(î"F^C&ÝÅØ.IP7áGlhú¶hðÙÏ©Ûê1L^Þ’lCç,7‘U˜)—/Ÿ8æ€:Š+ƒÐ®õûm[Äöv·wz~›z¶ñÚßÝ+HSÉŽBÑLYÝÜ—c¶RFDZ–©¿Äø¯,uFÓ%€\G-œ–k-³É!µžd‡Ìh„ŒÙ-"¨ÆRXWÅ zEÉØx‡Us£¥Üâ÷S{O=­$¶3D-¥—zÃ!/Ì99
+XpË‹ÿ ^Ô5mR=.]6(4Ë…·h. vk†0Ç6DªàD”/Ü|m-ógh é(®?QñÜú¤úDPùZœ7v±˜§’)7Ã%Ì13ŒÉòÌ¥|À¤î†O
+xÖdiwHºî™
+ì†40^0ç
+X¾Îqæ`ÇŸ“~ÿ –€:Ê(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+çåðœêw÷ê7Íg¨J³]iÇÊò&aG†ù<ͤF™]û[Tz
+(—²ð-†¥Åge{}KÐ]¤…ã¶K`@d(sw)åØŒbäz%Žu6©ý¡woj‰çO×_º.‘üé¾v"4Pw1_”1†ê'ñÏq-Ž…zôNR\HÉo)ù–I‚°W,|²’¡rÀƒÃ«=ÄWÚì±êwÑ8x³%¼§åhá,Á\r|ÂYòÌ€n
+]cÃÚ_‡­ ¾%ŽÔ7š¼H<jŒŠ¿fhþ}¹ãÍT’7Ä t<7ð×ÃþñšÞ”“Åu-¡¶™7(ŽB\;I°(
+Ĩáv ØQ@ãÓa‹Y¹Õ¤óî-á·u$mHÊGÎelóØtïsàÛk¤º´—RÔ¿².ÞWŸLI"s#“çTa™ˆc’¿wå®’Š äÿ á²}IuOR¹¹Þ’;Èbd‹,!c ZÀ˜S¦âXìiZ:UÅÅÀº»ºždH¼Ë©²B…Œq‚ ,»Í¹Îã¹›ŒjQ@sòøN	õ;û‰uæ³Ô%Y®´ãåy0#Ã|žfÒ#L®ý­‚*H=ËÙxÃNÒâ³²½¾†H%Šh.ƒFÒBñÛ%° 29‰;”òìF1¡gáÛ{LÞ[Ýß*6Ö{v¸,’J#	]Ž]ÛËU\38
+·Í[P?„,ÃÚ^…u,÷ÖvÐ"º²Ü"£*$ª+ªåHãïF„’FN|¿
+ôDÖ"Õ4†ŸCº‹aA¦,QÇ•YWqŒ£#1Y˜ne$ 0G9ì( N7Ô´=fçSÖ,¤¼ðÛ½î—:ªÆÒ2–¶ù¥RLÅ~F—8Ü|°(‹ÃšV»a?Ù5Û»¯ß¼Ï%•¥Äg”»±“¢ù¸2$	1’WîüµÖV=÷‡­æ¼“R°o°jÍ‚n¡	ˆ (e mÃr …Ì 2ÿ á²}IuOR¹¹Þ’;Èbd‹,!c ZÀ˜S¦âXìiZ:UÅÅÀº»ºždH¼Ë©²B…Œq‚ ,»Í¹Îã¹›ŒSþÞ¼Ò~OÙyPŽ?´­’؏ïH>üc¸4h1™I­È'†êÞ+‹ycš	P<rFÁ•ÔŒ‚à‚9Í IEP~µ¤¦·¦).g¶ýìS$Ðmޏ‹"‘¹Y~ò Ö<ž°¸¿·Ô.ïo®µ¶†º•£(Yᙂ P¡ PB™Î71jÔÔ¼G¤i7kw}¼tœ@Ëq"䌤(°àä…8
+O at jžÿ ê¼ÆhV§‚'U¹»`x$o*&%Nf 0T€SÕtmKµ¸{ýVîÚÚâã̵ƒÍŠå¥óó
+̲´«¼+	AUP¤©§ž©©j:eîŒo­Å”SÄu
+e?ãäLQŸ6ä,‡çŒq˜ñ°:|µÒiºŽ›pׁd¹Ô
+I}tÞd줂T1ûˆXnòÐ*NV¥ qiðÃAk‹»ûÉ.﵋„u­ÁO´C¸ä4eP*ºQöîP‚BÇðÝœžÔt3$ÿ eÔ>Õæ¸a½~Ðîï´ã ÎkbŠ ÏÕ´”Õbƒý&{[‹i|ë{˜6ï‰ö²«)Ê;¯Ì§ïd`€F<¾	‚yZyµVK©|³<îñ3DÅà%|½©å¹Ü*«¾'=EÉÛü?Ómt†Òâ¾Ô–ÒTX®Î\O‚(n6ã¦X à–ÚÊŠë(¢€
+ÿðнÖdÔ£Õµ+3=¼v×Ú´j³F# X¡t?½q¹O#
+nQ@¼~Ñà¼Ö.mÌð6§öC²"Š–Íj’b]¸J©ÃnS´c ÜŸÃΖdê:’Ü[¤‘µÒγG#+JŒØùC2)Ìa
+m
++rŠ Ç>@ÚéP¾‹ûcO)ÕM»ùKø˜.åm¨‡’Ø*œåê?¼=t–ÿ Ùö‘è“ÁqÀ¸Ò`†r¹Uò„2n
+ÛH#(§µu”P'{5֝͝?‰Ä~E…Á¸‡Q°Ä[ÌRF|øÈc
+•Žýì¿!,ɝŸ
+	¯înmõmJÆ;ÇwojѪÎÁ	.PÈ„¢"åq´†É;•Ïÿ Â<ú?ï|2ÐY/ñéò†û$€s„PqŸ3G8À{Ø\_ÇsöÛèÖ+¿µE4{™ÖâEBÅ^hÑÎI#nª’¦Æ›á=1´±åôÐi‘"[[Í(dWX¼‘/ÝÈc*TŸ1m»Žê¹¦ëßÜ5œ¶·vê…ÚÖî0¬W#•e%$+’ŒÛw(lŠÔ Š( Š( Š( Š( Š( Š( Š( Š+Ç<câ)<O{u§2mÒ-.$€Û¸ÏÚ$Ê3È:§jôà1çhMhÒ•YrĨÅÉÙ¼ÿ ¼'ÍÔä¸þZÚYÏq»$hÊÞ‡àäu£ÿ …ŸáOùû¾ÿ ÁUßÿ ¯1¢½ìøÿ 1·°]ÏNÿ …ŸáOùû¾ÿ ÁUßÿ £þ…?çîûÿ Wüj¼ÆŠ?³ãüÃö¹éßð³ü)ÿ ?wßø*»ÿ ãTÂÏð§üýßàªïÿ W˜ÑGö|˜=‚îwÚçÅ}ÓC½ŸH[ëÝIbo³@t»CÂî,Š6ƒ‚y ãœ
+æ<1ãñ®èp¯Žo¯ xÿ w>Ÿ‹2¥ØÅ+ª¾õ<«åó«+!²(£û>?ÌÁw=*‰µ·ŠÞÞk¸`‰GzEÒª(  ŒTŸð³ü)ÿ ?wßø*»ÿ ãUæ4QýŸæ`»žÿ ?Ÿó÷}ÿ ‚«¿þ5Gü,ÿ 
+ÏÝ÷þ
+®ÿ øÕygÇùƒØ.ç§ÂÏð§üýßàªïÿ WI¦êÚn³n×^¡i}¹F’Öe•C`¤Œàƒq^N‚îÿ Lºû~•pÐ_ ùAvMŒáeQï,9]Ä©SÍDòû+Á’èé£=ò©êZ¶›£[­Æ©¨ZXÀÎdº™bRØ' ±8ãØÕ?øI,ÿ á
+ÿ „£ËŸì?Ùÿ Ú^Ñæy~_™Œg±Û8Ïzã-­¥’q©êb)µ‰c<ê2pLq’2±8_øËcæ˜ü,×Uÿ Á5çÿ £þëªÿ àšóÿ VE¯ÿ @õÕðMyÿ ƨÿ …ƒ zê¿ø&¼ÿ ãU‘E kÿ ÂÁÐ=u_ü^ñª?á`躯þ	¯?øÕdQ@ÿ ð°t]Wÿ ןüjøX:®«ÿ ‚kÏþ5YÇÛîÒ%Öæ‚k¹dP‚ÆÜ]^M2F%[q’¬ç8iv$dd@ÿ @õÕðMyÿ Æ«Ÿ¿ñ‡-~Ó¨èm®X_ó4vš-×—w',D‘<b6f8Ë倘¢°bÕõkQôXå²KÈZS%Û[»Fê‰`Eæ¤ý ï?pñó|°ø[Ä7—þ³ÔÆ™{xד\ÈV)b&óŸj“#¦@—·/…þ.ø‘4}Kþo	j²ên–Ëì–"O¹¸ˆðvmÏÞç*rÃçŸÃ>9Õõ½/‹eÕtyYXè×dêX°Äªåǵ¶a@“1†ó5›}âÝFÇÏ’X,¡Œ²ò€ª¢x¢”<ˆÌ2¾f»`	@,¼S«Üiio:ØMoÝÒm‰O¤“(W=˜\Œ|™ßi¾,ðŽ‘nÐX[jP#¹’Bº-ái\€»²îp2ÌI=É«Ÿð°t]Wÿ ןüj¼îMoP¹Õ4øã’Ê$º¾»·¿™…&BÌ¡À•K $|¡r$†\¯øƒU{Ž[‹F£ké®nš@…Ò2œ¹äÜ}åù)">p =gþëªÿ àšóÿ Qÿ @õÕðMyÿ Æ«"Š ×ÿ …ƒ zê¿ø&¼ÿ ãTÂÁÐ=u_ü^ñªÈ¢€5ÿ á`躯þ	¯?øÕð°t]Wÿ ןüj²( 
+øX:®«ÿ ‚kÏþ5Wtßh:­ÒZ[j—’åÚ]#[Îà’±HÙpÌ8<ðqÍÔWñ]ÀÐ̤¡ ä1VRC)«`‚"€=Šæü-­Ü_Mw¥_7›ycR‰£¸BÀ`Ìl´ðF7l^âN¹.­¯]x|ÿ È2ÇËYáeây™D™n»‘UãÀ8ù·Ô"*TTãÌάxºÊŒ7gouñ+²„Ê\äg}Œ2] ö/²ƒìNyŠƒþŸ„çúóÿ w_ün¼ŠŠáúì»P¸^•µ¨þã×áiøGþ¯?ðWuÿ Æèÿ …§áùþ¼ÿ Á]×ÿ ¯¼–é5kT¶T“tI%(§
+
+rF};š¡r\­‹Ï-ÂÉ%ìñH±]Hh38#¡QÎÀJµŠ•¯cšy
+7'ç[yžýÿ OÂ?óýyÿ ‚»¯þ7Gü-?ÿ Ïõçþ
+î¿øÝx#Üß&¥R1YæX '¹-	 ¿)fÇOÝã«T¾š[
+ÚK<¯,¿.ìXŸ»šo%k!SÈèN·²R•õèº4¿[žÕ©xûÀZ½ºÁ-ÌèŽ$Œ¶•v' €èÂ<£Œœ2Gb+Í&ø¯â+/ˆ¶×
+oSðͦè
+Éf±Kt÷¥`¨«¸6
+ð¿*€v–rp.¦•l5öY\4[¼²å?p‡NI5%ýô+?›?˜Ñ´Í•g@@\›¦PŒÀÏÊ
+8â&ÕìgW&ÃÓ—+“ü;µúGÂÓðüÿ ^à®ëÿ Ñÿ OÂ?óýyÿ ‚»¯þ7^ú•í¦£}I¤“ypnFe+EÎîŸ9$~V#ÐhÞ/Ú5+kWyV&†YŽFBYJʐz1ã§ä*^*JÚÇ!¡%+MÝ;tïcÛáiøGþ¯?ðWuÿ Æèÿ …§áùþ¼ÿ Á]×ÿ ¯žâÔ® šô¬ÈëmÉåÊÅ™’9f\z9è2jÌ:µ×ÚÄ)´K3	]œtiÞ1Ë6F6ç 6z ¼U<D×Dg›+{ò×È÷¿øZ~ÿ ŸëÏüÝñº?áiøGþ¯?ðWuÿ ÆëÁ%½½¹Òáš9íâyd¶•B†,©#µ†áŸ®Fá¸`u«Úmì×RL“ˆP²'–r
+6pA‚>SƒÁ=Õx̼TÒ½‘¬2<æ §-UÖ‹Ïümÿ …§áùþ¼ÿ Á]×ÿ ©mþ&øBâu‹ûU ÝŸÞ]ÚMoñÞIU}²FNS^;EG×eØè|/JÚTqô\Ãuoż±Í¨9#`ÊêFApA椯
+ðwˆn¼=¯Ù@³LÚmíÊ[MjX²£HÛQãRp‡Ìp[3’¶ãÜ«¶•ER<Èùœ~
+x*ÞÊzõOº
+(¢´8Š( ¾qÐä]Ó?ëÒ/ý WÑÕã+Фð÷ˆgâF±Ô%’æ	ÜËgwy"$w°Î2§ ŒÕہšK>¦´]¥c"Š(¯`ê1ÿ Ó?·ÿ å¿Ø|ß|ùžWåäãñó+ÜëgOJ÷ÅÓL•S*C<¸XKîgQßäõÜOaEdé_©.&}ìÒO¦,ö¢q‰cr<¶Gز)”€ßt7ç¶sXºŠ^Ý\ÙÝEËÃý¯$o	;bòÕYŠ°Êaƒàñ×>†ºª)Ο6ì¹Ä¢jšn›?—,FÖæÑù O²¨aÓ%‰Ýçï0^Ã×?lû
+¹ºóÂ5õÂÁŸ1b;Ê/îþlƒåƒ·=$dÖÅ£K–ú‚Ž^×ûB-Udï.‘¢+ÄJ¼Bi~ûËË'®Oí*óX{0Šg$–Ëå•W-Hè¯ÌX¸À$ô’F’ÆÑÈŠèà«+‚PE:…I®¡ËæswKt'µ¼·»¾p–“®ù-~bKÆ *#È'±Ûü àÁ·­ÆÊp¬³×ÌV`Hls’ Ÿ@METag{+ToçMq…—–úÛˆ­¢lœ± n s±s¹ˆè š©IE]»+³«°ÿ ’-mÿ aµÿ Ó°­Šéÿ á³ÿ „7þ2°ÿ gÿ gù›‡™åù~^sŒnÇ|c=«Ó§ž[vŠõQ/íœÁvˆQ*ðJƒÎÆá×<”e=ëç$îÛ8nŠ(¤EPEPPµ¥³ÇqÛÄÉsŸ=J%Ê…;‡ñ| { *j(*÷NÐ-tq
+ýž™—nÛÂOklIÁA%ýõïE†³¤Ípö–³[ÆÆb#Udáš4™ž0Ì1($ú’}Ëõ{;›–±¸´<öWuŠg(²f7Œ‚À1^$'¡éŽùÞ™áJÎ{ÿ 4éþ^£ªG¨Ë${¼Ø¶:KåçoïàÊ3· –ä¶Ð¶"ѵb›
+¼7—km~ëÇçH±º´lÅIÜ €¹Ž õ	½ð¾Ÿw¥ÚĺbÊ.¥´µˆ‡Ùå*K¨þá<)œº‚9¬ß
+øRëN›N¹ºDÝ0Èá®d&)VÙ`(#Så“Á>g'®:0xðΤ,4Ë_+J°ì·Ý*³yЬŹÆ9ÿ [Ÿ+ ù†ÿ › ¡´‡I½íK(ì§i˜?ÚáTbì  ;ÇReëÀ$SÆ“¦ˆãŒiö"‘%|•Â:¨U`1Á
+ ¨ 
+­ éÓéÖ³‹æ›Íس4ÅÕ\\ü¹Ë€BŽV­ QE QE QE QLšhíá’i¤HâK»» ª d’O@(ú/ü”;û^èÛZó;¿ùë?ö½ÿ Ò™+ؼ¥ÏÚõ«¸ä‚âýR$·uÚc‚6“Ë,!ÛÌf à¨eRROñG}3Å­¨€Ík« ÛÏ!'
+g  cTe$í”ô¹±qr§§CÜáêñ¥Œ´¾Òkò¡ÊÔî%žhœìòbY]Ø€¡Inÿ ðšž³n-ï¾ß<¶¦Y H¼Çsº"¥Îà»Ho¾8$t¯.)=Ϻ«)E'ýYþ¶-Ç5¬þTñË›ò‘H¬îä)ï÷yû¾ÕºÓchÔÏh¤ƒ<`ºŽ$¸ú‚Ç?ZÊ—K»KWHËG<·ãd•å1–O-‰fÁ8L°$Žp;
+Òßè’Ý[^XBaŠÖé‘÷Œæ-ª€(@0GÈ;Ž½8çNXßsÖ¯ÊÚ†¿ŸoMW]®›/]Ýéö*gœÂ¤Nª[*‘€\œ÷
+yï·Ú ŒZXj‹om£ùrH§CJ
+»Þ ²ñ¦i­c{%µÓ2[¬òÝÅp¨%b¸O/‚ÛsÎÃÛ½Y…%¹¼·½hü¥X¦MÄ3¦ÓŒq™ ò3Š4H§Í9ímšÓÎÏ+>Œ‰n4{ÈãÔ%›ãŽ97ͳ|!¾eÉþ¼SåM	äŽe±ŽYA‘ÕÂq†Ëzð_'ПzΓÃóy:@ÊÂWD•¢Þì2Œâ9ïӹţ¤È»V6ˆ"ÇhŠGú©{9>þ´ß/GýZ™ÅÖw榯߾—ÿ í~WÙ¤Y1iï{op4¹xö•b³Õ°¤ã¶é‡Ý-­ÌñYÜÛ¤ÛÕ¥Q"Q´¨={üÿ γ“D•oDÎQ”Ê\5ÀP&yå~p9û¤gž•fQ{. ·VöÑ„IJÑïË;‡Ê{«|84¬¯£4S—#ç…®Ö–¿kôíþ[’Çý•qKØåŽ6DG]¬‡Ü ö#wý®:ÓRM%–[B3,È]ORL…I?\ã¥Q-Ìžh¸h¦D†I·ˆäÜNÒ07ß à`uÉÅmWN¸YµR‘¤ßÚj¨ŠcwØQ ÀÀ%R@\Ï 5·k™N­XGÓ_Õíù%êïÓ]™²’ÞU›ìkŒÏ(}¡Yƒ Äç‚C`{â¥G²·d­âK™VRª%vîñúÖsiw¢vòä‰cQ6ÇÁŸÌ•d*p>^]À“Î@íPµ”Öñ3¢H?}B²N6ÊÁÉ )-‚ÁÆ8¥Êž—-Õ©Û‚I-þëüµðnmÃuopÌ°Ï…B–ààN=G"¥¬hÓiAçªïHJçÍf9b†Üí\Ž3»ã¡Þ¨šIÙ3«
+R¥JjU#gÛúþº”u¯ùjõí'þ‚kéÚðoéGÄ0³¶FÌ6¥íÛ¡ÿ Wå°hÓ8 3>ÓƒŒ¢Éƒ+ÞkÑÁŨ]õ>3‰+Ʀ%B?ekêQEuŸ<QE ^úÂÏS³’ÎþÒ»Y1¾ã#`‚2§ƒ‚ü*Åyõþ¯uâYíïnm4€ì‘-¬¾[Ý…ly¦Uù‚O-†W–,j€M?­)æfµÕõ›HOÝ‚9£‘W×
+,nç'žXõã Gÿ 
+¢Çþ†-sÿ %¿øÅd7…|?#›E°žV9yg·Y$sÝ™Øf=I$’y4Ÿð‰øoþ…ý+ÿ  £ÿ 
+ÓÛTþg÷•Í.æÇü*‹úµÏü–ÿ 㨱ÿ ¡‹\ÿ Éoþ1Xÿ ð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþýµ_æxs˹±ÿ 
+¢Çþ†-sÿ %¿øÅðª,èb×?ò[ÿ ŒV?ü"~ÿ ¡Jÿ À(ÿ øDü7ÿ Bþ•ÿ €Qÿ …Ú¯ó?¼9åÜØÿ …Qcÿ C¹ÿ ’ßübøU?ô1kŸù-ÿ Æ+þ?
+ÿ п¥àáGü"~ÿ ¡Jÿ À(ÿ mWùŸÞòîl¨±ÿ ¡‹\ÿ Éoþ1Gü*‹úµÏü–ÿ ãÿ Ÿ†ÿ è_Ò¿ð
+?ð£þ?
+ÿ п¥àáG¶«üÏïyw6?áTXÿ ÐÅ®ä·ÿ £þEýZçþKñŠÇÿ „OÃô/é_øøQÿ Ÿ†ÿ è_Ò¿ð
+?ð£ÛUþg÷‡<»›ðª,èb×?ò[ÿ ŒWS¡økIðäs&—jш2<“<ÎØè¹-“œI“Ÿ>ÿ „OÃô/é_øøQÿ Ÿ†ÿ è_Ò¿ð
+?ð©•IËâm‰É½ÏW¬[Ã>·2Ï{h~Òª\Á+Á6ÀIÙæFUŠd“·8Ï8ȯ?ÿ „OÃô/é_øøQÿ Ÿ†ÿ è_Ò¿ð
+?ð¨Óÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ £þ7ÿ ¡«\ÿ ¾-?øÅsð‰øoþ…ý+ÿ  £ÿ 
+?áðßýúWþGþÓÿ Âÿ ô5kŸ÷ŧÿ «v	Ó­nbº»º¿Ôî!pñ½ÜØE#•ýÔa#$˜1BÀàç…Çÿ Ÿ†ÿ è_Ò¿ð
+?ð£þ?
+ÿ п¥àá@¯Uï¬,õ;9,ïí »µ“áž1"6#*x8 ¼Ãþ?
+ÿ п¥àáGü"~ÿ ¡Jÿ À(ÿ €6®¾èRÊÎÿ V°1Ep²‚½™–FÏA€qÇLä˜?áPé¿ô0kŸ·ÿ ¬ÏøDü7ÿ Bþ•ÿ €Qÿ …ð‰øoþ…ý+ÿ  £ÿ 
+eöQԱب«*²ûßùšð¨tßú5ÏÎÛÿ ŒÑÿ 
+‡Mÿ ¡ƒ\üí¿øÍfÂ'á¿úô¯üü(ÿ „OÃô/é_øøRöTÿ •}ÃþÐÅÿ ÏÙàOüÍ?øT:oýççmÿ Æhÿ …C¦ÿ ÐÁ®~vßüf³?áðßýúWþGþÂ'á¿úô¯üü(öTÿ •}Áý¡‹ÿ Ÿ²ÿ ÀŸùšð¨tßú5ÏÎÛÿ ŒÑÿ 
+‡Mÿ ¡ƒ\üí¿øÍfÂ'á¿úô¯üü(ÿ „OÃô/é_øøQì©ÿ *ûƒûCÿ ?eÿ ?ó4ÿ áPé¿ô0kŸ·ÿ £þ›ÿ C¹ùÛñšÌÿ „OÃô/é_øøQÿ Ÿ†ÿ è_Ò¿ð
+?ð£ÙSþU÷ö†/þ~Ëÿ æiÿ ¡Óè`×?;oþ3Gü*7þ†
+só¶ÿ ã5™ÿ Ÿ†ÿ è_Ò¿ð
+?ð£þ?
+ÿ п¥àáG²§ü«îí_üý—þÿ ÌÓÿ …C¦ÿ ÐÁ®~vßüføT:oýççmÿ Æk3þ?
+ÿ п¥àáGü"~ÿ ¡Jÿ À(ÿ eOùWÜÚ¿ùû/ü	ÿ ™§ÿ 
+‡Mÿ ¡ƒ\üí¿øÍKoðFŽukWX»„gtMjÜq–Š4qƒÏ:s‘‘Xÿ ð‰øoþ…ý+ÿ  £ÿ 
+Uð¯‡ã`ðè¶J§),ëˆ{2º€Êè ‚"eå_p<~)«:²ÿ ÀŸùž™¦é¶zFŸ
+…„´#‹“ß$’y$’I'$’I$šµ^c­Þxm£7Ow¢ïUÜ»I=¶æ Èfv;£Rw0~UK6ü(Jô
+ÐäÜ(¢Š (¢Š ÇñeõÆ™àÝrþÎO.ê×O¸šÚ×XØ©ÁààÖ¹+KXll ´¶MAÅdª£ dòxÞßØÛêzuÍ…ä~e­ÔOɸÈÀ†Œ‚zWi2\›·¿mڍ¡6ׇnÜÊœ3…nxWSš ½EPEPEPEPEPYZÔ÷&›iopöæöèÂóFª]E$Ÿ.àW$Æ ðO|«U¯l-õDW
+ä+oGŽFÑ°FUÔ†S‚GpHèM b\ê÷º/Û!sý£…¸¼¹žfJ!;øP‰¶Gýܝ£Ø2NZ«OãIá—hÑn%k„A	i^E‚_-ÙU°NShm ’À²€¥õáÒ;Á)-þµÌ¤ÜIŽìÊ àÜ $t8©¥Ð4É¢X¤¶Ê,’I#
+Þc‘[æFc’‡*p28 Íj{…“M´·¸{s{tay£U.Š"’O—p+’cx'¾ćWÖañé0Ÿí'Ï@×‘nÂZÈFTãs¨Øœår:°éïl-õDW
+ä+oGŽFÑ°FUÔ†S‚GpHèMPoéå3A)–-û.>Ó/œmÜ|ÍÛòB*ç9Ú6ýÜŠ ĵñÒÍ¢é÷Öú}íÙ¾k™R …äÇ.Ò Íó( á{3ç–¹ªëÚ‰ðö·{ah‘­´7"Þá¦29e*pr¬T
+Á‚üÅ3WâðÆ“ŒVfÌI+¢°‘Ë´d.Œ“‡*B®AÅLú™'Û7Ûd^FñJ¾cckýð£8MǖۍÇäó@­5«Ùïîl&ÓR¨á2DvÙ#ó\°Ã&üó„bÙžêdñ5¢¾ –ÎâWLY^§=xߟҋ}OµóL1Ê­$f2ßh²†ûÅIl¡b3.0I<Ô×ú]®£å™ÄªñçdN𸐃ƒ‘œ  n_ͤéïw}i,ö±Ü^	.µcžDE^6äQó²g#nö$UÈüMy%¥£.(º¸¼6‚)â\ùM pdEbŸ.	Ø
+€Ø¯¿†ô‰R4’É$D]¬ŽÌË(ÉoÞ‚q)ÜY²ûˆf-Ô“SA£X[ˆ6D塘βI+»™
+ÜÌÄ–;¯ÌNa€
+ó]\ë7v©¨]ÙAggÁ6p¤!v”C#“ÀPIëÆ)Úø²æíã†ÒÊ+¯2Hà†é¥0Å;µºÜgnlßÔÁÎX¦’øvÖh“íï-Ôÿ 7œþk¢Ì™¶2†ÃF0T}À)#œœ¾?iPØýŽ+wŠ Èêc™ÕÑ’5‰J¸mÊv(^ÈÎs“
+_‹?´g›/-Æ©&™'ïw ñÀÒ3Få*:0xûµ6‡âµ_°›?ì‚þÏívãΣ`mØ d]¸'#9
+~Z³‡4«k¸.¡·t–.¸™ö³•*de݇† »Ç<š§§xNßK°°·µã’ÝbIfBÀº¦‚.â#:©|˜g9$0 Ǐ\×-ž[ó
+íå²êRZ´rt‰Ü˜PCŒ?˜	Oõ˜Rò2¦®_x®îßI¸»–Å"ˆ­Ì1<;¤Â’—á£Ú0ɵ¾lü¤ É¡þʲû/Ù|ŸÜý£í;wõžo›»9Ïßç;tâ©ÞxcL½Ží^9WíQÈŒfÛ‘J»¢Q\†l°\Íœî9 §‹£2j¯&Ÿv¶š|sÉç¬o‡òX«®YBdv…fÈvÒ1O‹RÖ›Å6W6vööïkpò„¹ó2´Xe; onK?U-¤º.œ³\ËöTcp¬’#’ɵŽ\9Uyl¸òrjÇ†,Ú-d¸¶¹"¡q+K¶@¡ÉbÙfÚª¶í¥Pò@W:­üƵs4Ú¨Ó´É7‘l¶¾NÅ·ŽVFÞ<ÂI$qÇÌ9‘5׋®tëÛÛí6%ºµÒæÔÈ‚èº2!WqE9'vxÀ uÉ¡}¦/ou¿̲ŠœƒÆ6ªŒtâ³fð–q‘Í
+ĆE(ò½äÆVB9ŒÈ_yŒõٝ¹ç 
+z¯‹ÛH­Ìúk¶¦L‘O:L7¹t—bc’€• `‚Ç Bþ"Õí¼BÖiˆÒÊ°G)r¦0Ì·.dT1\B åAmªÜnÞ¹ÑtëÈn¡¹µIb»™'’²:
+HôýÚqÐãrs
+·‡4«Kµ»ŠÝÍʲ¿$Ï#³*º‚ÌÌK²¸ç<?…pFÓÄrjº
+åõ´O•aû÷îÙ3Åæð@ÎÕhÎzøìEQƒÄ:…¢ÛM*\]Ás*X|¼Nää).ÐO»zÖ­·‡#‚Ý iÿ vóOqx±'—ö©evÜÛ
+r~Xþo—4ËIl¡´xs;| ‚…~éA¹ÍcR“¼]K‰ÃR§ÉZŸ5ß–ÞO{üÑ‘'‰çU
+ºT«0´7rG4ž^ÅRÁ³Æz¨ÇîϪ×~2X­¦²:¨Ø,ƒpF^2R3ÁÈäÛ«m4=65*–ª Û›\+û²rG^ä“ž¾õžÒ&£{L£yycÿ •^ý"³p¯m%ý}ÇU<FT¥yÒvÿ ‚¿½ÚåDñѝ=O™ã¹Š"³fRpÆ0J’OUn|ZÑY‰ç´šÝ⺉%‰wmd-‚sØŽƒ=›­lJ/5š6ÅT
+Ä•!AUܤሀH&š<;¤ˆDFÍY‹&Ù²Tm\’y qƒÇµ7
+öÒ_×ÜÄeiÞTŸOÏ_µÛËî3áñgšËlÏ,1…å{d9ÆzŒ8ê3ҝ®Ë7‚ßW²Ý¬nàióž¼ÿ ýjЋ@Ó!TT¶û’¤ªLŒNä^IÉ pOjŒøvÁ¡KV‹ý8š5€3‡b[9<ªãñëžZÖi¾Œ^ß,U#(A¤¥ï­ÒÝY·»¶ý:™MâÝ:æx¥‚k¨[sÛIr¾C2¤{äÈÚ |¼äóÅZ_D÷Ж®a‘ C#0e,¿/B0N{ô5­}¦ZjJ‹uý™ÚC ‚28#‚:aÑ´ãwÏÙPIÝ»r*S´pH€q‘ÚŸ%dô–„ýg.œS&¥kiµú=×MôZëg±_ÃW—‡‡ín®¤ó&}û› g@àqÐVµAggo§Ú%­¬~\)«’q““Éç©©ëh&¢”·<ÜTáR¼çMZ-¶—e}QEFEPEPEPEP7v°ßYOir›àž6ŠDÉ•†Èäpk­ðõƧàÝþòO2êëO·šgÚçhÔ±Ààd“Ò¸­ZK‘bÖö
+·Q»"ÚÌí݉_…b0r«Ë·
+Œpq^‹aco¦iÖÖqùv¶±$0¦âv¢€dòp ë@(¢Š (¢Š +œÖ¼+öû·¿ÓoNŸ|ày¤Ä%†r  È™°^+)áC
+tuÄjž"Ô5K©í´k±ce¯—b%y¤‘«ˆÃåQU”©,­»æÀPØм][MuS)¿–"ãûÛ<–Ûž»w6:dõ¤þÅñ‡ý´?üÍÿ ÈÕA´³#›VÖä•Ž]Æ­qf=NÔuUú( v qIýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #Qý‹ãúhø5›ÿ ‘«?û!?è%®àêïÿ ŽÑýŸô×?ðuwÿ ÇhCûÆôÐÿ ðk7ÿ #R®…âé#Zh+Eü²”ÞÙä®ìuÛ¹sÓ#­gd'ýµÏü]ÿ ñÚUÒÌl[[ŽU9G:µÄXt;]Ù[èÀƒÜÅ uš/…#°¹PÔ.>ß©¦BJ£† F?wf
+pH.Ic¹†à¤(諉ÒüK¦\Ai¬IöËI¥XcÔÕ™d‘‚¢É(R¡×Ü ®I]µ QE QE eø—R›F𮯪[¬m=•”׬€•,ˆX‚2=Eqzu”zf™ia;Em
+B…È,UTœw⻍wLþÛðö§¤ùÞOÛ­%¶óvîÙ½
+îÆFqœã"¸].ôêeµÛÂ`–DX	ËC'G¸2°*A ‚@ tQE QE QE QE QE QE QE QE QE QE QE svÚΤ¨×÷mhö-¨=†(YeOôƒ6âä7!r0¼Aã
+
+ÏŒ•­fû
+Œ²^Û^[ÛÜ[!vŒI(NJÈT†P7d6 ¼Ö•·‡¢·™ïnî-þÐ÷)i/—å$ŒæMß*†l3Áê¿áµ[sW÷±¨XR2¦2bHdB«”9C`¶IwùpYüi—P[ÛÚÊnóì×6 Ç,«˜¥e ÆìªKѸ ÛF®7‹,cžÆ9¢–¼À#Ä6ÌÆÑíß½ˆ|)*¬¼ƒœdÔ?ð†Y¬¶ÒG¨Dmv‹.DZ¢ºÄ¿w$ ‘ñœîÜCï3xR̪ùwWq1ÃJêP™¤YUvʐ
+Êìà(
+IÁp´ž6Ò¢²šåÖTÜ}VF7¾	Ææ`¨p¬J9W ¨, íèZO¦G©$è,Þ8™þE•Ý¸ççž•š|3s7Û¯~Ö¬¦¦ui!Uª£rÀ	dpÌw’I ~çM†ëM[	_ l–.ªAÚŲX0[9Ü	ÏZ ç­¼]vú½”º]Ã\KÓý•"Û6ÝÑ4Dî`ª6HÊňdlªr /Õ|mmo§ÝI§A-Ì맛ØÀ—fàÅK+ìÇ%°‚ ïùjãxCJŠö+Í6?웘ãxÄš|qǸ1Rw
+¤?ÝÀ'ÁÏ„¬.m‘ší,–ÜÁ¸—+b0ïRÀ°>[ÆvòNÝÇ4ZOÙÁiöË«ÛkE™à–iÌ(±ÈŒÊËÌ™¤þì>z@Õma>Ýqk
+ÝÃA”g‰Wo›°H#É#©qÂrìñTÛ–oc¬—Wo=e””
+<s¾ùQ°¸Ž9P¬00G9¹m£¥µñº—n͇•(Ye#ó(;T
+¿s€väf€14/Í©éмšuÄ×ò*·ÙmÒ4!|˜]œ—i\̘É
+‡oÊM_Ò|[a­}šKHnŭԏ2Eµ%‘w »•Flãn	
+•¨l<o¦@‹g©êOÊ·?ºgì6`ÆW†>vîÊõäææŸá«
+2ËN´´óR
+>âKˆ¾p\H
+’FHVÇ~Iç QE QE QE QE QE QE QE QE QE QE QE VÔl£ÔôË»	™Ö+˜^(@`¬¤g¿5ÚxkR›Y𮑪\,k=í”7,`…聒N2}Mq:¥éÓôË›´„Ï,hLP†šN‰ð~fb 	$Œ]Ö…¦bx{LÒ|ï;ì6‘[y»vï؁wc'Æq“@QE QE Éjþ»[©ot-PÌÆIìnw,RHO.Ž ˜‰ÉfùX1–f=mç-ˆcbáKùNÁsjcb;©iUŠúeTã¨)6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ £n¿ÿ BŽ«ÿ ü~½Š óºÿ ý
+:¯þYÿ ñú6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ £n¿ÿ BŽ«ÿ ü~½Š óºÿ ý
+:¯þYÿ ñú6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ £n¿ÿ BŽ«ÿ ü~½Š óºÿ ý
+:¯þYÿ ñú6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ £n¿ÿ BŽ«ÿ ü~½Š óºÿ ý
+:¯þYÿ ñú6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ £n¿ÿ BŽ«ÿ ü~½Š óºÿ ý
+:¯þYÿ ñú6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ £n¿ÿ BŽ«ÿ ü~½Š óºÿ ý
+:¯þYÿ ñú6ëÿ ô(ê¿øgÿ ÇëÑè 8Û¯ÿ Уªÿ àEŸÿ ªz®§¨èz]Ƨ©økR¶³·MòÊ÷xQÿ òI8 I “^§\_Åmwáή“Ý]À–vò^…·(•¢™Qòä݃U#™·_ÿ ¡GUÿ À‹?þ?FÝþ…Wÿ ,ÿ øývú’š‡e¤Ås=Ä6q,1É>Ýû…j¨à`tíÎNMhPœm×ÿ èQÕð"Ïÿ Ñ·_ÿ ¡GUÿ À‹?þ?^E yÆÝþ…Wÿ ,ÿ øýuÿ úu_ü³ÿ ãõèôPœm×ÿ èQÕð"Ïÿ Ñ·_ÿ ¡GUÿ À‹?þ?^E yÆÝþ…Wÿ ,ÿ øýuÿ úu_ü³ÿ ãõèôPœm×ÿ èQÕð"Ïÿ Ñ·_ÿ ¡GUÿ À‹?þ?^E yÆÝþ…Wÿ ,ÿ øýuÿ úu_ü³ÿ ãõèôPœm×ÿ èQÕð"Ïÿ Ñ·_ÿ ¡GUÿ À‹?þ?^E yÆÝþ…Wÿ ,ÿ øýuÿ úu_ü³ÿ ãõèôPœm×ÿ èQÕð"Ïÿ Ñ·_ÿ ¡GUÿ À‹?þ?^E yÆÝþ…Wÿ ,ÿ øýuÿ úu_ü³ÿ ãõèôPœm×ÿ èQÕð"Ïÿ Ñ·_ÿ ¡GUÿ À‹?þ?^E yÆÝþ…Wÿ ,ÿ øýuÿ úu_ü³ÿ ãõèôPœm×ÿ èQÕð"Ïÿ Ò¬^!‘‚'…/ãf8=ͨIîÅefë…cŽ€ô¯F¢€9=#“µÄ7úì±¼Ñ8x¬ }öñ²Ÿ•ËV‘ÁɃ·¹ž²Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢ŠÈÕ¼O£è“,·gí,¡Å´<ól$þ\a˜&A±Œñœš ×¢¸ÿ øOþ…]sþû´ÿ ãôÂxÿ ô*ëŸ÷ݧÿ  ¹?ˆú¶›§ø\·½Ô--§»Ó.’Ú9¦Ti›Ê#	Ë°£Ö£ÿ „ñÿ èU×?ï»Oþ?\§Äk£ã¯\iáf+µužÒY×jJ¹ÆqqЩeèq»8$
+ õ;û=NÎ;˸.ídÎÉ H‚AÃ#ð«çúˆí¼=¡Ùi×ÖÒ%‰2llufÄà'$œrI5¡ÿ 	ãÿ Ы®ßvŸü~€;
++ÿ „ñÿ èU×?ï»Oþ?J¾=›ÃZÜ1g琋w½ÎÔ™™±×
+¤žÀž(¯¢³tK×RC§Ý¬¯<Ø]Z9bÎvtÎ	€ÈädV• QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE gkÚ¨ÐôíLÆ&kxYã‡~Ó4˜ù#æfÂŽ	%†é\E´–Öÿ é››Éû›–\4òàävè  £ ]Äùÿ î!aÿ ¥ÖE QE QE QE QE QÔ丱‡ûZÁ$kë f"iažùÛÐàí`*פÁ<7Vñ\[ËÐJã’6®¤dGÎk„­ÿ É<ð×ý‚­ôRÐAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñþE?ûˆXéd5‘Zÿ äSÿ ¸…‡þ–CY QE Q\­ÏŽ-­´MZù¬å3é÷À¶¡†éö3 ëßaäœqåÉ×a­Qâ=4ÂÒ¸VVä=¤«3	b+½
+Ç ò7÷N 5h¬âÍ=uY¬šÈ–ðÏÐÃ$¢3	µNÿ •w|¤änþãbüz֝-üV1]$·B·¬`°h›v#¿)Î2TueÈú(¢€
+ßð'ü“Ï
+Ø*×ÿ E-`Vÿ ?äžxkþÁV¿ú)h ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š(—øƒÿ "ŸýÄ,?ô²È­ˆ?ò)ÿ ÜBÃÿ K!¬Š (¢¸ýSûþ+¿íŸ²yßÙößeó1çîó'Ï“Ÿ~vãg͝¸çfçÁÑÜ[ÜÆnP4ÐßG¼À	
+q#2·^LbIz‰¦H0ÅභK•ŽæÊAp¨“-Æž$[€„”ioÞIó¹gK0CÀR›¸Õµ™´
+[OÕoœJÚMÇž’¼>tW ˜ö$`*È¥r\².å+ƒVoµÉæÓõë6Ô¾Ùe.—wå¼òDe©ò|±ÆD‰æ:ä±tPÃh Ú‡ƒ~ÛsyÂAoJš…·Ú|LjJ¡äù—vVgÈàî
+Ùàƒ±§é	§Þ´ñ˹
+½¢§–«ƒòàsæt Ž=©x“U‚iŸ©½ÙHDÈÍC—mÖ„ylþg	¶‰0Ϲò®x‡ÄZµþt«ûy¡•cŠ&Ák‚JF'ÏËFÆH-@Í› \\Ýh–ó]ËÒ¶áæÂIWPÄ+Uwe@;‚…9ʍ¤V• ¿àOù'žÿ °U¯þŠZÀ­ÿ É<ð×ý‚­ôRÐAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñþE?ûˆXéd5‘Zÿ äSÿ ¸…‡þ–CY QE QE QE QE Vÿ ?äžxkþÁV¿ú)k·ü	ÿ $óÃ_ö
+µÿ ÑK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@׏£-à«éÁlÚés¤ÎûEc tÆHëXµßמê\Þ‘£ŠÖêçJ‘Ù­¥³Ìöù%¼“`ƒ'c´(
+pUK€>ŠÇÿ „³Ãô0i_øøÑÿ 	g†ÿ è`Ò¿ð6?ñ 
+Š+þÏ
+ÿ ÐÁ¥àlãGü%žÿ ¡ƒJÿ ÀØÿ Æ€6(¬øK<7ÿ C•ÿ ±ÿ ð–xoþ†
++ÿ cÿ  Ø¢±ÿ á,ðßýWþÇþ4«â¯ÈÁ!Ö¬'•Ž(.IöUE%™@ $ž ^ÔocÓ4Ë»ù•Ú+h^gbª¤œg¿ÚxkM›F𮑥Ü4m=•”6ò4d•,ˆ‘2=sz‘6µ}m¨ÝÁ5¾i/›7´r\Jž7 ª!9€bê¬6…RýÅ QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE ÿÙ
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.htm
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.htm	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.htm	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>Slide 2</title>
+</head>
+<body text=#000000 bgcolor=#FFFFFF link=#000080 vlink=#800000 alink=#000080>
+<center>
+<a href="img0.htm"><img src="first1.gif" border=0 alt="First page"></a> <a href="img0.htm"><img src="prev1.gif" border=0 alt="Back"></a> <a href="img2.htm"><img src="next1.gif" border=0 alt="Continue"></a> <a href="img2.htm"><img src="last1.gif" border=0 alt="Last page"></a> <a href="standards.htm"><img src="index.gif" border=0 alt="Overview"></a> </center><br>
+<center><img src="img1.jpg"></center>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.jpg
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.jpg	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img1.jpg	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,430 @@
+ÿØÿà JFIF      ÿÛ C 		
+
+ $.' ",#(7),01444'9=82<.342ÿÛ C			
+
+2!!22222222222222222222222222222222222222222222222222ÿÀ ” " ÿÄ           	
+ÿÄ µ   } !1AQa"q2‘¡#B±ÁRÑð$3br‚	
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ        	
+ÿÄ µ  w !1AQaq"2B‘¡±Á	#3RðbrÑ
+$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ   ? ÷ú(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€9ÿ øNüÿ C^‡ÿ ƒøªØ±¿³Ôìã¼°»‚îÖLìš	ˆØ$0àà‚?
+ù³á5þƒká[¤Õ>j^"œÞ¹[»].Õb|…ØärqþÐ=ëÖüE®jž𾋫øoðC G¶mRÃì¾]ͬUؤJʪ˗ݜàOˆ ô
++‡ð_‹µ뚝õµœø>?Ýi÷rDñÏu Ú€-ƒ!ùÀ<¨êOÆüMáMRþIãðÄvv·«zcÝ´š„ñp|ÌFJÆrÀ¸xÀÉEy>µñ7ÄxÓÚ/†4ˈuÍ)/¡Û‘ã.$ ³+cj…Ê'É—gñ;Ç×Öþ(·‡Iðÿ Úü4ò½õÛI(€¤aÇ–‘çyrcr00@$í”Wëµ‹?ƒÚŒlì,VúþïìÓC0wŒcÍˆdÄœŽzÖ‚xóÅš'ŽtM+Åú^•g¦ë»–Ñ­$y$‚\±HyÀ²)!BåÃÀ"€=ÏVÓu‹«{-BÒæ{GÙs3+´-’0à©Ê‘ƒè}*åx?‚¼CoáMkâþ¹t»ã´Ô7„Éc™®&@8ÜÅFqÆrx­Mâö¯s¬è­ªÅá÷Óu«³Ãm¦Þ‰ol™ØŒê[× c¾Ó„ ÉXpxÓ·W[Ûø—Fšy\$qÇ3±8  Ù$ž1QøãA¼ñ?‚õMÂ÷ìWWqlI‰ pA*Øçk TõᏡðGµÑtÚxgâÃû½"tŒø‹NPìÒ“¸ø`À¡bÀ3ýÓµ P¦è¯7ñŒ¯<	§xB{9 ¾ðõıÚßjwlgÇ„+ da½™­¸+@õ –?ï.|iã(
+´xkÃv$“„NfP&€<¤à`òŽy€zEáúwŏêðXêt~
+ž;Ë¿-4c¨ùWê›Ê…>cªî8 w)ÛŽÂIÿ 
+!¢ÿ ee}»û<ÿ gý«Ìòü¿.mþnÞwgÍÆÞ1³Þ€=âŠñÿ |ZÕžá³áËxôË-Æ·{äýªP ò¢RS:ä’§ –PFMkã©ý™àCÃú4ÂC,±Igtø}é"G±$e™€f± r(Ø(¯±ñçÄKŸjžþËðäºÍ´I0»I&KhS
+ÌX»ä:(Û·äätê>xÞóǾ“S¿µ‚Þê·¶q;
+¬I8Ééžø eæ­¦é÷¶÷º…¥´÷o²Ú9¦Ti› a9c–ÔzÕ‰ç†ÖÞ[‹‰c†¼’HÁU’Ià 9Íxí	
+õγàˆ4³ Ô$¸-Lrla)ha²6Øç#câŽnuGöT±C^·w¹HƒÇ¶(#g»ØI
+É´‚Nå$
+ÙÍ {%ýž§gå…Üv²gdÐH$FÁ á‡øUŠð¿
+øâo|ð…¦›cþµ«Ü\ZØÛI!EÝçÈ7“Œ£I\îê0MvŽ5è<x¾ñ…Ž›¡qnn¬î´éÅ:÷6°$–RYŠýÌcH O<6¶òÜ\K0D…ä’F
+¨ d’O Îj;û=NÎ;˸.ídÎÉ H‚AÃ#ð¯Ô¼yâÏxgÆWÚ.—¥Ká;h®m#¥Ì©åÒ.xùC,…YWƒ´ÜÕ|@ÿ „à‡…ÚޝOQ–æXî&ò£\M&dv?.ÕfL‚ːÙÈÁ Ý'žn.%Ž"BòI#TP2I'€ ç5ýž§gå…Üv²gdÐH$FÁ á‡øW‘ÿ Â}®h>4ðæ°Ú5Íä:Íä7ºǝk$^^Ò§,Y\3wê; n“à—ü’þÞ?ô¢J ô
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+¯o}ow=Ü0I¾KID3¤lr‹ õù]O¾¹«Ïø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@7à¯|Mð6—¥Ïá –á®®žå˜1U\
+ª£AÛÖ·<]áxÛÚ&‘©ÞiVÑ›¿7Zû³ ’5‘bܧ?)$‡ÞªG½"Š àüà­KÁþ1ñÚOh</¨¸¸·´Þdq¨"§.8ÉÂF;à×àÏ‹A×ô‡Ô49ÛP”Ìš›«ý®àù±¶Éœ£\ª’|À>b3Ÿx¢€<¯Iøs¯[xßÁºíܺjÁ¡èë§\Gîìì©*LÆ:œc‘Î2i5‹øYm͉ÿ „ŸÎû×Ýïóñæ|¼­^›ºÇÔ( ž>%xnóÂ? |=¡ßÉ—Vº©Þð1(w‡$чjíÓÀ~,Öüs¢j¾/Õ4«Í7BÜÖ‹iÇ$òäm–AÀV%QˆW(.	5èš–“¦ë6ëoªiö—Ð+‡Xî¡YT6ÈÎ	÷5r€<¯NøSrçâ
+¾¯qhm<KqçZ´,ìБ$®Œãʳ¡À$¤Ž´ü;ð³ÄZf­¥-ÌÞŽÃK”:]Ûhñ½å⬊THY?vÛAùÑ·ÉÜ~jö
+(ƇƿÐg¸’Ý.Ñ@™ %X:œ£rŒŽ23Èë^gsà‰š¯‚ìü¨jþH‹ÊŠYáYZv…*¸(íÂãIØ2Ü’}¢Š ó¿ˆÚƒgðrãF¿ºŽ(,l•4ù.dE‘¦†2c
+HÁvT… Xf«ü'ðÕݏÃ'¼ûD–úö¼’^K0IÜ3ƒå9þø
+Uö±<»g z¥¤éºÍºÛêš}¥ô
+áÖ;¨VU
+‚23‚F}Í\ ¸øEâŸ}’ÓÄÇ‘Cö³s{©é–¥/î3¸•-媖ëŽÁŽâ0zx#Ä—ßtxjëJV6l`Ô„9óì $äJÜq£®p="Š ñÿ |%Õž±á±áˈõ}Í-¾·eç}–Róbb,X»`€£ `.j5y¦ðƒPÓeO^½ÅÓ‹ah$Vš91Q)@p¤u<÷5ê”P¥x+R±øË®xÂYíŸd¶ñF®Þh`!a·ýÛt'¨ü„Þ
+Ô¼á[­/TžÒiå½{…kWfP¥pw*œåoJï( Ç~
+Ô¼Qâ¯j–SÚG‹zn.Vg`λâl&‚qêGQXéðšh/üTñ]Æöw6Wú
+¤²ƒ\!óˆM˜ˆn 
+ŸÀH95ê”P‘„z“|<ðÖšº•¥¯‰<?q-Õ¥Ú+K摤	ƒŽyD±VÆÓ€A9ØÐ<¯OãÅñŸŒ/´Ùµ{skgk§Fâ(¿¹ˆ$üÒ‚¬ïç< =Š ñ¸þøËF²ñ'‡|;«hÖþÕžW‰gŽFž é,pFbX…€
+ÅI7ÁËËφ~Ñf½±‹]Ñ%šh'1™à}îïå²° ©>^IFÆÒ0A9ö
+(Êô¯‡:úYxï›ÃsêZdöözFš°ÅtPÍ´KŒƒ•;‡9 gÿ
+ÞxGÀšn‡$]Zù»Þ%é]Æ	 ôaÚºŠ( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++xVêâ+{èÓO+„Ž8ïâfv'  $“Æ+r€
+(¢€
+(¢€
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š£þ¿ÿ Ðסÿ àÆþ*€:
++Ÿÿ „ïÁÿ ô5èø1‡ÿ Š®‚€
+(¢€
+(¢€
+çü=ÿ !ÏØV?ý"µ®‚¹ÿ ÈsÅŸöÿ H­h ¢Š(çÿ È·¥ÿ פ_ú ­Îðÿ ü‹z_ýzEÿ  
+ѯ¸¥ü8ú#òÜGñeêÿ 0¢Š+C ¢Š( ¢›$‰o$Ž©ÌÌp¤ŸJl×Û&ùæŽ%9åØ(àzû~€Òm!¤ÞÄ”QM2 ‘c.¢F‚ç’2qè2?1@‡QMy%
+#ª)!AcŽIÀRH:€
+(¦É"CÉ#ªF€³3©'Ò€ÜuSc‘&$ÕãpYNCЃé@¢šÒ"2+º«9Ú€œn8'Ôàø$‘!ä‘Õ#@Y™ŽÔ“éEÇf:Š(¦ ¢Š( ¢Š(¿óÒì+cÿ ¥1W¼Wƒÿ ÌCIÿ °­þ”Å^ñ_3œÿ z~¬ûnÿ t—øŸä‚Š(¯$ú¢Š(çÿ È·¥ÿ פ_ú ­Îðÿ ü‹z_ýzEÿ  
+ѯ¸¥ü8ú#òÜGñeêÿ 0¢Š+C ¢Š( ¢ŠŒÜB!yŒÑùI»{îWi!²{c>˜¥q¤ÞÄ”QMYÙÕYípvœƒèpAüEE4H†FŒ:™+ž@9ÁÇ¡Áü:€
+(¦´ˆŒŠîªÎv 'Ž	Àõ8þ€E5äH”4Ž¨¤…Ž9' }I ~4ê (¦‰ÈчS"€ÅsÈ88ô8?‘¡¤DdWuVsµ8ÜpN©À'ð4\vc¨¢Šb
+(¢€
+(¢€3¼Aÿ "Þ©ÿ ^’ÿ 辇¯ž<Aÿ "Þ©ÿ ^’ÿ 辇¯Î¿‰CìxgøU=WäQEx§ÓQ@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQEóLJÿ ä[Òÿ ëÒ/ý VgxþE½/þ½"ÿ Ðh×ÜRþ}ùn#ø²õ˜QE¡QEâùõOúô—ÿ @5ƒâ¸/Κ‚òêÞHÿ |@‚‰·iˆçÌ9r;ý8=}…Z
+¥î÷±Õ‡Å:-YmÅ[äsÒKöÒlõ……!±XŠJH’fBÿ 6w½ÎAàœ–ÆYŸPµ ù²G
+üQùŽy	<j ¶	è Ï'¿&º*){{ßú½ÿ à
+â—-¹«[þ	Ïë~|ºNíM!µŠ;«fßãôóT1cµ0 >þ¼
+dÞÞށ©0ºXî#{Õnä2ˆÕdòÏ“·lcˆÈ|ŒñÎ_žÚŠš˜w'~b©c#ò¸_çéëÛú±ÎÀ÷0k+½¸•øÛm‚
+›o4“Ô¾°\ƒ“tϦߪÞ\Kp^ù&…ܐ6Ò¦ÝÁþyùs”w
+­ªZBÑÆX«I$‡w«¹cøe)aÛÒúkúdcï8ê­úë·™Îk7e5FA;DË$JÛïZ&¾c$J0Ⱦ\œ©r6
+«
+À‹@ÐU.#mhL-ûÛ¯š6a|ÕÉÈ̃gN÷F;:)ËÜœ¹·òó¸GÂ1åÛÏɯ–÷9ÙÙ%ÿ „uï.³qʤ̲4cÌ01Á^0IÛÁ ᱌1&þéŸM¿U¼¸–à½òM¹! m¤/M»‚
+üóòç(î*´…£Œ±V’IïWrÇðËRù=÷ÿ çäñ‘Š¿.ßð_o2j(¢ºÎ ¢Š( ¢Š(¿óÒì+cÿ ¥1W¼Wƒÿ ÌCIÿ °­þ”Å^ñ_3œÿ z~¬ûnÿ t—øŸä‚Š(¯$ú¢Š(çÿ È·¥ÿ פ_ú ­Îðÿ ü‹z_ýzEÿ  
+ѯ¸¥ü8ú#òÜGñeêÿ 0¢Š+C ¢Š( ®~ä¡»¸¹
+ßÙéu¹ù¾ô‹´y€ã„Bw#ý[tÚÁú
++:çV5¥WÙ¶íý_qÇ\OyS%ýÐ"=Bp»Á Ã6#>èÜN;ðT­›vºK­\ÚC²}µr²Êcò"ç![ž«bŠÎ4_ÅýZÆÓÅ)+r÷üÓém­c˜™®"Ôµ‰—äÕ–¯1LҍÀÊU g¢÷ŽkÛI5ÍÝ´1_âÒK•Sö[ù.2|©‹+Œá>Pr¸m$ëè©ú»º×ú¹k¬×.¶¶ûioøo™ÉC{xt
+BY.æy[GŽïy ‘Ò\•ÀGʸÓ=I&H¦k–IÌ×Âtbò±$La¸Þ~ë`&S .z×Gyj—¶W’ÏFÅz€ÃüÔÔ,<®®ö·æÇ,\•£kßå¢]Žòò9š=ÛGlÒDÓoÔ\ȲyÑ`H¼\)”ì^R€¯ssuÿ 	‘yñÆâæ!
+µÓ«4XBû`
+Cƒ™óÓžFÎ:z),3_k·O_ó±±v\ú÷·ù[ÓC–Ôe….õË«k¦óŸGYbdœò?{ó(Î00¼Ž™ÿ häŠa&¹d\Íql'F/+Dƍàçî¶e0ç Ítw–©{eqi!añ´lW¨0qïÍMOØ>kßÏñlŸ­Ç’ÖÖÖßÉ.ÁEWQÂQE QE gxƒþE½Sþ½%ÿ Ð
+}_<xƒþE½Sþ½%ÿ Ð
+}_;>‡ØðÏðªz¯È(¢ŠñO¦
+(¢€
+çü=ÿ !ÏØV?ý"µ®‚¹ÿ ÈsÅŸöÿ H­h ¢Š(çÿ È·¥ÿ פ_ú ­õoøA<ÿ B¦‡ÿ ‚èøš?áðý
+šþ¡ÿ âk܆sËM¼ÿ à-S†¹æåíwþïüÊh¯Vÿ „Áÿ ô*hø.‡ÿ ‰£þOÿ Щ¡ÿ àºþ&«ûoþþ?ðÿ V?éïþKÿ òš+Õ¿áðý
+šþ¡ÿ âhÿ „Áÿ ô*hø.‡ÿ ‰£ûoþþ?ðýXÿ §¿ù/üÊh¯Vÿ „Áÿ ô*hø.‡ÿ ‰£þOÿ Щ¡ÿ àºþ&í¿úwøÿ Àõcþžÿ ä¿ðO)¢½[þOÿ Щ¡ÿ àºþ&øA<ÿ B¦‡ÿ ‚èøš?¶ÿ éßãÿ  ?Տú{ÿ ’ÿ Á<¦ŠõoøA<ÿ B¦‡ÿ ‚èøš?áðý
+šþ¡ÿ âhþÛÿ §ü ÿ V?éïþKÿ òš+º×üá].âÃYѾÇnæèþÁÁ…GœFÐ3*1f8XÌÇ“ŠÜÿ „Áÿ ô*hø.‡ÿ ‰£ûoþþ?ðýXÿ §¿ù/üÊh¯Vÿ „Áÿ ô*hø.‡ÿ ‰£þOÿ Щ¡ÿ àºþ&í¿úwøÿ Àõcþžÿ ä¿ðO)¢½[þOÿ Щ¡ÿ àºþ&øA<ÿ B¦‡ÿ ‚èøš?¶ÿ éßãÿ  ?Տú{ÿ ’ÿ Á<¦ŠõoøA<ÿ B¦‡ÿ ‚èøš?áðý
+šþ¡ÿ âhþÛÿ §ü ÿ V?éïþKÿ òš+Õ¿áðý
+šþ¡ÿ âhÿ „Áÿ ô*hø.‡ÿ ‰£ûoþþ?ðýXÿ §¿ù/üÊh¯Vÿ „Áÿ ô*hø.‡ÿ ‰£þOÿ Щ¡ÿ àºþ&í¿úwøÿ Àõcþžÿ ä¿ðO'ÿ ˜†“ÿ a[ý)Š½â°àð_…mn"¸·ð֍ñ8xäŽÂ%d`r!r<æ·+ÌÆb¾³QNÖÒǹ–à>£IÓæ滾Öè¼ß`¢Š+ôŠ( ž<?ÿ "Þ—ÿ ^‘è´kÕ¿áðý
+šþ¡ÿ âhÿ „Áÿ ô*hø.‡ÿ ‰¯rÏ,Ty6óÿ €|µNç›—µßû¿ðO)¢½[þOÿ Щ¡ÿ àºþ&øA<ÿ B¦‡ÿ ‚èøš¯í¿úwøÿ À#ýXÿ §¿ù/üÊh¯Vÿ „Áÿ ô*hø.‡ÿ ‰£þOÿ Щ¡ÿ àºþ&í¿úwøÿ Àõcþžÿ ä¿ðO)¢½[þOÿ Щ¡ÿ àºþ&øA<ÿ B¦‡ÿ ‚èøš?¶ÿ éßãÿ  ?Տú{ÿ ’ÿ Á<¦ŠõoøA<ÿ B¦‡ÿ ‚èøš?áðý
+šþ¡ÿ âhþÛÿ §ü ÿ V?éïþKÿ òš+Õ¿áðý
+šþ¡ÿ âhÿ „Áÿ ô*hø.‡ÿ ‰£ûoþþ?ðýXÿ §¿ù/üÊh®ë@ð_…uK‹ýdøkFûÈlcû[1–pHÌŒÎÁ”ᣞksþOÿ Щ¡ÿ àºþ&í¿úwøÿ Àõcþžÿ ä¿ðO)¢½[þOÿ Щ¡ÿ àºþ&øA<ÿ B¦‡ÿ ‚èøš?¶ÿ éßãÿ  ?Տú{ÿ ’ÿ Á<¦ŠõoøA<ÿ B¦‡ÿ ‚èøš?áðý
+šþ¡ÿ âhþÛÿ §ü ÿ V?éïþKÿ òš+Õ¿áðý
+šþ¡ÿ âhÿ „Áÿ ô*hø.‡ÿ ‰£ûoþþ?ðýXÿ §¿ù/üÊh¯Vÿ „Áÿ ô*hø.‡ÿ ‰£þOÿ Щ¡ÿ àºþ&í¿úwøÿ Àõcþžÿ ä¿ðO)¢½[þOÿ Щ¡ÿ àºþ&øA<ÿ B¦‡ÿ ‚èøš?¶ÿ éßãÿ  ?Տú{ÿ ’ÿ Á<cÄò-êŸõé/þ€kèzçÿ áðý
+šþ¡ÿ âk ¯;ŒúÔ”¹mo3ÙË2ï¨ÂQææ¿•¿VQEq˜QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@÷z͝Ž­k§\¿—%ÔO,r9>Y"i$ýæiÐß댖úîwö?³j¶3}»Ù<»„o´lûû0~m½ñœw¬?xRoj{âÑí!M—Üd‰ív“ŒAKyr£¡$S›Á×òx¾÷T_°ˆ.õ{¯7|‚DH£„mxñåÍ“ݏ$±‘Ic… ÔÓ<_á_£ØA©é·O;ÏnlžxæTfV>Xc¹T°õR
+gé~/ÓtŸ
+ꯩÇv<>€K:β=Ä,‚KwÜXoy#d8
+&ð¼b³åðwˆd“kMhÖðêr_[F·óF ‹ÆºR詇/”Œ†Ü"Ù½w+Yzçƒo4?	iki•Ááùô]ReR§÷ˆ
+?v’†‘Ùº#HØ$š ô
+?Å:&¥-¼6ú¥‹\\ù†Þ»‰ÞtFuށXîS±0rôoè:êDlu;Gy®'·†?=ÊбP;†Ü8Ç𲓌×.Þñ°ZùÓZëêfKù’(eûkÝò 8Éu^Âê’(´ð ¾!{Û±hð5é™vß\(D[É®£f‰B¬ŽLÛpçP0/¸¥ w–·öwÞØîà¸ò%h&òdåÈ¿yddEX®oÂú΍q{-ÂÚF’¤Pų;¨XËüË¿˜ï`’=§i;šºJ (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š ǏÅ;jwºt·Ð[ÝZ]ÅfÑÏ*!’IcY#3“¸1¹(Øjþ(Ñô];V¼¹¾¿²¢Ýèd#(¥Igè ãq#ËÝx
+òãZø¨æÄÉâ
+=,ìdbwňníùT¶Ãòç;FF@«ƒ¯ïá"X¾Ãßi÷–°my
+»Ï‚£ Á?–OšÍ½€* t–^%Ðu$‘ì5½6é#xÑÚ¤p¬íµÁà³psÀ®oÄ~5Ó.%Òô/T‚Y5ÝÑ‹ËKèTÁá<dÈ»¤,J¦ÜUØ)±²õŸj·÷gSÖæÓZÝZóíWò<ÛíÜ:ˆÙ<´­¸‹€ —r¤m5×Á:®¯â¡âøìí-R¸‚Y⹞Ež+hÞÊXÕ“f£ìÒ†^ 2¹¶Ðhþ(ðÞ™á+­^ÊúÆm#Lˆ©û±².Õb\¡ŽT*ä}åëBwG¸ŠæXu[#µ‰g¸t¸B"—z»~U+óx#ž•Ç§ƒ5¶Ó¼K
+ÍÔÝjúSX‰nå“|ª$.Ö\D®frbO–=ƒníÇigà{èžþââ.%óäÌ¿¹‘KMp·ˆ>U·ÚÊJŠX°I0¥J0yðÝ[Åqo,sA*ŽHØ2º‘AG9©+/ÃÚlÚN‰
+¥ÃFÒ‡’FØKÞìûw„nÁ‘†ç ³rƵ( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
+(¢€
++Ïõ¯ˆš†â-GK´Ð­n#²‘#3K¨4EËD’}Ñ`|àuíTÿ ágk_ô-XàÙÿ ùºaƒ¯8©F-¦qTÌp´äá9¤Ñé”W™ÿ ÂÎÖ¿èZ°ÿ Á³ÿ ò=𳵯ú¬?ðlÿ üUõOò2?µ°_óñ™EyŸü,íkþ…«ü?ÿ #Ñÿ ;Zÿ ¡jÃÿ Ïÿ Èô}CüŒ?µ°_óñ™EyŸü,íkþ…«ü?ÿ #Ñÿ ;Zÿ ¡jÃÿ Ïÿ Èô}CüŒ?µ°_óñ™EyŸü,íkþ…«ü?ÿ #Ñÿ ;Zÿ ¡jÃÿ Ïÿ Èô}CüŒ?µ°_óñ™QÏ7VòÛÜEÐJ…$ŽE®¤`‚Æ+Íÿ ágk_ô-XàÙÿ ùøYÚ×ýVø6þG£êŸäaý­‚ÿ Ÿˆé<3®[­äÞº¿óõ3r0w/$°(ŒÇ+·v)4A‰Æ\I´+¨¯Ò¯…ãY<I£øOL±3Ù5¤ÖpjL±1ÜŒ@·Âœ& ðr[¬ÿ …­еaÿ ƒgÿ äz>¡‰þFÚØ/ùøL¢¼Ïþvµÿ BÕ‡þ
+Ÿÿ ‘èÿ …­еaÿ ƒgÿ äz>¡‰þFÚØ/ùøL¢¼Ïþvµÿ BÕ‡þ
+Ÿÿ ‘èÿ …­еaÿ ƒgÿ äz>¡‰þFÚØ/ùøL¢¼Ïþvµÿ BÕ‡þ
+Ÿÿ ‘èÿ …­еaÿ ƒgÿ äz>¡‰þFÚØ/ùøL¢¼Ïþvµÿ BÕ‡þ
+Ÿÿ ‘èÿ …­еaÿ ƒgÿ äz>¡‰þFÚØ/ùøL¢¼Ïþvµÿ BÕ‡þ
+Ÿÿ ‘èÿ …­еaÿ ƒgÿ äz>¡‰þFÚØ/ùøL¢¼Ïþvµÿ BÕ‡þ
+Ÿÿ ‘룽ñƒÛ|<³ñLzzÉ%Ô6’-£O´;F Úxg]¼ã¥eSV›JqµÍèã(VMÓ’vÜêh¯3ÿ …­еaÿ ƒgÿ äz?ágk_ô-XàÙÿ ùµú†'ù‡ö¶þ~#Ó(¯3ÿ …­еaÿ ƒgÿ äz?ágk_ô-XàÙÿ ù¨b‘‡ö¶þ~#Ó(¯3ÿ …­еaÿ ƒgÿ äz?ágk_ô-XàÙÿ ù¨b‘‡ö¶þ~#Ó(¯3ÿ …­еaÿ ƒgÿ äz?ágk_ô-XàÙÿ ù¨b‘‡ö¶þ~#Ó(¯3ÿ …­еaÿ ƒgÿ äz?ágk_ô-XàÙÿ ù¨b‘‡ö¶þ~#Ó(¯3ÿ …­еaÿ ƒgÿ äz?ágk_ô-XàÙÿ ù¨b‘‡ö¶þ~#bëÄzG‹µ•ð¶›}æ+‰µ£ÁR±@È"ä<‚œ3œWi_=øcÍð÷‹uËáûÝNþîiáwԝEªHÄ•Qä·$î8 e³ÜÂÎÖ¿èZ°ÿ Á³ÿ ò=PÄÿ #ílüüG¦Q^gÿ ;Zÿ ¡jÃÿ Ïÿ ÈôÂÎÖ¿èZ°ÿ Á³ÿ ò=PÄÿ #ílüüG¦Q^gÿ ;Zÿ ¡jÃÿ Ïÿ ÈôÂÎÖ¿èZ°ÿ Á³ÿ ò=PÄÿ #ílüüG¦Q^gÿ ;Zÿ ¡jÃÿ Ïÿ ÈôÂÎÖ¿èZ°ÿ Á³ÿ ò=PÄÿ #ílüüG¦Q^gÿ ;Zÿ ¡jÃÿ Ïÿ ÈôÂÎÖ¿èZ°ÿ Á³ÿ ò=PÄÿ #ílüüG¦Q^gÿ ;Zÿ ¡jÃÿ Ïÿ ÈôÂÎÖ¿èZ°ÿ Á³ÿ ò=PÄÿ #ílüüG¦Q\O…üu{¯x‡û&óG·³Ýi%ÊË
+é›;5*A1þ°äô®Ú¹êS•9rÍY”ªÂ´黦QEA QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@+âù¼Kÿ _qé,N®xƒþG¯ÿ ×Ü_úKS¯°À»CÐüã6ÿ }©êQEvxQE QEfMª<z‰ŒF¦Ò9	¥Ï+#Œ¨Ç Ìc¡ÏšFÓ˜”Ôw.å6ÔM:+
+lÝk1ZCk7EÂÉ+¨xÝWŽy^z€~òú6!Òu˝F)®ZÚAIª,C|Îê¬У8< A-Ôöð½—õÔ×êµmôý]¿3zŠÎþ؏Êÿ k´ùÞGÙ~MûöïÆwmûŸ6wcuâ¨\x†hngjÖðB-‹Ipíß1GÏÍÐ pz|¤ä‚¹%^Ý„0µdì—õ{Ïê>%Š5˜é³ZÞ˜¬¦¸aŠûY
+Î|¿3ÜãClëЬínÖ—beqÁ9 p€ƒŒàœœàm9 IíéÞתVåNßÒ5hªê"âöÉ *ö×V²\+à‚pcÛôsÔzUkÝlÃe}5½¬Ì°G1ŽvPbi#
+• ÀeHÉ pyn¬½ÉŽ£i[ó·èlQT§ÔVÞäFö×VõŒÜm±G'qÉe ŒžOǬÃ%“]nga‹(?|á
+œãæ$ÈÜ §í"®%F£WKúfyð¬ž\‘“REÃ)ñ¨$sRU§}LÚ³³
+(¢˜‚Š( ºKþH…ÿ ^ºGþ·®^ºKþH…ÿ ^ºGþ·¯6þ%/WúMÃÿ ÂÄz/ÊG/EW´|ÈQE QE QU/îžÞ8’¦âyQé“’Iõ
+¡›ی䊪šâ´vª,î$¹$&pÛ6"–$	#' ãƒÈ7R)ٚƌ乒þ¿ËG¯“5h®nOÝ.•¦N,Ù®o`
+媮‹F¡²\|¹azœŒ•Á5ªú‰¶’8® ™—)—*bó  nÁ$<ž&5àÿ ĹajG?ÃOë¿Bý‡s¯È¶q\Zé×N’ɉØ&Ù#wQ¸|Ü`6Xq€Ø·w¨Mg4Ñ´itÐ.Gšø9Œžpx'œaÓöÐÕªOµ¿ÏóìhÑYVœÒê÷šuÊǺ
+¾T¨á¿Ë“Œ¿FpMVÐuÙµOS…¡-íü¦·+’ÎŽ¤†?PÆÁæ’¯¥Õ¶¾á¼-EK¢Iü­ù›ÔUkËųHÿ u$²Jû#Š<nvÁlH…'’:zàU5Õå7’Ä,®l12¨›Ù¤	$(ËëœÄäfH§fDhÎK™mý#VŠÎþÙ„Ç	Hn$y7–ŒFÛd$g¬@ÂäŸá¦¶¿K©äŽ8¦…•e+ò9VÚÀðCqÈ䌀M5R-Ù1:3Jí袊³0¢Š( ¢Š(oÀòPáÿ °U×þ¶¯[¯$ðü”8ìuÿ £m«Öëä³?÷©ü¿$~ƒ‘ÿ ¸Sùÿ éL(¢Šà=`¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
+(¢€<WÄò=x—þ¾âÿ ÒX*\ñü^%ÿ ¯¸¿ô–
+§_a€ÿ v‡¡ùÆmþûSÔ(¢Šì<ð¢Š( ¬y|=k5½Éu…¯¥22^´ ËbJzå r>èÆ+bŠ‰B3ø‘¥:³§ð;–úSÛ^A:\)XÍÎõ1ýá4‚Lž ùç¥Ak }›HšÃí;üÏ+æ1ðvGa—<«y|ŒŒ†#Þ¶¨©ö0íýZß‘Y«ßòï͘vúÚ¦`šÖ)V´ Ž×lJûgä
+÷JÆs»'$	$Ñ®&¹3Kz®\A¿÷8ËE1c…ä®OC“Îv(¤¨SJÉ~cxª­Ý½}ùÚž•ý£¿÷Þ^ëIí~îqæmùºöÛÓ¾i±éN.’æK…iй`±íùQ“ü]ý=ëNŠ§J\ÍjJ¯QG‘=5_~æe¶”ö‹§yw
+ZÎ×ìÄ´|O^#>¿{¾0b›F¸’ÒòÉoU-.ØQ\4»‰ÜÙÁP\ Ï\ìQKØÂÖ°þ³R÷¿à½SûAûeùº[îÞ’#Ëo¾HÙ0T#îL¨%qÎ_‘»‰bÑÞ(oí–¹Æqn¡äºtfláÈÛ‘ŒmÆkVŠ^Æ涡õª¼ª7Ñy.…k_±YGo¿~Üò É'
+;(Î ì ªÍV©$¬Œe'&ä÷aESQE WQ©Éпë×Hÿ ѶõË×Q©Éпë×Hÿ ѶõâæßÄ¥êÿ Cé¸øXEùHå袊ö™
+(¢€
+(¢€)^i°ßÜÂ÷IÐFŽ uf%pØ<d çñÆM,õ´Bê(‘c·Hö¬aÄY f2zusøéÑYºPníjj«ÔQåOMŒ4ðûý›LŠKµf±c±cxY"qÆト€üsíN¾Ð~Ù~n„–û·¤ˆòÛï’6Lû†*	\s—änãjŠŸaM«[úE¬]dîŸ~‹®¬ÅþÆ»|vKŠßÊãìùÀÕ—Íó6ŽO1nãKK¹.^y™cDT`Â;”œá÷`äcî§.Mú)ª0Úß×ôÉxŠÞÿ ‚òÿ #m]C:ÜÌ®óγ1T*?Õ,N nèÈu㨚º=í¾³¨jwÖéöß/ts[Û±vŒëï[TRt)·{yþæÊXª©ZúZÛ-´ÿ $R¼³šäÇ"OKÞl¢,£ä(C
+ÃwÞn„vô9¥s¡Ëtï,×qË#¤jË,¢r¦C†LŒ¯ï8È(¤’kjŠr¥	nL1 ­ø#þò4èì–â‰$gmÀò÷“?#«ØÃŒÕÛ}8êOzÓ)2¸XÂÉ|¾WS€H9Îjý*0[!ËVI¦÷¿E×p¢Š+S ¢Š( ¢Š(oÀòPáÿ °U×þ¶¯[¯$ðü”8ìuÿ £m«Öëä³?÷©ü¿$~ƒ‘ÿ ¸Sùÿ éL(¢Šà=`¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
+(¢€<—Ä^ñøÃ[»´Ð.®ín§ŽH¦Š{u"CÃȤÈÝ«?þÿ Ыÿ 6Ÿüz½ªŠï¥™W§ÚËÈòkä¸ZõI§wæx¯ü#þ*ÿ ¡Vÿ ÿ m?øõðø«þ…[ÿ ü	´ÿ ãÕíTVŸÚØžëî2ÿ Wð]ŸÞx¯ü#þ*ÿ ¡Vÿ ÿ m?øõðø«þ…[ÿ ü	´ÿ ãÕíTQý­‰î¾àÿ Wð]ŸÞx¯ü#þ*ÿ ¡Vÿ ÿ m?øõðø«þ…[ÿ ü	´ÿ ãÕíTQý­‰î¾àÿ Wð]ŸÞx¯ü#þ*ÿ ¡Vÿ ÿ m?øõðø«þ…[ÿ ü	´ÿ ãÕíTQý­‰î¾àÿ Wð]ŸÞx¯ü#þ*ÿ ¡Vÿ ÿ m?øõðø«þ…[ÿ ü	´ÿ ãÕíTQý­‰î¾àÿ Wð]ŸÞxmî™â>šëÃ7ñÆÒÇ>}©ËÈë&îÌ£Û<ñV?áñWý
+·ÿ øiÿ ǫدìmõ=:æÂò?2Öê'†dÜFä`CŽFA=+?Ãw×Zt–·òyš–Ÿ)´»} yŽ “æ#G&ѝ»öç*hþÖÄ÷_p«ø.Ïï<·þÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzºÝK@ÕŸàÅdÒê–ÖÚrÉl² ;¢xYÀbÁr7|W{EsWÆU®âçÐìÂå´0±”ißÞß__ó<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª+§û[Ý}Çú¿‚ìþóÅáñWý
+·ÿ øiÿ Ǩÿ „Å_ô*ßÿ àM§ÿ ¯j¢ílOu÷ú¿‚ìþóÅáñWý
+·ÿ øiÿ Ǩÿ „Å_ô*ßÿ àM§ÿ ¯j¢ílOu÷ú¿‚ìþóÅáñWý
+·ÿ øiÿ Ǩÿ „Å_ô*ßÿ àM§ÿ ¯j¢ílOu÷ú¿‚ìþóÅáñWý
+·ÿ øiÿ Ǩÿ „Å_ô*ßÿ àM§ÿ ¯j¢ílOu÷ú¿‚ìþóÅáñWý
+·ÿ øiÿ Ǫ9ôoZÛËqqá«È`‰É$—vŠ¨ d’LØ s^Ý\ýÏüTš‹Y/ï4K}ézz-ÔÀ€!ø£_ŸÌÛS,©Gö¶'ºûƒý_Ávyæ0h¾'¹·Štðž¦D¢Im‘€#<«J
+ŸbêOøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<Wþÿ Ыÿ 6ŸüzøGüUÿ B­ÿ þÚñêöª(þÖÄ÷_p«ø.Ïï<ËÁ»iã%¿Ôtk‹TÓç‡|ÓB۝䄀r1èÖ½6Š+†µiV›©=Ùêa°ðÃÒT©ì¿áŠ(¬ÂŠ( Š( ¹ÿ ÈsÅŸöÿ H­k ®Ãßòñgý…cÿ Ò+Z ±câÏ
+êw‘ÙØxƒJ»º“;!‚ö9°	8Prp?…lWøfÏ^ÖþèZ\özm®Ÿ6™jìW¯%Äj#B®‘˜T,£ ©Þv6æÛƒauÍ^Ç@Ôuû­FKœjsiöÖ«h"S|mÒFTd®£øU—pq»ç åçã[×vÏc£ÿ njÌñ	~Ó}¦9 Ä±#ª"Š'c» #†ˆîÞŽOÍbÒ-vîú;«ˆ­Ì’X–ÔlY£žG-j©ÁXWËÝVg;‘BD¢¼ìkºÕΣ§èöWú’A5êFu;ý(Á,ˆÖ÷NñìxÑK¡…:®ô­µ·ž(:„~ñ¶‰>¯wt–ú¼K™£„Kó‹€Ñ‘ªl" >îo»´Ñ*9ç†ÖÞ[‹‰c†¼’HÁU’Ià 9ÍqwÓ]ZÞIb<Uâ;«¨°‹¥Á!,@`²ËösÈw¦5P9væå¼Ô57_ñ—ò,“x6ÒöK1/nÌñ]…]Š€,rX†,¸Pë”W?{-î©âôk]F}6;KHnž{dä”Êò¨_Þ#*¨òXŸ”’YpT)
+Ïø^÷^ñtúûÜkóéñ麬štiamÜbHñ2¤Ÿ+6YWªî ³»@=ŠÃðíåöµ£h:Ô×Ä—ZbMqk_+K"ÆáƒJ…ÃŒsüžnPEPEP\þ½ÿ FÏÄ)òÃú.¡Ž·sć§ú§Ãnc„§=MtðCuo-½ÄQͨRHäPÊêF ðAb€$¢°ü;<Ð$ºô²K}§"þöF.ÓÛ³:Ã+7w+œêä
+¥IÜ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*ž¥©C¦[¬’,’É#ˆà·ˆ$òHDœI$ f!A ž±}pò¦“¥É·Q›cI PE¬°Òœä 8Œw8û¥UÊèXØÛéÖqÚÚÇå™ ,I$–fc’ÌI$±$’I$“TôM6k;´ê
+º½Ê!¼™	+¸¹@"%%‚rNY™Ž¥ QE QE QE QE QE QE QE QE QE QE Ëéwözf¡ãËû¸--cÕcß4òÑsgjXð2HuÏø{þCž,ÿ °¬úEk@</&ÿ õž‡©A¨XØD–k43¤¿q ÌœnÆ	é×¥Ic“>˜ë$Öó\MrÛÛ¯$Í6U—J»eHÁ\)#5ÁÜYø’/ø2ÖÊ[ë'JD”Ci$²-ØŽ²+¦?å®|Óä‚1 û¸Ô¹Ó5¿Ü™$ÖVÒçXÏå]ÜG´ )µ€Aö… ºà“•'T€l\øjÉl.n5ZîæHÐ8ÔnÚ$kEÖPWj,j¢¹%NíŠr¨DðœΚëQ¾»Ô_Ëòõ	|¥š/~Í›P`Ë'U;ƒ²¶å;kÊõ9¼M¬ø;Ä18ñƾööÑÅÆÞ@/el×hѨڮUä;d naå
+嫸ÓcՍu{‘©C¥Þ%ÌRÛ¦ɸ]'g*¡ã0òBË*1.€7,|?a;iú¨Ô'ÔnQv—îñ±¸)#@J(_,$Ì@@£'w%˜µË­ÆúãS–éd•5+$±¹ˆ¶Ħ^0A>s‚séŒwó?Ùø’ÚßOÍ×-â‡OXÒÌÚI¼ µ¾{‡£ûU¿ƒä;
+u5ðn©Å}|ëæ‹5šI­$¹_,ÌÆhråÔ˜¹HBŠ #ð”‘<̾#ÖGÚ_}àS¦Ú,Ëd;1”ÀPF,i¿‚tË-
+téu›è­_O<ÒHðƒq	ß(ÄÇ€Êf!Jí,Hݾ¹ÿ ÙkZŽ¹¨_ë‡IŽ+©RTK»12²ˆÕžViU„‚ä€dß…í5Àñ£g¥É«A®Iª=Þ‘1Háe€[ƒlóS5a8˜œ(Àé4èÚdä“Øê“Ø_Á‹yç±13íÀqŠêëÆðÃ+¸o8 ;n4KÑ[S‡K|ù·b[”2ï1ÊbŒÇïneTrX–bå‰;«›m;UÔü}yous¬Ã£ï¸` žHcl6(uÁQ¿Ï#aRJÈ2Apx½>ÏÅ~d“	uË+»¿*êæF´¹—}ÛZZù{T: ýçځ|•Ú«"…€ëzUŸ‡ôí?ý>x¬t<Úþú`±˜Ô'ï$à
+Ê"ûÜ ýxÔ‚xn­â¸·–9 •Ç$l]HÈ Ž#œ×ŸëÚ
+î¯q¬És.³$i®éâÒÞ+‰baÍ¡•Ð!Œù„’HB…—kn'.Åõاû=úk‘è²K—P·²MnBL$‰f,òɉÌoˆ„pªíЬQ\™ˆÏŽc’òïR[Pˆ[n
+Ù—&IAn¯öÙ†Lƒå55Ëo}Žõ¿µ`Gv#±Ó$ûJ¡<|Â|¶ÞØ¡Øír¤ uW‘øj}z[ûÈæ—Ä_A¬[Ågæ³›qk²ÜͽOÜ&,à–€RÓyŒliQø•4ØÛ\»Öf¶kˆŽ¬–ö×IùSy‚&YWwÙò`È6™0é:¶›eosqw¨ZA«„¸’Y•V!HIÂ’ûÃÔUÊò?ézõþspÄ
+yk{+Ú•ÖTÿ ‰?™óÆܧ˽GÀöžûgöÕÿ Ûµ~ÕæÜyÞn~ÉåùÇìÛ7|»¼œªãïy¿>Ú ±âø—}—ĉÇö^ÿ µ{Ù¾<ïûçjKÀ,|£ïšè+ÊôkAqá—¸ÔµŸÞYYK(žff˜“ö”ïHâ!ýê±?3 2ï-^Úç^µ×/¼7<z•½­¾£%¡²…Ê}•®­ü 0ÞcŒ¸Û	‘º¢“€ë•_íö~GŸö¸<Ÿ7Èó<Á·ÌßåìÏ÷·ü¸ë»Žµæò?ˆ­ßD¹TÕQàØZB·SýªÜ\7˜A¶ÄÂÜe’Vó2ÆXçÜXku¤ÖšçŸÿ 	Yžê9c³}ƒíí täÿ Y±²{ÇýV(Ø*®­¦ß:¥¦¡ipî›Õa™\•Ú‘ƒÓl‘œú:ŸâåþG¯%½Ûk—wsNÉ™&¶x–;œ7œžF.3³˜ÂÃÀòÇ-Ž/@°ÔíäÑ¿¶m<GŸm§˜$ûs+ĦÓMÂ|Ÿ½UóRN"ù·+gåP´TrO/
+K,hó>È•˜í´¶ÔíV8=«Çà±ñ²ø2ÆêòmdøžW»Ì$ΑN²·““¬{’ÂYF¡@9B€ljÑøšçP¾ÔôiµŸ5ïd[$
+(¥V1¸ã`ýç
+ëŒ)/¸Ó(¯/xuøü=‘}®\:ÝÈö{lç‡Ì;dmæJó&_ÌÄ—¢6ô)åWYâ{Ë›ßê¶úÄ‚öÖâ.Z8š$&'—J³&BvCs…!ñ€’Šòý^ËÄ“ørÝ"¿×H´MRUkt’Ýæ”<FÕXnic•Þkm!ù2)¯âû]~ËI×íôˏÜk«ƒ¥MÎÈöæ43Ùû‘!cu´0>A D ªI<0¼),±£Ìû"V`¶ÒØ_SµXàvö©+“×t9¦>²ŽëR‘#ÔÝînÖCæí6׋8 fm¹]»w€›0¸ææ[^ØL©ª¡´»‘•º¸ûE¤w’+)Em–ÙUƒÈ®óo]„ºƒ@¡TãÕ´Ùn¼z…£Î\ fRŁpF3œæ)F?é›ÿ tãÌâµ×ì­|o.<G=æžÒø‰ƒÎó#,Qˆ”þxØHø"0‚±“v«éž+ŠæÃì‘ø‚ÊKbÕn® %›íI¤Ø¦" ’6n2œ# éQ‰ák‡·Yc3¢+¼a†åV$)#¨« {í>•çóêÚj×N|@Ú=µÄ©dÖ²I$æc
+«Ã™’é½®ù˜˜A¿
+ s~µñN¯¢Ùë6·ª]Ýè“Ë;•if†DegãkL· '²1?+ȤÚ(¯/wÔí4}+C\šÖ}mИ šÞw¶û$¬êYv]Êíó3ÝŽ"4iÛÿ joµnhj§öVÿ ?ÉþÊóS>wü²ó<¯;>wﳏâÙ@‰«iºRoÔuK4_uÄËÚTŸ˜Ž7:ú²Žâ³ôØ&Õ/ÛX¿ŠDÿ f[Ê¥Q” Êèy±.yXÈ\#4€ø‡‹4ÝgSðž•5“xº÷U;Aw4fyR[†ke’ÙÕA
+¡þUÑ€Ìò+éz®§§ëf×åƃþ=ôѼÏ3³-Ðrο¼KBR*ƒ÷UY²èW7àYîî|,¯}-Ü·öõ®ÙQ¶êU¶|™ …ùF08Åt” QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@V~§6±•ý“ccuœùŸk¼{}½1±>{õÆ0:瀑Á/3Åhó>ùYTí´.[ÔíU=€ªJçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE 
+Èà†™âŠ4yŸ|¬ªvÚ-êvªŒžÀÕ%sÿ lñ‡ý ´?üÍÿ È´}³ÆôÐÿ ðs7ÿ "ÐAEsÿ lñ‡ý ´?üÍÿ È´}³ÆôÐÿ ðs7ÿ "ÐAXúõÄŸcÔ´ø÷ßØK½0S4Mıdã9_™A!|Ĉ±ÂÕ¶xÃþ€Zþfÿ äZ>Ùãúhø9›ÿ ‘hbÂúßSÓ­¯ìäó-n¢I¡}¤nF ©ÁädÖ¬W¦]x«HÖn´ìmo.£j‡V—j©eó”7Ù‰$K&ó»ëÀ\…;w>Ùãúhø9›ÿ ‘h ¢¹ÿ ¶xÃþ€Zþfÿ äZ>Ùãúhø9›ÿ ‘h ¢¹ÿ ¶xÃþ€Zþfÿ äZ>Ùãúhø9›ÿ ‘h ¨á‚d)QÄ…ÙÊ¢…™‹1ã¹bI=É&°þÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE 
+MKIÓu›u·Õ4ûKèìwP¬ªdgŒûš¹\ÿ Û<aÿ @-ÿ 3ò-lñ‡ý ´?üÍÿ È´¹$Ìð¼±FïA(ÛJå}Öa‘Ø‘Þ²õ‹ë‡•4.MºŒÛI‚-`-†”ç 1Ä`ƒ¹ÇÝ*®W/R×¼U¦[¬’h4²Hâ8-âÖ%2O!„@m€Î$’  ³ ‘™oã6âãHÐîuŒ‹“«Ì»±¨«öc²5ÉÚ¹8É$³33 u66úuœv¶±ùp¦H‹I%™˜ä³I,I$’I$Ñ}ag©ÙÉgiݬ˜ßñ‰°ASÁÁ þöÏÐCÿ ÁÌßü‹GÛ<aÿ @-ÿ 3ò- nA6¶ñ[ÛÅ0D#Ž5
+¨ `  Æ*JçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘hûgŒ?è¡ÿ àæoþE ‚ŠçþÙãúhø9›ÿ ‘kbÅï$³¯à‚£ñÁ1•“Œ1U'Œôç­ X¢Š( ¢Š( ¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¨çžn.%Ž"BòI#TP2I'€ ç4Ÿ¯é³jZ[6Ž=BÝÅÅ”’fNT1!”|rQÜw«V¥¯¥ÛßÀ²"L™1Ê x›£#€N×VXv ŽÕ™®èúß›ý“ªØßù8ó>Ép’ìÎq¤ã8=}
+eÛOây,¡–7³Ô®$ùUû-àd1m‘‡›0ÁÉ,eP :J(¨ÄðµÃÛ¬±™ÑÞ0Ãr«‘ÔU€=öŸJ ’Š( Š( Š( Š( Š§©jÚnn·¦¡ic8E’êe‰K`œÄàcRXßÙêvqÞX]Áwk&vM‚DlppA… X¨çžn.%Ž"BòI#TP2I'€ ç4A<7Vñ\[ËÐJã’6®¤dGÎkçþ*ME¬—÷š%¾ô½=ê`@ƒüQ¯Ïæm©–T 	4Ø&Õ/ÛX¿ŠDÿ f[Ê¥Q” Êèy±.yXÈ\#4€îTpÏ
+Ê‚Xå@ì…‘ƒ ÊÅXqÜ0 ŽÄRPEPEPEPEPEPEPEPEPEPEPEPEP\ÿ ‡¿ä9âÏû
+Çÿ ¤VµÐW?áïùx³þ±ÿ é­ tQE QE QE QE QE QE QE QE QE ‡ãH&ºð/ˆmíâ’iåÓ.R8ãRÌìb` ’Iã¹E yüSj—׋«øŽâïÊ‘ÍÆ­aö8"L PfÙU¤fd*J¶ÍŒÜ®èåäåÒµIµßìؼAeiqqäk{muvþÙíZÛ;¥½]n.æ51¨—=²Š ò{ÛŸêÞñ½¢¶«¶š„6ú}ˆ”´0>Ëx®)%U“ÎRÌFuÚw1¯um©ß]h«â´µ6–¢ÄÜÅ1óåW¸>^ö"Tù˜á®Ä»˜º0× ]Ä—Å_–ÇUÛksÙc¸÷2€oˆ±Éfê+  Š( Š( Š( Š( OÇ	6|?<RêP$™yn4ëCs,*m§\ìòäà³*’TýîÝk.}½–ãÄw:A»†“p²Z]ÎíæÆ«m)¾0ÛvnòݸÚþ V~³©ÿ eiÏ4pý¦íó¥ m­s6	XÁÁÆpIlaT3*’ <NÂ?Ãáï°éz•½Í¶ŽØe¶º2ÇØØ7H\ݤ‰æ¤Â¡k´—GºðíàÒmß\—ÉöyïfŽYåžGqwæ²¼½ÜÒ­«2ÅŒn$€¬ùî43û6)ÞY¼û˹~Ñu8]‚I6ª|«“µB¢('
+2Y²ÇB€<¿Á6Úí®µ ¹]q]ޙྈ"¬M4Î$,„ÀÙrŸ*¨—sWò@SêQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQ\½µ³øª[Ë»»ëè´è®å¶¶µ´¹kbL,cyã!ËP }…6»²E‡¹¼Ñ|"Ñ¿´ï§ó$³K©L~]ºl
+æ͆-´º¨m¥Ûrd<”ÐQ\›xºú]R
+ËFŽ]P¤âæ9o<¸­ž/ òá	de¸FVU'•«–ÙbãÅB—Z”v¾ƒdò¥Õá¸+*ùLVVH¶ÈŒ¬YXì}ªß&ð’Šäü}¦ÆÞÖµdºÔ­ï-4ÉÞµÔgU‘””G
+N{sÀ<
+Ð0iþ°¸»WÔ§<Qˆæ¾šåžFp‘¢yÎB–gœ¨ä €
+Ê+›“ÅidÁ®ØGoxèÖ++ƒp·9‘"
+¬É×ó%‰~`÷Šwf~·¯jPÁma¨[ǧêÞÙI	³»i’X~Ûo£yD 1C)\ Áo˜(iEcø‚úâÞ++)<«½Jímb˜¨"!µ¤‘¹ÈÜ#ŽM¹7íÈÛšËÕl¦ð¾—q®Ú꺔ßcO´ßEupfK¨—æ”…n#}žaU‹ËMÅC
+  ÖQ\?„¼Eª'„¼;w¬Xí±¹´´‡í¯wæÎòȨŠò&ÞÜ€;7Î¥•~m—4zcá_
+Åao%楦Gqw·d~íR=ï,Á	$d!,Î>P7 ë(®lx¢iÜi¶¶¾¼®é5œ·"‹ËXÙØÊå6Í\)cæ®Upû)ÿ ox‚oizzi°AZ\ا¸eùÒHxÛÊ>b…Á]ÛØ0“ØQ\¾ƒâ›Ír-:þ=2Ò5<ýšæÖìÍ$+0óÓËÜ*Øvмç# °šâãN¶šò×ì—RD5¿˜$òœ€Y7##®(ÅQ@Q@Q@õ]6_K¸°¤D™0$ˆ€ñ7Ut$®¬)ì@=ª¾‡©MosâÆ—öW
+kt±‚°•Ç'ãhäÛ–Û¿i$©­Jçõoø“ëkßvÎH¾É©9ék¹â™8Tfu8 bbìBÇÀAEPEPEPEPsÏ
+­¼·Ç!y$‘‚ª($“À sšÇÒ ›Q½þÞ¾ŠHeÙ,Vî¥L6ìàî`yß'—ÀW ‡-¿ñQêÍm×H°–9Désu…¶ÙbdBvçs¤.Dn‚€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+çü=ÿ !ÏØV?ý"µ®‚¹ÿ ÈsÅŸöÿ H­h }?XÒo.¦ÑÍ­Ô¦g²»‘àHÀnd‘UÀRWqO/%ÝÛ8¨äÒµ¡qm­	m.5hRhþÉ#˜íÖ)LdƲ/•1!ÞÊwÿ *†Qzÿ ŒaÓ´eí-¯õ¥Ä±™ôË•€¼Q³s!@…I^¡¹ìyâO[ð­í´:­ö«ö¿.B³Ål$o-")T~t¸pwt!H+‚HÆ™á»Ëo&»s$uÄW&î8Ø•I$ªŠ™2ª[`±Á-ÈUjåÜü>¶{Û¨—Dðüð^\KpúÕ²Iw	‘˺„hÊÈA$+3  ¨(ûóþÙ­o|G
+îŸ »ÑÒƶ·”ÍMpìa	ÃE¸í'¨T$eõ4¿Þj·VðC¡Ï,QËz“¹†H•å’%hÑÕK®av;¼¶Ù´…,v 
+Oé³k>Õô»vg½²šÞ6¡
+‚p	ÆO¡©5­3û_L6¢o&E–+ˆ¤+¸,‘H²&åÈÊîEÈ2‘Éèž0Ö€¶XÒã+q©ÝZ›¨g,ˆåâDËUʐç(\m)æ;פ¸ÖnÄ?ÙvšÚ¡šîO8#F’»¢R0ø19l²á@Û¼´—wáÝKÄ%î¬m,.íP-œv’µÂC>ù,e†ûx†À€ÿ 1,6G¨x{X×®-oõ±´º´–÷2ÅÕ¼ò³9Ib-Ô*… `åŽï’™ñö¥%ׇíí´;G#Ϧ™5Aä¬^k±	ØûJ «¼d·Ì0Io/›N‚ËF®µ/"kUžô¢}žh§–6v±Y1là WyÀQ¬iŸÚ–h‘Íö{¨%K‹iÂî1ȧ#Œ‚TŒ£ Adv\Œæ²æÓuíeŽ°Úl:zºùÿ e/#ß*°;J°m¸d>nåv]Ãïvž:ûV˜÷GNÛ$±Y\YÇçäIä†;1¶þí·¼ áG ¹â©·Äèoõë9´Ãø~Þ;NXï·F¨ÈÒ(ß`RUï—
+\ƏáÝy<?¢øV:h³ÓRÑšêÒW2LÐtA.nEËîmÁNü™úg†aÖüàËöÓ´ÝJ{-(ÒÏSP`u’(‹Û£ƒÛ[Ë›rè|DÕL´ÒÍÆŸi£Éq+jV÷[ÌŠ+yfÚ¨ÈÀ‘åo¯ÌŠ2]H5ûÅþÕ·Ô­,lï¬-ðâøµ±üÀ¥¥hÔ§0¾ï€0ry >Ë—7‘©iVšT7ñùÁ´øP[Ú›ÊÜŠéíËäF|ÆV݇T2ˆî.•­
+gNÖ&–Ò{„I žØ¹Ž8"•¡cå°B\§>ð˱Ìc3í¼usyil ÐämB]Lé¯nò<*öv¸™cGÙ´.r€òÅCáwÉáÿ ojo§&åÝA¨\Y\(ŸpE‚42ʤ¨Ü¢YcŒ‡
+†P iÞÖ^±¿½Kf¶ÿ ½BÎáÖMW×Ï„Fˆ9!ÆYöÚ¼15ÔX}³û:ÛûGÈûw”Ÿhû>|¿3vÌó·9ÆyÅqþ$ñýLJ­|A|tO:ÃD•!–oµ…i^H¢d»OñL¡²F»ÎT\Ó|cs{âvѦЮàØæ)¥Pò\Æ&Pî©å岉	6Ь¸€u”WŸÜüKž×Qm:O
+ß5ðß1¶‰%’O!Rv¬d™2@ýCâsƒKï_[ßêPÁ£G%½ì&âKÍžd³¤>PUÇçPäãjü˼å YEyÿ „|s|ž±Õí`’}FÒ/ô«Yd“÷¦ßÎýèòR8Ø¢–ذܸR§p¯ øÓ]šþëO½³‚mJK··´í€AÄ÷ÙÜÂ˵-s‡Ý¶3„,æ€="Šáô¿Üj2Þ3èžM¥†ªšEÔÿ k|öhãýÒí˨’LÛ>M¬2Ä¢Øê#ÅWº†™öÙIJìyîÖ(¢Xá´s’#,ý¤övÝè§ä ì*9à†êÞ[{ˆ£š	P¤‘È¡•ÔŒAà‚8ÅyÜß/âÖh4ï´iº†Ÿc6éæ[‰	‘b†FH\»ðQ;;±©øÓ]¼Ó®Î¢ý“Ë»³³iïîRF×"Ü€#ø‘|ü6áµH	>d '†§š;yôkÉd–óKq	’V,óÂFa˜“Ë_•› P8¹^O/Ž^ÊxµkçjV±%¼î²·Ù¯mY%”NÒ˜c-°[Lᣍԇ`€™ÎÂÏÆy⣢ú5M±Ï3FÌ ”Â&Úìªb
+•r$-¼€©@EQ@Q@cê××y‘¦É²îšâePÆÎ7ïp~]Ì˱w%¶ºÆëV5Oû+Ny£‡í7o˜í-mk™°JÆ3‚Kc
+¡˜áTi:gölS¼³y÷—rý¢êp»’mTùW'j…DP2Nd³eˆ‹}3N¶°³Ëµµ‰!…7µ £'“€Z±E QE QE QE QE QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@ÿ cþιþÑò>Ãå?Ú>я/ËÁÝ¿<mÆsž1\žŸ¥xGZ3XIm©];¢¹‡[ûafD‘ì\”Þ±ïÁùçås_ðÆ¥ªi:Í´^"¾¶Ú\C¤én S$lª	X|ͪX<sžsOZ:®¾,–	]¶›mqæÞY]ÍlÍx¦7UEŒHѸWeùŒ˜Ø¥C€–ÞÑ­¥¿uŠwûtPÇ9–áäv13²Iæ12y€¿»+±6ãh¢çDðî–¶wsÛùK±B¾FHò”|ÖódÜMÅ]Ùò	-\\žÔî­ïä’ÖH›ìöâÒ$š2b„^ÜÊöêŒL[ÖÚE„<; m…³Ò&ƒ{ôí28§i¡Ô-gòçš6xâKÄ”‚P*
+±¸ƒjíÚ¥€€jCá
+ÞôÝÇi'š×
+rÁ®%diÌ™([i
+åTŒ#32€I&ÅΕ¦_ë1ÜOm#]Û$o»÷‹€ÌcÝŒ$…3(mÅ	Ü6–ù×‡¦Ò¢Ò/õMtí2"ž!óæ¶D×%eTIIg.Ùs&g(ß>@,H£@ðæ£ql—òé?ÚS˾[1r·ú1s¨¦*&Pn-å& e€è–ÞÐí/í¯a´“Ï´rÖ»î%u¶Ê2‰YŠÆ…XŠð¼|«‰-¼-£YÏc4{$°Š(mšçbD’ƃ“ÎyG9Îîr@ÆŠ´íKFÒ ‚ÆIní“ä+{æ,mYÚPs2¸_àåÛçÃÚû]ßZ[A%«­–²–ú—ž«›wp“C·k¨q*0WŒðHI‰áÕ–}|IŸiÆLÇn/Ùʶxee†x ä)©!ð†‡¾¥
+ÚHãS·ׯ-IJIq wf,H0
+œœ*ÅÉà¹ná$¼´ðÏöc>•hÖ¦å?st¿h;Ö5c2d*ÊxÞX0g
+ψ>Ô5û{DÓí£3¢J!»D‡Ïµ‚ùnPJD%̽c)ÐÐI«hšv¹jVþ|pKç"e¶²À¹J»)S•!ˆ ŠŽÏÃÚe•½Ô—	vž]Á½žK¦•0FÆiY‰O™¾\ãæn>cœ?é7°ø¶ûU“MžÆ+¨˜Î.'ŽBîYLaZ3¹¶®ðÂ]ÞY!!>^sÅËáO[³œéš|J5ÛÙnuî#fº³S‰- “¡fçÊeò™²Ì(Ó-</¤ÙOñC;M¾zÉ5ܲ±“cǽ‹±ÜÛ$eÉÉÚtDÛ^Ïúv…«jzòÅ™$ˆªˆ¡i8üÉ'/Þvg–Y…À8E•Éãõ^ßørÞÈØÏ?‘¢jÁÍÌd¤Ò¼MoÙÊá@1ÆQp~Tj5ÿ Þý“Y‹DÒ ‡Î–âe€Çû#鬢!ÈÄfí·lào;ñüTÔ\xFÔoµ›Rµ®©(y#Þñ©Aqp¬›JRÃäg%py:ƒJÓÄ|-¤ûr"È\ù‚-Ì
+ýY—j”,>p˜RB'uá›Ù5m~eÓ'0^DË0û\y¹&D)å6?y„˜îA at JÄ„DÏœø|'«E,^hÿ mÓbŠÙeÓ‹ÄÆâ$kí±23·'Ÿlår"R‡Ëáh°ÿ „'ÿôÿ gýtŸê¿ç‡Þÿ úaþ«ýšÐ“DÓ¥ûNû|ý¦î+Ù~vù¦‹ËØÝxÇ“ƒ·rsæöÕ Ñõ»ìͺ¬ÚÜsé«öß)­¬‹@I"äb ñ7—ÉT
+7¨LõCáÛ[}&k9á7·rKb!ó!‰bžT„ùQ®ðGî†ÜËá½Ø
+h:gÙ¾Çk<b×a„}²b®¶òÁ@qçËýÞv|´/‚´–òTµ&»—Î’T¼™]t˜Ø>bÉš\ì+Ÿ1à‘\ÿ ‰<9¨ßIâq“ö««ëIÖÊûí+—Z…·]Ç3}„†ýû·ŒUy<{oâ]B{o2'ŠAkö©#kF­ög%ZâMÓ–‘“vÆÜd$ɐ@:I´¯
+èBÕí¤HïoVëbyÓ<÷1 ”?Ë–gŶãÝÊœîf9Ô‹DÓ Ö%Õ£·Û}.ýòïcë·Ç"‡Oá÷9ò}cÀš¥Ï…¤±‹Ã“Ý”»ž[®E’=´rÙIÐ#e‰1p©)	Ç̍ó8`»ç„õkË]V]þ&rÿ h´º¦ø‡Û š)Ö}û¼Ã´É Úà"ù<•2Ø7‚´ör¶³ÄÖÖ‘YÀÐÞMG{¶m*à†Ýwýí®ëœ1âxsHŠÞKx¬cŠ	. ¹1ÆJ¨’ˆ€(†!´`|½99Ç°¶‡Ãž1{+[YÏR·‡ÊX˜>fO=§ž\Ä‘öui[%™ã“Ó—×ôNËIñŸa"Ú[húó}³ÌŒÇ)º™gTߐ¡ƒnP28$`Óþ­r–³ÄÈÚ+É‘¢–2®j ²ª®«Èª w
+àÛ'‹És$B}*VgT¸³dQ«ã̍mːeÚ«¸"ƒÿ ¦£ÿ 	Ûáÿ ‰gÙ>ÏýŸöåÿ †üý¿ÌÎï»òùÿ ññßeeŸx‡E´Ò/×ÃñÏ%•¬Z¼Û¿Û-ºÅ</È–iÁÜU7y%c«€®X_[êzuµýœže­ÔI4/´ÈÀ8<Œ‚:ÕŠò‡~¿±¹Ñµ-g‚$´ˆ£C=©ƒÊû2£&èÃHûæß0PÂ#¼HO™•=…­åðö±5¤ö3Áý§/îâ2¤®F–bS¡æ$H¾s3¨“ª`¸ªpj¶7:4ZÂ\Æ4ù-ÅÒÜIò(ˆ®íçv6¼óŒw®Mü-usñ
+ëQ½Š{‹)²çƒÈ6ÆÜFÐ8(e|ɹü¼ˆ¹ãiäü	áK¹î´øot8à³Ó^÷):+	¡‰ Ü„îAr9E%Ü–e’7À=#H‚mF÷ûzú)!—d°Y[º•0Û³ƒ¹ç|ž\nC P\¶åPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ÿ ‡¿ä9âÏû
+Çÿ ¤VµÐW?áïùx³þ±ÿ é­ þ+†ßí0ÚiÚ­Õä;ÂÇý›r‘±\äù¦=¥F	Êî,ÈŠ©çï<i¬ý*æÚÎÅl§Ó‹ÇBgŽxbÚ6Âï¸3íTÚŒ…YÔ)î/¬mõ9-n£ó!| ‚
+²°ÁVA ‚¬¹ü!¡Ü¥šIi'úH°•¸•XyŒ¬ìÄ0,åÕ_{eƒ¨pCÐ?Äi®-nîáФ6ú}—ÛožIÌf5IgŽTDdÏ›v(&áÆ2 1ë¾7Õ-gÓ®,¬ K	5Yì„“\ãÏ1$èѲ¬nêÍ,`Æ#_ha`§¤‡Âú•ºZHcԭŵØ{‰_̏‘’Ä‚L’1a‚ÌìÄ–$Ôwž	ðíý໹Ó÷̲´ñ7 HÀ†x€lFıbS¸W?2† vÿ ¦¼ìÚ‡	
+ÈóNbTš[™mUdߏ60rP…‰Ue¾†â[¸4ÿ j:Õ¼‘&pÄÛÄQÊF–ÊÁcx,ÎÊ[2î<!¡Û%âGi'úbF³¸•˜ùlÌŒ¤±*áÙŸzዱrKÕ‹im•åµŒg½r÷QÊL¢vdTbûÉÜYTn'ï“’I z¯Œµbj:ζ—W·
+ox¯C”Y•Vl¬¤ UNõÆ60Sºø‰qc£.£u¢I‰åûL,.VSjŽÒnÐÁiH¯€[5tx[F·çì~s4SC#\Êó´©.ÍâBä™2"~láP(Àâ£>ÐÞÝ!’ÒI»3<—¼“n 2Êå·JŒG,¤"U Ÿ×<eªè^1¼±6ÝZIoj¶QÆò3y¯ö–feŽ|ÇÊàr›V©wâ;«÷…îôÛHmã€C$H·ÜIÌÌÁƒ Q$ˆÓq”0`Õ‹Ÿè÷w	s4wfâ;xí–u¾d…ŠáÁßó¸ßÄ;‚HfHt?ìûË™ô‰ ³ŽkE„[y…$ŒmŽ@ªËÑp¬:²¤`	È8üK4>½×®­ã’ïN·¹70ÄJ#Ín]$NHBñ¶ÒyÁâ«Ïâëçñ=ƃ§hÑÜÜFò¨–[Ï*0#ŽÖBÎv1 ý«hÚåGbSCCðÔ:Fs¦\\I¨Ápìd@0e*‚A,ç?Ç#ÈØ°3Ûáöý©⛼F“–-y;Ne“ÈbÎdó„€&åXŽ™Vøƒw?‡ÿ µôk8á°K‹’êòå"òüão)¬#ÁL€³+1Â`o¨ïþ"_Çec¨¦äCi¨O«4ˆì‘Ù½Æ#¬~L7Ì#ù/*Û먽ð?†µ
+«u¤A$+å‘m–Ѝå³pUTÝŒ”	ÛòÐþ
+Ðe‰cšÖyÔJ&o>òiŽÓ.YÎü£²ÙÜ›TåU@ ÏOßêšM¬1ÙO¥ê7º€°G–¨™žHüèÑŽ"W
+Z<y€
+‚NÆ™}qý¹«i7ry­oåÝA&Б6ðªØÇ̯£÷<¼–mÆ£›Ã‹¥‹[’Þâ;…»ŠîWyåó—gwmî
+-†àLd  c:É­NMFBïpÓHˆ¥w¨CPçqýÒ«;•9̬\måH'wãcMñ~§oq§Ïw¼6övæßG!8‹ˆÂ‚Ë,¤©Pï©â]jËÇ—<Vv—Ool¶)%ÑŒy¬.]™È‰Š‚¶î8Ý‚‰ÇÎÅ7.ü-£_O4×{äž_6b%uóID•°~hÙbŒ4gämƒ š5é:¦¢u˜gûY‰aCw,,ª¥Š•ØÃk
+î76×uÎÖ €r÷¾<½ÐSÄZ¦©¥ÎÚF›w
+ÉûÈÄÐ	-íȉr$a$„±gP
+¬øÀ’çźöŸ¬ê0]éÖ‹$6ö~U˜¹yF‘®K4-,‡lI•1Œyn~èÜÝ$žÐ¥Ó®tçÓ 672Å4¶Ø>[4B5A· P!Œm)È99®ž
+Ðcó™mgÍå™.¾Ù7Ú¦ý­çoó7#®íÙØvgh€9¶ñÞªÚ£ÝYÙZM¥Üé–VpOq"ÎLÞsqPJÌøŒåFà«ìòÛw4-n_5ÕåÄözh´†8†Äó„ÓD“—9>T–½·7MXh-*ʶ³Äé†6‚òhŒH¬ì¡6¸Ù·Ì‘FÜaa	Z’Ïë£Ü]I¢Ë¤SÛìû<‘´‘$ªO— † VØWº$J¥`}GÄZÓøÞöÆ+Aª=ìzmËi¿iû4Uò<ÌíÜCca¯g㻹!Эmô©/nõ+)•¥ºD;§†æL¹ìß1UèĪdn¢ß@±ƒDµÒdžwŠ]ò·Ï$¨âA+²ãs™{â$ç95^ÏŸ~—¶Ö’,ñº´[®%e‹jJŠ¨¥Š¢žP@Q»ÀÀ~‰âëï=òØèÑâÆâm>ážóh[È×$}̘	ÀŸ$f 2Fƒ¼i®êú]¥³YÁw¬ÍÌÆâðE	m­˜2C•f7(vm ÿ >Šì,ü-£iú‹_ÚÙùs´²Nzå²/.Âvù‡s.ün
+vƒ·Š§kà?XÙ-¥¥µÝº#îY!Ô.Qò"m‡ß³lq™Ûò/(À xù¬^K;]I´]ðɧÿ ¤*Ü”¸[vXR<y`F÷ ÌˆBîØÕÞxo[}wN’y­>Ë<R˜¥‹s:$‹Ã÷ ©Vn_â‰ám3Á·7–ö0Cmw£
+´Î;‰ U`U'oÏF  ÎÒEGiãïéZ&œúDWs¾¶÷?Ù¿hwg¾¸‰Ö%W•Ë8.vgáT và- ušµõÃÞA¤i²l»Ÿæ¸™T1³ƒ
+ûÜ—s2ì@ÝÉm®±ºÖ……¾™§[XYÇåÚÚЛ‰ÚŠ Q“ÉÀ­WÒtÏìاyfóï.åûEÔáv	$Ú©ò®NÕ
+ˆ dœ(ÉfË
+ (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š +Ÿð÷ü‡<Yÿ aXÿ ôŠÖº
+çü=ÿ !ÏØV?ý"µ ‚Š( Š( Š( Š( Š( Š( Š( Š( ¹¯ëZ–m¥,Ú,÷·¿ggº…¥U_&Y2]Ns{šékŒø…ÓÃö?úIq@Ÿð‘xÃþô?üÍÿ ÉÂEãùÿ Ðÿ ðW7ÿ $T4Pßð‘xÃþô?üÍÿ ÉÂEãùÿ Ðÿ ðW7ÿ $T4Pßð‘xÃþô?üÍÿ ÉÂEãùÿ Ðÿ ðW7ÿ $T4Pßð‘xÃþô?üÍÿ ÉÂEãùÿ Ðÿ ðW7ÿ $T4P§ÖüUuo-½Åχæ‚T)$ri2²º‘‚7 Ž1\]—…¥Õ¬ÒG¡Þ-œM
+¬7štÒÇ4²ÈFÓq†æb>}Ø
+½Á'²¢€&ÿ „‹Æóÿ ¡ÿ à®oþH£þ/Ïþ‡ÿ ‚¹¿ù"¡¢€&ÿ „‹Æóÿ ¡ÿ à®oþH£þ/Ïþ‡ÿ ‚¹¿ù"¡¢€&ÿ „‹Æóÿ ¡ÿ à®oþH£þ/Ïþ‡ÿ ‚¹¿ù"¡¢€&ÿ „‹Æóÿ ¡ÿ à®oþH£þ/Ïþ‡ÿ ‚¹¿ù"¡¢€&ÿ „‹Æóÿ ¡ÿ à®oþH®ËÃZ”ÚÏ…tRácYïl¡¸‘c(g@Ä’q“êk‡®³ÀŸòO<5ÿ `«_ý´ÐQE QE QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@Q@qŸºxoþ§ÿ I.+³®3âO
+ÿ ØTÿ é%Å cQE QE V6­­I§Ü•Š’XEÍó±ÁŽÛA§Gã<DWu#f²dðîw{uu¨ÚZß¼²Ú W0 E]€¶xܸÇ.xî@)ê¾&{Gž-:êæ[k»{y›j„cGÀ,ë’VLt8Ý€A$zíåÖ­gcmÉ,—--ËÄ6„†o, _39å~~zƒ·’‹ÃwiZiy·ROmqö™¢-—…aa»-¸Ã“ÈûÞÙ7,´O±ßCsöþ_Úþ]˜ÏŸ2Ë×?÷ùÏ(â8"$\Y^@Ρ­–TP× º Ú7eNé#“aÆq†Ã"×nfñ¦žt»¨#–	¤•¦
+2ñ‚‚0ü•ÝË(ÎC…ÎOys¬Éuj³G€³-ž$—k¤¦mÿ ¼}ñFK|¹N`W^-.ûûRÒþçPŠY"ŽhäE¶Ø¥_Ë 'ÌJàÆÌ[9nƒ  Kw«­­á¶KK«—HÖYŒ
+§ÉF$ [;_„~^œŒÑÄmœ×6S¼PMp'š8bŽi3n`XíBHMÇŽƒ*
+™t»æ¼û\„PÏ4ÁtÂÛvB!£°‡2?ÞÞ>ï9w¾Žö9"šx%ŠV›xž×Ìh„’¼„ÂK~íÿ y‚ØlìCŽ0 at 5§×mm§ºYcœAh¤Ïr±îŽ6	æ8ù³°†Î6òwUË;¦»„»ÚÏm"¶ÖŠuëÕIV#•$vêÏ¢\M©Ç}-ò¤ËÏ6uI2T©‰9‹$¸F
+óàî b¬hÚ_öM›Ã¾#¾Bû ‹Ê†> Äi“´q’2rÌǾ(FŠ( Š( ºÏÉ<ð×ý‚­ôR×']g?äžxkþÁV¿ú)h ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+ã>!tðßý…Oþ’\Wg\׌ô]KY¶ÒΖ-{+ß´2]LÑ+/“,x¨Ç9 sTßðŽøÃþ|4?üMÿ ÈôÂ;ãùðÐÿ ði7ÿ #Ð4TßðŽøÃþ|4?üMÿ ÈôÂ;ãùðÐÿ ði7ÿ #Ð4TßðŽøÃþ|4?üMÿ ÈôÂ;ãùðÐÿ ði7ÿ #Ð4TßðŽøÃþ|4?üMÿ ÈôÂ;ãùðÐÿ ði7ÿ #Ð4TßðŽøÃþ|4?üMÿ ÈõNËOñUõÖ£o£°¸ò–ÔåÁcråÑúm‘G8ä© šŠ›þßφ‡ÿ ƒI¿ùøG|aÿ >þ
+&ÿ äz †Š›þßφ‡ÿ ƒI¿ùøG|aÿ >þ
+&ÿ äz †Š›þßφ‡ÿ ƒI¿ùøG|aÿ >þ
+&ÿ äz †Š›þßφ‡ÿ ƒI¿ùøG|aÿ >þ
+&ÿ äz †ºÏÉ<ð×ý‚­ôR×3ÿ ïŒ?çÃCÿ Á¤ßü]—†´Ù´o
+é]ÃFÓÙYCo#FIRȁI ã#ÐP¥Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQE QE QE QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQE QE QE QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQE QE QE QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQE QE QE QE QE QE QE QE QE QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´ÐQEgêpëù_Ù7Ö6¸Ï™ö»7¸ÝÓÛ*c¿\ç#¦9 Т¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¢¹ÿ ±øÃþƒºþ	¦ÿ äª>Çãúèø&›ÿ ’¨ ¯#ÐäÐlµ-^þãYðť京’yvÚ¬*²ÎK‰±$(ݏ(ü£#šï>Çãúèø&›ÿ ’¨ûŒ?è;¡ÿ àšoþJ ;ñˆõËOØý¦ú;
+f=2M¶„EBf¶V”¹à…YänXGö~ŽŠÏ6§…®5mQôäƒ\ò[TþÓ¹¿¼¶X§k†·¸†Þ&Ê»
+»„{Yrv†!—°ûŒ?è;¡ÿ àšoþJ¬?	Úø©´{ƒ³£"iß‚I•ŽïµÍ¸ä\ŽdØ2q’Ëé>,Ô¼A…5KÝJ4Ô¦¸¸¸›MŽÁ¥[,YÝy.?y‡L>Çfi3˜Ê…"½ÁZ•Þ§£L÷w‘ß®8îât’9—j¶RTTY@,T°DÁR¸%K4Ÿcñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉT}ÆôÐÿ ðM7ÿ %PAEsÿ cñ‡ýt?üMÿ ÉU±b—‘ÙÆ·óÁ=ÐÎù „čÉƳÆ?ˆúñÒ€,QE QE QE QE W?áïùx³þ±ÿ é­tÏø{þCž,ÿ °¬úEk@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþ
+ÿ Ïý…u/ý-šº
+çüÿ  ;Ÿû
+ê_ú[5 tQE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE Ïø{þCž,ÿ °¬úEk]sþÿ ç‹?ì+þ‘ZÐAErÿ a·ñ>½«ÇªGö‹
+6Xí#±‘‰†G1$Í$‰÷dÏ›
+ᶘ·)Ž$ž|0-ì´H£·:À¶µ¶*­´‚9$y.cbQHÀ}ÂîôÒQ\]爵ëMZËÃê4ÙuI®#Wº1:@a’—Wî,ZÙ²›ˆ`Ì»ÿ w¡ãO²jwtž ðå…Ö›å¥Ìz“ù&òCH|±æfðà>iÉo—äùÀ;Š+Yæñ7ƒ ¼Ò%’ØßÛÃs˜Æ61¶×1–\˜Ë.Szä¦íË’ró.‹¥ ŸEðÌš¹në7‘š"{˜‘ƒËI1Nï
+¹X÷ •“(è”W7wâY™ïæÑíãÔí,tƺo –72‡†(™r	(¬X`œK	
+\þ±­ë×
+ñŦ¯¦Ý$ZeËý¶ÊÙíÞÊhÕI‰ãi™ÖR¬Ä}ÓO™N@ D¢¸½WÅ3iW±è·Þ"ðþ¨%ºÝMy}Ž)UÝÕ(ŒÀ’6Ìdã€wü…¿Šõ-~m-é±%õ½ëËq6ë„F·š(‰a_5™°IL‚­Æ
+0iEqpx‹^ûZ¥ÀÓEšjcK’â2vûWÙLÁËb!¸îòöÉÂã~[+¡
+ë¾*“G»2>ÊÊ;™­ÖFUºyžEPûHÊ*à (Û•üÞGÊ2ÒQ^gã«5ð´Z"hvñÇo¨ëvŸÙÞkGn²‰ÒhÝ@"¹u`Š7w• êkºý‰³Òµ¡c5ÍݥżÖðÉ —¶ÈÁÈÄ2™ce!ˆnC(ó€wW«øÖmnöÂ-sÃúkéΩ,´Áé™L!Þ<´Úê<¯Éo“äùäÑ<Mªx£GƒÄº,"MÞ]„ñâîp¬Uˆ“—d6Ô!Ú2é¼ì ì(¯;“Zñ™¬kÎú…£X`[yÒØM*ièm"”HûeÀˆ‘¾à
+!°Jê4ë­jïK/¿MžO´Ba¼‹"»fòÙäEåNÖ‘T ²û­€¹EPEPEPEP\ÿ ƒäsÿ a]Kÿ Kf®‚¹ÿ ÿ Èçþº—þ–Í@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿ ç‹?ì+þ‘Z×A\ÿ ‡¿ä9âÏû
+Çÿ ¤V´cPÑ®$ÔN©¥êb¿h–<ÈDÐÌŠX¨‘2­òù’±Ó–ù· W^\Ä·7š¯™«Å(žÞâ8JÁ*º °?)Y6X³o8eÛË“O¯.¨#ƒMÓ_OÞ Îúƒ¬»xÜ|±	àoç‘ž<Wñ
+œ¿~Ã¥ê67VÚ†“ÂÇ»{v’3á·!T«6AäŠ ôÈü/4šµŽ±ú”Y^+soÃ<i!v*¸w$–$’3¡l\è·Ésq¤jqØ¥ó‡¼W¶ó˜¸EO2"X}Š£æ¿"¿{šþ±u%µ–»ww¥Áo{<w¶VÐOq~‘%£(…ò‹‰&–>‚©Æñ‡yâ{PÒuk­ØÊ–ºV£tÒD!¼‘G¹·yhŒ¦Gž2D{HGL]àÖ/t{{Ýt×yÖ8ü³¾iyãehßsçs+*·Í»$|À‚AǼ²ÔÖŸÄZ”š}´±Ü}ŸLÒfYDuhò’³(p­…Pr£'nàyôñˆÿ Ä+6¥ciz¬m¹ÞÌ,á"w@¯_|­(é _-kcûfõþhÉw:]}Áy FÛÅÙ<’¸v—ËÁ2^ Iá_	®•à©t¼Ýéóߣ¼ÞUÓ<¶…Ô*F’ÜÅŽ5aÁòÁÇ4Màéµk‹ÛzöÒiîtÉ´¿3O²6Ì!”‚Û‹¼…ˆ*
+ô¹ø;¸Çѵ­sÄ3hÖZŽÑÞÞüÞKh‘LïäÍÂêÌ›AxäWݳk,™»®?†¼O}â{ÏßjZ„n¹½–k.;|- û-ȉƒ}ä!‰Îä!T‚Þ>¬	WP·Õ,cÕÞ!ou)°v‚h՝“yÛ•—{`‡ÁÜÙåÙbßAû>­§ßÙçkKK‹v3ï+M$N\· `Ä~PØB^ñ3^½ƒEñe²êžUÔq}žÓHÛú]«ÂžlûJù­³ÌŸæF
+<žAÚù‘|M«ÿ ÂUzº}ÌzÙ¶ðååälB°½ëPª \G˜X™˜7–;pÚÂ1ÿ ?ì߶ÌWûKÌò¿é÷í[1ŸøsïŽÕsUÒúâÞúÒòK-BÕ!™QdRŽT´nÕG;J·Ë€Ë“žÏĺ¹·´[ÏÚ%«=ÁƒRµQv·2 ‡Ê€°Š5˜±’’Wo(*¶årißj׺'ˆ<P,üCþ‘ýª’›)R2ò²@Q#?›”Xr/”6È…$f ë5Ýë	µrC©+ÄažÞÙ#ŽÙRx¦am¸åŒäÈÒ`Œ€*süCa0“M}[R´¼Ö¤½´ŽÊhL¹[Ëyg)wg F¬í’P`/Ì[?ãP	á›9ŸR’Î0÷h at 1…‘šÆçh%Ôœ’6 Ϙqóm"¿Š<EâMYŸNƒU’æî+(ïáó`¸™ÚUû*)Ý‹—ˉXHÀË™IU ¸¹Ño’þæãHÔã±Kçx¯mç1pŠždD°ûGÌ~E;~öúðøbæÉŸ§êÒ[è²;I,]î·;p—%÷ ÌI$†p]öºü»)ésA7ÄíRxµ>;­Ê{xâ(ñù“èBîeäßälËéž)ׯõ«=oË[˵	4ân‘<‹–šUŽ4ŽhÌp›_Ëiqu`´Ú\øwR]ZæûKÖ#µÜÆŠ[f4ƒ¶DÝ– „à‰ mØjM/÷]ç“}W×Ú‚_]Kmh#‰Žc*ÆY¶ïHðIf;›Ð¿‡ÚÖµ¬ÛÝˬOi#ì‰ÌP±fµ™ƒy?îÐ!L(ò‰y'{ËYsø³Q³éÇX‚Þîµ7¸Iw[ªÞD–Ï 
+Lkä¹"FR¡O˜ÁÕN@="Šó;OxŽãWÐàû]¢Á"GóLpuÏ$r4j±1œ,H’C
+"Èʶ,žÕ®5ohó]ê_jºmêK« /ØnKS%¾å |„å¶dOãc¹péW¯ˆõ"76¶áˆ/þÇìÊ>ͧ%ÜÒÏsÈ.ü)Mêv|Ûùƒ5ÚM¨êqü<ä×v—ó¢Îv¤q½˜–@Á$.Œª‘+y
+öçŠ ë(¯ÐukgÇzD÷³A-ÜRÁ­Ã‹Vòß (;ãòäC+]'ˆµ}}<E{§h×ñÉröR­­’Æ»ã“ÈgIY]GÉæ_;y,"1îË€òŠó{ïê“hpk–zÙíïnå–ÆÚ[m¯<)„#ÜŸ½iv™VÝÉ'šÈ¢2N<:γ£éIi¥k0JßÚº¯5ó¢ÿ ¤%×îíÈŽ.Òi<¥U‘ùØÊ Z ö
+çüÿ  ;Ÿû
+ê_ú[5q÷~!×­mµÕÖgo*-fù!haØ¢ÊçËŽw–Êß?;þQµ—œÜð¥vÞ!ÖtãyÅ¢Þêy1ºHmX^>íU1ÜÅUŒ›Â’
+*À‰Ey~§âýZÂóÄñŨâ8tûùm–åâ3ÚÜB3ùkíWQ,ˆ¤2Go”Æ¡¯k:WŒŽ‡{â&Ôië~/M’÷M#"Z*–‚9XÁ36Ò‡éW™Ù€žøQ3êRYÆÙ0²3XÉ´êNI gÌ8ù¶‘M<_©4ú"KâO*ø™õéöۏìBX²Sn´xŸ{¸0&€=bŠñ½;ĺ¼6šÝìZœi!×e³B7j1Çon°ìùJHò V'–eݘÞ5S^É@Q@Q@Q@Q@ħŒuÛ©nžƒ§=¼7sÛ#ͪ:3yR´eŠˆ”'=iÿ ð”x›þ…ý#ÿ ò5 vtWÿ 	G‰¿è_Ò?ðq'ÿ #Qÿ 	G‰¿è_Ò?ðq'ÿ #PgEqŸð”x›þ…ý#ÿ ò5ð”x›þ…ý#ÿ ò5 vtWÿ 	G‰¿è_Ò?ðq'ÿ #Qÿ 	G‰¿è_Ò?ðq'ÿ #PgEqŸð”x›þ…ý#ÿ ò5ð”x›þ…ý#ÿ ò5 vtVO†µ‰uí/çµKY|éàx’S*†ŠWŒáŠ®A)žƒ­kPEPEPEPEP\ÿ ‡¿ä9âÏû
+Çÿ ¤VµÐW?áïùx³þ±ÿ é­ tQE QE QE QE ‚¸K†Š3:#"HTnUb z€J©#¾ÑéRQ@Q@Q@Q@Q@Q@ï¬mõ+9-.ãómäÀ’2Ä ƒµ±ÕN0TðÀAŠ±E Ts·6òÀæ@’!F1ÈÈÀŽH*}Áv®[þ°ó\%·‡5›˜à¸–ÜÍZ…vÚ6 4Á±¹OP(ÿ „ÞoúõÏûîÏÿ ’(©‚mmâ··Š8`‰GjQ@À  ŒT•ÉÂo7ý
+zçý÷gÿ ÉÂo7ý
+zçý÷gÿ ÉÒß_Ùé–r^_ÝÁik7Í<‚4\Xð2Hs~ Õ´ÝKG½K
+BÒéãÔïÖ	•Ê«ÝÌÈN—{ŽEV¿ñRêzuÍ…çƒõÉ-n¢xfO6ÐnF0ȸÈÈ'¥rŸ
+ ÿ …áù¬†5›‹Ë‹‡’{•6cz‚Dcý~@ƒ´“†gÁ аQ\—ü&óЧ®ßvü‘Gü&óЧ®ßvü‘@mÉÂo7ý
+zçý÷gÿ ÉÂo7ý
+zçý÷gÿ ÉÖÑYñ~ †ñÒÊîÎKK³Ë
+×—¸6ĐQ™HÛ"÷õ­z (¢Š (¢Š (¢Š (¢Š ð ø¦ïUµ²yn´ÙåÔn®¦¸²¶B&³ß$²™ïo“v£ýb|ÇøºñŒvñÜKi|N©%«ˆÕÍÌm$q‡EF-€eŒí`
+Â’tÏìO
+ǤùÞwØnîí¼Ý»w칑wc'Æq“T¬|oaqBö1,
+•$zÇ+¤SG'ï¤É.ÇÊ#hÉ$©à Iã?Éy'³ÔmÌ~võ’í¾ÙŽT•ÚœAÁÜw6T]½×ÒÇW’ÇÉšâc&xQCHÏç³…û°±Áۍ½X°•Ç„~ÑiqÛ¶ùÖÚŒ¼¬ãír‰3÷¿‡Çj³ªxyµ»»…žØ‹ˆ`… º´ÂÂ6•¾u$nÊÁR
+’2(Ñ× 7°ZÇmw)’8å‘–<…‘u8q’¬8S·i-´sYñx¶Üiv·oos:›¯îåŠ5E·‰Ôì¬ùÇÊçj#iëÆf›Ã­,úSçu°TQ,ñ‡¸%H$¬Ü/€$È!—€$šðˆJš\z|ZŠ,Ri‘iw…íË4‘F¬ Çó-ˆ‘ù;ÇÝバ
+?ÚÞ^­ºÚÝƏs5¢O,`FóF_r/9<FÌp1ÙZ™µ¤þÓ’Î++¹’)îbU1Ã#*°V·ž	!J€Ü‘†ÅQáùc‚ÔAx‹-µýÍò3ÂYKJ'p¦^vöÏ®•w­qqk~‘ZÝL·7H]Q
+å°ªV5'–Á@)[x¡‡‡´íNîÂåÖ[ï/&·@"·VMÌ~f€Ã©½€ŽW7WÄ6›/¦’+˜ìíVk¶1¸ˆ•—rAVa€-‚WpÖ-߁"¼Òìtùî-§Šì\ÜZ	UWi’·îd`yo›î§/:vz
+Ì:…ÕôÚ‚}¦xLm-­ªÂÌÇ3ä°r˜Äy*’òI á½Ðºð›“кjWÁã™0UÔ­€~ëcp©# ŒäëkŠø[§føBTó‹ùš•ëyj6ÅÙÝ6ÄœìO“vÜœny®Ö€
+(¢€
+(¢€
+(¢€
+(¢€
+çü=ÿ !ÏØV?ý"µ®‚¹ÿ ÈsÅŸöÿ H­h ¢Š( ¢¹ÿ ^ÞXxiæ°º{[‡»´€LˆŒÈ²\G`8+¬zƒ\ÿ •®ÿ Ðß«ÿ ß‹?þ1@Eyÿ •®ÿ Ðß«ÿ ß‹?þ1G•®ÿ Ðß«ÿ ß‹?þ1@Eyÿ •®ÿ Ðß«ÿ ß‹?þ1G•®ÿ Ðß«ÿ ß‹?þ1@Eyÿ •®ÿ Ðß«ÿ ß‹?þ1G•®ÿ Ðß«ÿ ß‹?þ1@Eyÿ •®ÿ Ðß«ÿ ß‹?þ1G•®ÿ Ðß«ÿ ß‹?þ1@Ey½ÕÖ½¦½ŒãÄúÂ¶¡iÃ4»]$¸Ž6l ýÖ=¯H Š( Š( Š( Š( 9Ðÿ ãÚÿ þº‡þ•ÍO×o¥Òü=©ê*4¶¶’΁Á*YP°Î1ÆE3Cÿ kÿ û
+êúW5M¬Xjè—úw›å}®ÚH<Í»¶oR¹ÆFqž™ ;OE×sø‹EÕb´´’åàÓ"P¨2O3?ã äŽEY›Å¶°\y
+§ê>iŽ9B˜Bñ$@䍬̪¶Þ2 WØû+XÔt½GOÔ5;ŠîÒKpmì^6FuÛ»™[ xã>¢¤Ô4·^]Ü‹Ÿ-æŽÔF<¼„{y^UcÈÜ¥˜88‘œ€ßÅñEûát÷c6ŠŠÒ$¾Q”UŠà pbḮuTXϼVw7—S+ºAo°6Å*²ì«€]3Ÿ›€pqJßÃò­Ô—‰%Òß›éŒp”Go³›pª¥‰Q·iä¶H=3Ä÷ºeô×v÷Ö׶Ñ^À³D­%³<f)[C©Ü<´·cï|¼Œ UƒÄSÍ=òE¦]ÝùW+1Á„fd%üÖP­™q´ßìü¬E¨¼Cis=ªZEssÄ1\¢åŠ9I3†Ãn€íÁ-´sY—žk™&•îí®ÚI¼Ó£d'‰“{š0ÈŸ¹Èa€Ž6óšš/4I¤EöÔ1iŠ‘ÄÆÜyʈFÐ’g*YB¤C€p&€4ô­^-^>{˜âeY!’Tf†UÔ‚x }Ó†nQ‘
+ÉÑ´VÒ§¼™îV¹`HŠ
+±Ÿ1ÔpÒ¶ï™ÀPÛWå­j ›Áñóâoû
+¯þ’[W[\—‚?ãçÄßö_ý$¶®¶€
+(¢€
+(¢€
+(¢€
+(¢€8”ðv»k-г״䷚î{”I´·v_6V©a:ƒ‚äg¥?þÐÁ¤àžOþI®ÎŠ ã?áñ7ýGþ	äÿ äš?áñ7ýGþ	äÿ äšìè 3þÐÁ¤àžOþI£þÐÁ¤àžOþI®ÎŠ ã?áñ7ýGþ	äÿ äš?áñ7ýGþ	äÿ äšìè 3þÐÁ¤àžOþI£þÐÁ¤àžOþI®ÎŠ Éð֏.ƒ¢%„÷Iu/<ï*DbRÒÊò)fÀñÔô­j( Š( Š( Š( Š( ¹ÿ ÈsÅŸöÿ H­k ®Ãßòñgý…cÿ Ò+Z è(¢Š æ|}ÿ "°ÿ °ŽŸÿ ¥×9♥·ð†µ<<RÇa;¤ˆÅYXFÄGB
+t~>ÿ ‘XØGOÿ ÒÈk2òÒû+‹;”ó-î#h¥L‘¹X`ŒŽGµ rM&¡£Yjz¥­–£iok§O+CªÞý§Í™@hÊâY
+¨ nW;—®>[C[Ö"žy.ˆŠÖþ Ž7,Í1‹²
+'QÊ|ÞY?.ì/Gyiý•ÅÊy–÷´R¦Hܬ0FG#ƒÚªË¢XM¨ç…Ì»•Ê‰œFî¸Úí;†A#jàü£ ãø’î·¶‡÷RÏs¨7ìwØXn|°¾Z6áÀç;Wn Á ]Óµ]wZYf¶ŠÒÃÉò£–ÖîyÞå$°eÆß7
+効welÚørÓcŠü¸¹O9’ÖâHš34­# ‘
+±PXÁ¶©  ´<=¥­ÌS¥¯—åìÛr2BJ ˜ØYB®	RFÕÇÝ ÉÒõ;ë_‡š5äÒ¥ÅíÄ6‘‰dVÆé™YbXàžFâÝÏšóS±ÖíÅýÍ£yzu쥕Ú$ÚÖåYÁݳ˜g-“ܨӃÃúu¶˜4èâ›ì‹D‘½Ä°+R¤±*ÊO#jàü«‚ipÿ ˯šLrDí<)‘dÙ¼9rKäFƒæ΀8â€9ø¼OªÉö«dO6X<—{¯ì›˜ü¤“ÍñìÇÌ“æˆ«c÷™Æ³§.µx/tÜD³¹Ž&óyb™œàªL *cå*]z\(ÚrjøEt®¥.Ú^Ó5ôí(ôÄ…÷|À`ðÀáÛ6[CÓZ{i~ÈŠm•R4Œ”M¨r€ !X!årÓÊàÐ5Ïøö°ÿ °®Ÿÿ ¥p×£WœëŸñíaÿ a]?ÿ Já¯F Š( Š( Š( Š( %<®ÚËt,õí9-滞åm-Ý—Í•¤*XN à¹ÀéOÿ „_Äßô0iø'“ÿ ’k³¢€8ÏøEüMÿ C‘ÿ ‚y?ù&øEüMÿ C‘ÿ ‚y?ù&»:(Œÿ „_Äßô0iø'“ÿ ’hÿ „_Äßô0iø'“ÿ ’k³¢€8ÏøEüMÿ C‘ÿ ‚y?ù&øEüMÿ C‘ÿ ‚y?ù&»:(Œÿ „_Äßô0iø'“ÿ ’hÿ „_Äßô0iø'“ÿ ’k³¢€0¼3¡]hqjòúË‹Û¿´»ÃnaUýÔq…
+]ÏHÁÎ{ÖíPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ÿ ‡¿ä9âÏû
+Çÿ ¤VµÐW?áïùx³þ±ÿ é­ tQE RÕt«=oN{øÞKwdrWƒ#R`C(<Սÿ …ë«ÿ àêóÿ Ž×ME s?ð€è^º¿þ¯?øíð€è^º¿þ¯?øítÔP3ÿ …ë«ÿ àêóÿ ŽÑÿ …ë«ÿ àêóÿ Ž×ME s?ð€è^º¿þ¯?øíð€è^º¿þ¯?øítÔP3ÿ …ë«ÿ àêóÿ ŽÑÿ …ë«ÿ àêóÿ Ž×ME sQøAŽx&)¨ÈÐÊ“"ͪÝH»Ñƒ)*ÒpÀAé]-PEPExç…¼-áëh³Ï érË%„ò=œlÌÆ5$’G$š»}¡x/KgÔ4­Ò&m‚K‹xcRØ' s€* õj+Ëáð·…. Žx4X¤Pé"YÄÊÊFAA'ü"ÿ ¡wHÿ À(ÿ øš ôÊ+Ìÿ áðÏýºGþGÿ ÄÑÿ ‡†è]Ò?ð
+?þ&€=2Šòóáo
+,éÐtQ+«:ÆlâÜʁŽ€²çê=jOøD<3ÿ Bî‘ÿ €Qÿ ñ4é”W™ÿ Â!áŸútüÿ ‰£þÿ л¤àüM zeÏøþI熿ìkÿ ¢–º
+ (¢Š (¢Š (¢Š óÄ^0ÕtK
+Gíú_k¶Ž/û.fÙ½Cc?hÆzâ®ÿ iøÃþ‚zþ
+¦ÿ äšÌð‡ü‰Zýƒ­ÿ ôZÔÞ#»žÃÂú½å³ùwöSKନH8<Gz »ý§ãú	èø*›ÿ ’hþÓñ‡ýô?üMÿ É5™©êsØkvè©4ÖãN»¹{xc
+$­C´(ê[ÀòOÒ©Oâä¶Ñ-¯¥r››“oßÚ*m…fÝçíÈ\#/)ãÇÍ@öŸŒ?è'¡ÿ àªoþI£ûOÆôÐÿ ðU7ÿ $Ö‰â–×o–[$h,×Ip0|É¢!02à´9SÀ*I;H
+×WU»›V¸·µ°Immf[{‰Lûdȏ•B¸e"’KÃ`
+ÀÚ~0ÿ  ž‡ÿ ‚©¿ù&í?ÐOCÿ ÁTßü“\–ã)"²ÐWP6†[ÛkMÅîÑ.&y‚ñÀ)¹¹9R6¾€7hIâ–C©‘d…l›aÍÀß°4ëŒÅæ@ãpòÕ˜ã… ¿Ú~0ÿ  ž‡ÿ ‚©¿ù&í?ÐOCÿ ÁTßü“Qé×M}§ÁrÑ¢v#”H„vea÷”ŽAàF at 9Õ lxOT¼Ö<>—wþAº709‚2ˆÞTòFRÌFBŒžµ·\Ï€äV?öÔ?ô²jé¨ ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ®Ãßòñgý…cÿ Ò+Zè+Ÿð÷ü‡<Yÿ aXÿ ôŠÖ€:
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€<ÏÂò%h?ö·ÿ ÑkUu¸´ÏÝ^_]ÛYE%„pÙ]^å$»ä2/$`‘ä’¹Rá8ÎÂV—…¼Sáëh°O¯iqK„ñ½äjÊÂ5O×ÿ „¿Ã?ô1iøÿ @Z5ÕÆ­¨èÅæ{xöêRK
+¤ml“¼wQª³ÆIJ’Ib	ÎKXÈ5;k§M¥s$þLëƒíLÿ f”\[¤‘ Únr€(Ú­‘„ã°ÿ „¿Ã?ô1iøÿ Gü%þÿ ¡‹Hÿ ÀØÿ øª ä›Z´½ñ\ÿ kÖ®íôf’ã—L"¹q‰¹˜«¡‹$ÃnͨݟÙ5ÕÃŨlŸQÿ –rEŽ‚g`0cD¿7v±mÈšOøRMRßP>$ÒüØ!–ú-¥]‘Žyë˜×SV¿á/ðÏýZGþÇÿ ÅP1}we强v¡wwf¶Wj³‹¦` Ëhò†Iybƒ~(²ßT’]í$Õ-£¶‚ývcU•¢’ˆc7|Å_4I‡=YYÇÕÂ_áŸú´ü
+ÿ Š£þÿ ÿ ÐŤàlüU di·ò¿‰m[«é$žaÌcš0†"k}¡6î™—HÂ>€Šì+þÿ ÿ ÐŤàlüUð—øgþ†-#ÿ cÿ ⨬ð'ü“Ï
+Ø*×ÿ E-tÏøþI熿ìkÿ ¢–º
+ (¢Š (¢Š (¢Š ó?È• ÿ Ø:ßÿ E­iÞZAeqgrže½Äm©’7+‘Èàö­~øvÞà5H¢B$i¬^*ª€ ð §ÿ ¡zêÿ ø:¼ÿ ã´ÎA¡ç¼Ô¯¯¥0¼	$¬‘´Hä
+bTÁ%SžHÚ0G9gü#ýŸþ?®þÛöŸµ}»÷~o›åù[¶ìòÿ Õü˜ÙŒs÷¾jé¿áнuü^ñÚ?áнuü^ñÚ çí´Tµ’âhïnÍÍŲ@ó»+0ÚÒ0q•ÀlÊÇÚ0 P(m?´ä¼Šöî–Eš{h™DsHªªŽÝã„@@`¤/ å³Ð¡zêÿ ø:¼ÿ ã´Â¡zêÿ ø:¼ÿ ã´ÇÅàë[{H­-ïE‡1©Œ‡’%EŽRJ¹|¸Î
+J©»&—s\›ëá++,%¶ÜÊí°ã$D;_ráv€•=ü :®¯ÿ ƒ«Ïþ;Gü :®¯ÿ ƒ«Ïþ;@}ŒZušÛDÎÀ3»;‘¹Ýس±ÆK18 ž Uª»ÿ …ë«ÿ àêóÿ ŽÑÿ …ë«ÿ àêóÿ ŽÐàùý„uý,šºj¥¥iVz&œ–¼vèÎà<¯#v.ij’Ä–by=êí QE QE QE QE QE QE QE QE Ïø{þCž,ÿ °¬úEk]sþÿ ç‹?ì+þ‘ZÐAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEsº¿‹SKÖ[KGÔ¯çKxî­LU]T2D9ÌmÐÕSþy¿èS×?ï»?þH ¶Šä¿á7›þ…=sþû³ÿ äŠ?á7›þ…=sþû³ÿ äŠ ëh®Kþy¿èS×?ï»?þH£þy¿èS×?ï»?þH ¶Šä¿á7›þ…=sþû³ÿ äŠ?á7›þ…=sþû³ÿ äŠ ëh®Kþy¿èS×?ï»?þH£þy¿èS×?ï»?þH ¶Šçt¦©¬®—&©XNöò\#]
+²£"°\Žs™¨뢠Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ÿ ÈsÅŸöÿ H­k ®Ãßòñgý…cÿ Ò+Z è(¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š áµ?ù(zý‚¬¿ômÕMPêòPõûYèÛªš€2u=NúßT³Óôû+k‰n!šrn.ZU£^Èù$È=:Púì6	z¶Ë{¢»åKa$ñ™ ;ÈlRùœ(ù[“´šf©áû]c[±¹¿´´»´·¶ž3ÄbOÚ"¬p†zóîj–¯á멾Ûo§Gi¦¡§& f1ý•Ì‘UH~%?.P
+ƒžx Ö—[°‡P/3‰w*¹±µ@6+®NåÀù†KínÃMaº™Õ¶ïr»¬I’7Èʍx?3>V烌˭ú]Bé#6ßb»¿·¿’f‘„‘´^WÈn |Û†7žßšilõˆõFÔ-#±óní!·œK3•·diráz3)àùtr7| EâKO²	®dv¹¸!‚'¸‘„2´eö¢–Ûò‚N0žFlîi·‘ÚÁv’É"†F at Z6Êï
+
+¥Š|ûs»oÍŒsXÓh:¢XÇ2$ª.îæ{t¾–Ð7›3HæÆ¥²ªÄÆÒXœü£&…áíGI¸±O6Ù ¶…a–Hd“7*‘ùj#òn;QüÀw ¢>Tn –µ–©æ}Ž3ËÁ9F]Êsµ× nFÁÃŒ«`àœ»XÚ™y¦}¡'xRÜíXmá‘Þ5Ærê˜ÕP"ªàœšÙ tÏù(zwý‚¯ôm­w5ÃiŸòPôïû^ÿ èÛZîh ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¬½+MšÇQ×.%hÊ_Þ­ÄAIÈQoXn:à Ô¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€8íoDפñTú¦—›<ÙAnËuxð²´o3dm‰ÁJ;Ž†«ÿ fxÃþšþ
+fÿ äjîh û3ÆôÐÿ ðk7ÿ #Qý™ãúhø5›ÿ ‘«¹¢€8oìÏÐ3Cÿ Á¬ßüGögŒ?è¡ÿ àÖoþF®æŠ ῳ<aÿ @Íÿ ³ò5Ùž0ÿ  f‡ÿ ƒY¿ù»š(†þÌñ‡ý4?üÍÿ ÈÔfxÃþšþ
+fÿ äjîh ;DÑ5èüU©ªA¦ÁSÛªÚÞ<ÌÍ#ÂÙ;¢@ 種Ɗ( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š(ÿÙ
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.htm
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.htm	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.htm	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>Slide 3</title>
+</head>
+<body text=#000000 bgcolor=#FFFFFF link=#000080 vlink=#800000 alink=#000080>
+<center>
+<a href="img0.htm"><img src="first1.gif" border=0 alt="First page"></a> <a href="img1.htm"><img src="prev1.gif" border=0 alt="Back"></a> <img src="next0.gif" border=0 alt="Continue"> <img src="last0.gif" border=0 alt="Last page"> <a href="standards.htm"><img src="index.gif" border=0 alt="Overview"></a> </center><br>
+<center><img src="img2.jpg"></center>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.jpg
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.jpg	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/img2.jpg	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,361 @@
+ÿØÿà JFIF      ÿÛ C 		
+
+ $.' ",#(7),01444'9=82<.342ÿÛ C			
+
+2!!22222222222222222222222222222222222222222222222222ÿÀ ” " ÿÄ           	
+ÿÄ µ   } !1AQa"q2‘¡#B±ÁRÑð$3br‚	
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ        	
+ÿÄ µ  w !1AQaq"2B‘¡±Á	#3RðbrÑ
+$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ   ? ÷ú(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€)êZ¶›£[­Æ©¨ZXÀÎdº™bRØ' ±8ãØÕ}7ĺ³pÖú^·¦ßN¨]£µºIX.@É
+IÆH÷æ´wü“Í?þ±ÿ è©kñÝÇ„|[ý‘gð¿Jó|C
+Ø›ÎÒ¬^×ÉŒ`nvÚ˜ùÌd9ápy\òô}åþ1øy§xÓþM
+´;{¨bY®¯õ»£äåãå,ÄÈ*[ïŽ	ú·ÆmR†0xŠËO±]N-Wû.ò9΀¸š&GåNƒ“ԏ›† ÑEyŠþ!øßÂ~:Ö©¡i¶„ºÇÙ¡µ‘ÌÊ-ŒLêK$œ¾å#<>èÍGqñ⏎m</s èm}ªÚ‹(RâAö\–Çœý`÷v>SÚ€=ryáµ·–ââXá‚$/$’0UE$’x sQØßÙêvqÞX]Áwk&vM‚DlppA…y^•ã½WÄ^ø‹§xƒNÓZïA·¸†O²™’©RoÆcnCCŒœ}+â9ð¿ÂŸÃ¥éºmæ±q<PyòH,­Unw‘™Ùñóƒ÷¸Ëà éEyÿ €üWâ]{\Ô¬µaáËËx‘ãÔ4;å•7Ÿàd.ÏÈÝ‚Bÿ «n¹¸±ñ“ÄzÕ¾¡©è2xFÖΏ*ÚÃW¼ò¯ePçæELÄõÁb2@=¢M[M‡T‡K—P´MBdߣL¢W^yTÎHù[;J¹^G}©~>x>+í
+Ò
+B}Ë$4-«¸-•q A(s“ƒÓ/<yâÍ{Åæàm/Jž=+uq¨Hÿ ¿—"»[rȹ$©ÛÊ1P¢¼oZøÕsÿ 
+¶ËÅš%¢]É©ý†æÖë|«	Øï€ÃfIP‘ÇÌGQZšg<YÅ
+7¾#Òô¨#Õ-ê´‘ÚKa‡eYü®ÃÊe;@AÇÔ(¯Õ¾,kW%×ôý_XÁ£9€®½tb–îU.Êêã)ŽOu$Ø_L𮣨êþÓµ
+ZÒ[éâ$vó¬Ñžxde$a†'±“ŒÐÈõm6mRm.-BÑõS|¶‹2™Qxå“9æ^Hî=hÔµm7F·[SP´±œ"Éu2Ä¥°Nbp	DZ¯Ÿ<C¬ÞxsöÕ5¨eŸÙN¤Ä«jñÁ’ªrø2) gæ
+pqGí
+¬Þj:Äze³îÓ4(]…%qu:» `N÷qä70'œPÑôWëþ8קñãx3Áö:lÚ…½¸º¼ºÔdq
+GÜÚ ~hˆe-÷ñŽ	ôo‹+/ƒ¼G¨ëš|vz·‡_ȼ³ŽFuy~ê႐¡å½[n2IРjZ¶›£[­Æ©¨ZXÀÎdº™bRØ' ±8ãØÕÊù£âv¹ã]sᎍ¨xMÒ¡°¿»ŠæÚK<»“jȬ[;Õ·§¤6	 z?Œ~'^iÞ4ÿ „SCmÞê–k«ýnèÃ9ùxùK12
+–ûÄc‚@¢jZ¶›£[­Æ©¨ZXÀÎdº™bRØ' ±8ãØÕÊùÓâ_Œ[Æ¿,¯§¶ŽÞò×][;µ†E’&•!– ¡ä÷ ?EÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPñgÁZ—<+k¥ésÚC<W©pÍtìªT#®Õcœ¸íë]åP—øÇáæ£ãOøJô5Ðî.¦‰aº°ÖíLÐM€G™Ÿ˜« # (_ºNy åëŸ	5ýK᥷‡“QÑ›PþÓ[ù^;5³G’P 'ÎC¼T:ã W²Q@ÅŸj^<ð­®—¥Ïiñ^¥Ã5Ó²©PŽ¸UŽrã·­¯‚µ+Œ"žÐiöMo,líæ–"a•qÞ/R:Ǽ¢€<¿Høq¬XÂÈónlOü$þwض»þ3åãýjôÝÐþ5áøã;áƁáÝ;PÐÞK9e:…õ¿Ÿix1‘-aŽ xœ‚£>±E y¿€>Þx{ŧ‰µoì«këÈ…´v:4F;H£Âe€`âPp8žw|¼Þ¯ð»Æþ KÛ-bçÂ7‚îáKkM`SPX•—v"®v§Ý$õ+»#Û( 7/->&xW\²¹€é&”ºyIœùïµ%E8´ýõÉÈïÅW¼ð‹4kšÇµM*õ̵վ¡þâ\dJŒ7nmÍ#`€£v6°Æ=BŠ ñ½kà­Ïü*Û/	è—֏w§ö뛫­ñ,Çc¦Bø!J.)=Mu¯‚µ+Œ"žÐiöMo,líæ–"a•qÞ/R:Ǽ¢€<Å^ñ¾¹ªk%ŸÂ:¥â46sê–En¬¢mÄ,n‰T¹Á%¹PØ‘^àÿ 
+Càÿ 	Øh0\Ip–ˆÀÌàìÌ]ŽA¹Ž8äõ­Ê(Ìçøa6§ñ#Å:Ω%¤š.µ¦%	3£m„oÃ!PAˆ°98!N=9ýWà潨ü9K“S´ºñ$úšÞßß]Îî$TãDlÞB©\ø8¯l¢€<ï_ð>½Æ~¾ÓaÔ.-ŭ宣˜§P>þå$ƒòĨ_¹œòA¯£|&X¼â=;\Ô#¼Õ¼Dþ}åäq²*K÷—
+	)f軳‚ â½2Š ð½gáwÄox+Lð桬øìú[ ·XĀʪ¬ »ì࢐ªüÁ‰c3ÒxÇáæ£ãOøJô5Ðî.¦‰aº°ÖíLÐM€G™Ÿ˜« # (_ºNy ú…ãzçÂMRøimáäÔtfÔ?´ÖþWŽÍlàQä”(IóÇÀì”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@SÔµm7F·[SP´±œ"Éu2Ä¥°Nbp	DZ«•Ëø¥|­GO»Î«k²)¢þÐÓ-þÓ${ŒgÊ0ùRe_fíû~Sð@:Š+Èí­¼U'‡Ò]JÇÅ
+owݵ»K”˜&é'ìêU¾ÊŒï9?ë
+\ºokzÖ¯s¤K®[Â"½–Á%ŽKd’e‚ÇÉVYTa|Ñ1 à6©pÀ¡Ysx—A¶Õ—>·¦Å¨Tt‹)fÆÑ°œää`cœŠáõˆõ™mìWA»ñ¶¾sÝ[O<æ|E䀭"J>7'ËÈ;†Ã5$Òõä»ñ¥þ•}}ÓÊÆÆÓË„Cq/ØaT|È™8qŽ.S}ì€wW›¥­õöµem¥\xŽÉw•ç{”›w‘wçÓþõc?è£<(c”!òG7'‰[Tðý¢Þø‚ß̲õï6;‰SÏ_$9†8&`%hÆa"0äù|Ð@=¢Iá…áIegÙ³ ]¶–ÂúªÇ°'µI\_ˆtÛ›Ÿ
+é_O©hÛ"y·Û»²;&Þiäž3ew“4~"¹ÔcÑü"·mªÁ4÷hš„VR«NËöIÚE&0`®O–|¹ŒÛ@Åæ~ÅGņMJïR[!q0´‚kiX6´ù&I@Šû¶ä2œ¸ì-Šzf‘¯­œ÷W^#–éôýJeºpÓLÑݍŠB†Xv‚q¹0ùrê‚xZáíÖXÌèŠïa¹U‰
+Hê*ÀûO¥O
+²žXâBꁝ‚‚ÌÁTsܱ ä^fɯ´zœ7SëZŲeHg›—wª¤ˆÙf|ƶùhÛyÌl吶MSþ“«h²Gý¸·
+.œ/­ÆJG™™¼Ø±®ì«(E—–mÞHÚ@=BŠò´Ä3YØÅk7ˆ ¾tµ]nV—FêÛsCæƒÀ¿j'Ê-¸Ü
+í­Ë«-Mt}[K…õ_³Ç­ÙClâyŒÆÕšÕ¦"lùŒ¹yòÛŽ a ¸¢¼î|MkèÓΤ×sYjÉÚ¤iKë–<ÒUIŒ“ž<ÎY·º©ÿ §ÂCþƒÿ 	_ü#?dýÇü|ý§ûOËþ¿çòü¼¬ÿ GÏÞç4éo³þÎþÑû\aò¼ÿ ´ùƒËòñ»~î›qÎzb¤3·	nÒÆ'tgHË
+̪@bReöÜ=kÅü3¦x¨|9Õlµ/í&œør⧵Œª¼½¶ê¬ÎUŸËãl(9$KóžÓÇI©É«i‹k>«‰´¹ûL–0Í*+y–þ_˜°²Ê[êNSÌÜQ\ž¬u&ðæ„×ñêQÆ^3¬%£³Ü*ùÀkpŸ;ÊɈŒðuqúJxŽþÖöî[ß<vîªÑ´¿3(Ô®ÒãýWU·vÄxÊ–" ¹Ey]¼Ú徯~"î÷KMÎŽåÝbIÕ®üÂà¼`î|™¶î\•PÍmbïV-isª›¿í]J9e¼-šZ,—ÐC¶aÚH›€",P¢á[„·icº3¤e†æU 1© ²‚{nµ%yÞ·e¬§Š´«væîïN[+´–MÂx=ÏnT9Id”‚T"Ã|§9Mø§áwñdŒ5dÕc¸ŸO•/ ^b—€+FñË+5¿Î¢f0‘!eòvP¨TrO/
+K,hó>È•˜í´¶ÔíV8=«Êæ‡Åm§YEi}ªÇj²Ïä\}Žåä–\CäþêIVT]ÆऻŕË|]HàÔ¦ñž÷1k/<:ÅÛݳ+D‡Ê¹[b¹ùAòÙbã$‰~r´Újzy_ÚÚ­‡Ÿ/íw	üc8ÜFq‘ÓÔUÈ'†êÞ+‹ycš	P<rFÁ•ÔŒ‚à‚9Íaø>£áû9-`žMú†0C+„p»B.r0sŒV>£ý§ÿ 	Dû?µ~Ýý¡kö+Îû'ØqŸ¿¸Ýÿ _ë>»·þYÐiðÌó$RÆïì•U(ÛCa½ÖSƒØƒÞ¤®m7R·ÖõÍVÙµ%”ë¶"°‰¡d´ŽwØ$<ÀKn	å’»Hbrô—ñŸÚîY5_.ÏʾŽÁÖêRY|ź¶ó%f3°ŽHü²¬±É"« ÂÉ@¡Eyށaâ«O¨Õu+¹T¹‘âŽd·1<[Ü,¬â5E¸gT]†pª€Ÿ/$\ñkêÐx›OºÓÒù%Ý¡[‰Òx„¤ÎžZ7”Œ±d‚èÍ&ð±üè(¸¢¼~äø³ÃúO„µ;iõ[»§ÓËê_LäMvñÅ´L¬USÜ|Ã*XFÌŝ®³ÅI6—§øZÂ;ÝfXEè·¹’ÚR×W­¤å‹‚ÄíÜvüùOŸm v”W™ÚÇâ§×4–’ïR†É\Dkiei!ûT¹·˜ª‡ìÞFMÀgäìhlÓÓ4}ll纺ñ·O§èâS-Ô놚fŽìlR2ôÉ€ä‡ËTÂ×n²ÆgDWxÃ
+ʬHRGP	V ÷Ú}(žxmm常–8`‰É$ŒQ@É$ž œ×™²kí§
+Ôúä±l†RæÂ%Ýê©"6YŸ1­¾Z6Þs9d-“Zÿ „¤ÛÜÉöâê
+¢H$·\‘ý•ˆd–,Bíçm]ª‹6òX7”P¢¼¯\Ä3]ÛEa7ˆ ÕŸ]U¿–14ãp|¶p6ù	örvØß¼æÕÍZß[µKËK)uÏ.ÓP#N
+e›Îͼ.¨ÓßÌ­(Kæ@¸a"¨ ¤Q\߈õU“Â7š®Ÿs ‹N¸ÎÑîFdµ¸â1Ó$¬R&
+ž¸9®^öÃaþ˜uŸíitÅŸOKY&x£ÔäyžHä1’žR³@ª'&0‹ŒÐ¦Q\_æÕd¸h5!©´ÑôûiÍÜrkµ3‰Ê³ŒH~æ]I
+òòx¬=Ë_´±Òæ/®5Ävš<Î.'žLÍ<Å/C«’#U%H"?¼¡	$€z…Fg…nÝ¥ŒNèΑ–™T€Ä¤Ê	í¸zםÏ.¶og±‘µÈÌ1jm4°Á+ Y/"kr­$ľX›ÌUÞ©µðÆëþo_jê­*é÷öâWiÊc͈Âd^‰º0̹~;<ˆ
+ wÏ
+Ê‚Xå@ì…‘ƒ ÊÅXqÜ0 ŽÄRW•Ãˆí’ý4Xµ˜µs{ªº-Âíµ03\´%7~ë&s	Ë~ð‚Oú¬WI E©ÇàÝQ]¯µ7>oØã™f±’EòÆZidËïÃÈÁ9\ C@…çv®/€<Wl&Ô§ºŽÞwÒåû-Ì2²4.Ï9š]âe—˜°ùH²UË-OOñ<kê¯fš©³|óL†ÌØ™²K’úAǘ~a÷7mùh¸¨æžd<±Ä…Õ;™‚¨ç¹b ɼ¿EÓ¼KztË}f÷Y‘&½Œê
+ÜZ¥×&P%–dó<‘˜öA»,$#ŸÂÅ%‹Y–âk}ýÔ.éVí®·\ù~oÈ…B!òÎ#Lgj‚rê”W•ØÇâWñŠµµÞ³‡Öâ¥%ŵIJIj´’)AØ7!ŽîF@ÏIck®Åá_\ÛÜ_I­Í. ,RéÆ"Û4ßg¯ò…9Rg ª¡@:‹ëû=2ÎKËû¸--cÆù§F‹’ ËIñ«æqioâíâÉ<@Ú-­ìn†ö[Åd›ì÷~ia1³‹UÉù>fQ÷äRéõkˆðM
+_GbÒ¬wâxå…¡ÂÊãx˜Æ¥€#HX#5 wQE QE QE Ÿ«jÉ¥Eú4÷W2ù6öÐmß+íg eQ„Go™‡ÝÀÉ 
+Çñ&™q©iѵÙ©ZÊ&´—Îyo‚Œwäqä£uìpÀNø•¦êïqŸ¤ë3Kì–[¬&I‘wS#(bÈØbÁK }|k¦Ì$µxžÚ9P¢å$šåív›¤±¸b202¥³YúÃøtH~Ýw
+üÚœº¨¸Ša+[M"”**Ÿ0ÉBÒ)-’ØRFۍà[
+öïíôL’Å5ÉVŒý±ã¸k•2e?zò7îö}ò: Ɓâë?ýÃg}j·¶Ÿl´k¸‚yñÈ‰Lˆ>`n/ÍY÷þ;ƒHûN¡¨C³D[·³Šíd‰pÑdJÌEfùĈ˜ùÃpucÂ>ÿ „{NÒÅÕä÷WvZzY¢´»ãƒ!¢2T1VxÔüäí
+…_–£›ÁPÝÜ^Åq<‰a+ÌcX\0ܐ×Vï¹OÈò(“x!ÆòªP(ܹ«jÉ¥Eú4÷W2ù6öÐmß+íg eQ„Go™‡ÝÀÉ ^ïÅ^ð´Z¶±ƒ<6©¶MJúÚÎ8OœÊ$D‘X¬­!󓪐¿1}½%þŠ5+8¤¿»K»7C|‚?5dØÈ_d²»‚
+cæ8 €F>¯ðÿ MÖl¯tù¯µ(ôûä_µZ¬ÊâiV‘Õ¤Þq¿‚cËn ¯sñ/J³&æÃR·ò.¶n’;uwhÖTåuU-/†*Wi™¤¼ñç‡÷	ͼ÷Im§¶¯Ë
+çËò‹nEbf6aæ	–1—JÖ¥Ï…í§–æâ;»»k¹¯Eò\DP´ˆÜ”¥H1©0o¼HÁÆ3üEàµÕ´‹Ûx/nÚF²–H.®H£ h¥ˆi3±Ê‘¸©Ém¥Éj °|elۍ7Rû{º{&[„u‘‘×s…@VŽÙ
+0òÈ*	PsÇÄÝmõ¹íu+{-2ã캍Ԑ¬¸Q°íb\ïmŸ»‚2p…Y´ƒm‹›©j_oGCozÒ#Ënˆ²*"îB®Í0Ý v>a%‰
+EsðóE“Ãú¦‹p÷sÚj·«}{¾@YA˜å@Ú¢Œnm»F  Ͼø†Úv­uöwgokn“K¶êÓ“äÞJÀ0“Ë#m²ÊXd•89Ù©ÿ 	ÅŸööwö^«öï+ífû8ó>ɝ¿hÛ»;sÇ—þ»?òΫÞ|;°Ôšæ]CUÕn®.bò¥šIcÉUÄ#
+*á.Ÿ… eTIbÒx‹Â³]ë#^ÒŒŸÚn–2æøÚ©µîÈE#ÌË’»XmYyÜb÷ÆúVŸá]7Äù‰o©$MmLÆD2,
+üÎ’®Ÿ4ہ$–V:•Ý²<	ö˜áTšxãx .ÊIs2.1ò“—ؤ1¹oád‹Ã:.“öéã¸Ò"‰-ï UWWHŒE¸uù‘œaƒcw€DƒÂ¶+os šì¤÷¶×Ì^]í¾A¹²H?gL–$œ·<ðÏøoâ]¶©§é­©X]ÙO2"Ý\:"ZÄæÓí[·—?!Œ1J€7…ÈÎƱâØtNÖ.-îà‚áY-¤·zªÚË9B€ŽXþ.FÜî\³ðâÎÅs=ͬ×pÉ<÷n©q$EÆ«÷¢ˆBylŽIoºÛÆ•£øÖÂK3æGk,ðJlæBc‘ ’Fàá‚Ìǐv王/%ÿ ÛcO¾K«h–uµ™$š'Ý岂Ø]æ7\£¿0^+—ð‡ÄKfÁfÕ´©í÷KkO@Cž=Çy-¾IHP»Š©O0&r{µ³±Õ®5yn<¹.¢·³o1ÀO–GòÀÿ išr:óò€3×Aðn•gá¨ìm5+»Û9n-/¢¸i#b”¢)¶Æq’2s“š “Fñ'†þ YßYÃö±ùm,3¬r¤ˆÄ˜Ü¨,J±öºíù•xÉeâí=\ZÙÏ
+¾•k~¤H ›xjmòÎI!rX($hhÚUž³N†þy3[[iæÉ·‹
+5 eWz‚ç.w.æ8\SÓüm¦%Ò[jZ’‰m൷Ĉ¦Ò(Ú$Œ„‚—?ë7î
+¸øXš½Òm$’HæÔ’6]ódz gRDq†$!u<1ªÙëz:ŽŸa=ÏïâY¡7üìûAîÌÙ'ïXeHf¯iá;¨n-¯/£qÍÖÙBý±„¯02¹¼–FÂlS¼©0 Ž×XÐtí?IÐôûË;HíÖ[íAá“äFB@àðÎG$ð(>OˆÚ\+o$¶ªÃsÜ[H¶ÛÄð¼°Ä’ RIɝÌy€”¨iÇÖPF¹Ó5( ¼½M:	ÜDU®Œž[E…°(ÂL±O–ÛY²»±ô¿Ìu{$Õîc¶K;p–Pj&àˆbžÞUU
+xDhcRÄ;°n•króÀ¶²6öûìñ]µý­²´a-nËóÐìÜͽݶ»2|ÄmÀ  Hþ2¶ó­íítÝJòæáï(`2M´Â2ÌáTdä 1ÃS«âÉ`O
+\étú¥¦±)ÃC±XÆmä•v‰0Çh<ñµ\1Psÿ á‚Ýì¯íüG<6šlZ‘ŸQÄ$Kp’H[äòJ‚“¸SŽ7(+±©ø;KÔô]7Go>
+?P¿Þ‹ÉxLX´Ç#) †ç!æ€2ÇÄkÛM.ïJ·’é.56°¸‚-“È[É*ª4nc$•-¸ª†;Šá¶Ó_ŠÚ=«_¾¦ßgŽBKDF(Å-9}χd’V]±–fÀØ®5©'„,žê›^ÔŽ ×Ú) –(åy’#—
+€H”®6‰¹NçÞYü?Óli­oµ(n..%žâá&Uy|åŒL¹ò	rSk)΃Š ¹â[øvþÑ.–w†h™ŠAler|ûxTŒ6x3”+Ûa«ê¾,–ßÁºö­i§Nº†•že•ÆÂÑH#
+å_k.ÇG;\§æùkCWðÝžµeys$é%¦<± '‚~rñ[ úï‚#}MÔôß[¥Ô’A­<©tñH§cyKlá°AÎú }/â-a-Ö·cw§F—±4ïòÔÀó7—ò³38†"Å”ÉV·|µ©¥xËGÕ|={­Ç7—iaæ}¬îI|­ˆ¾h™Õ¾BÈÍ×x)ÞøcAµÐm¬5­FG´Žâîá仝"3´Ñ܃
+ Ù4ÍòíÀ\ô¶C…ôk½3Pº»Ô£½GK™.¤¤V]¤ UÞ0{Ÿ¼I Ý׍
+FúMKAž(t¸­gÛrmâ’ÞIÄeüÉ%*¨ £“™O;‚ÇwãËqªKpú<—Z=µ•¦¡k¨¶ˆ/Ÿæ¨“tó&ÐWäÎðx+	ü!el÷:ÅÞ½©-ê$r6¥<±”³
+áJyJ<¹äR6mÇÍ€ùb/€l¡¸¶žÓSÔ­d³·ŽÞÔÆbo!c2ˆÈÝÉXç–?›9VÉË€à9|yo£4‰o=ΐ4«mP]A	ýÔ2·Ë!b>P±¡å°­ƒ´ÿ …¤­ž¡,°OÆŸ*EslÓÛ“bÀo‘e0ÇÊ8Ãȧ*2ÈCðÿ MØaKíJ;v²M6Ku™vIh!°+Ól›7ÿ ¬F刼!e¥¼k¯jV2²%¥¦ÉbcXÇ
+«!C6†$;3(Œ€ ñ΋sâx´–A{"« ÁÌ~nÃ*Ÿ/æÜP(û¥·üµ¡¦êSMªjZeÚÆ·Ž²FP$·“>[ã'rÈ„g$Ä[
+
+¯¦xVÇFºôù®ííQ%—÷EÒ%…]³ó±¢®ÒÅ~PÛw
+Õ&Ÿ¤ÜE®_ê÷w9šç¤1à¢ÀŸê%A,	•øÆ<öS¼"0 ÇÖ|búZµß‘ô©·rŒQ­^O9”þ­!¹ÊnþÎq·ÌAZþ,‚MNßL»Ó¯¬oç•c[yü¦*­Ò+–ÙvŸ³Ê8;²¼€5sSÐ,u‹6õd‘
+•Å‹Äj¼S˜÷ƒŽsû°c'Ûiák[™æµÛë^ÞXÇö†è<ëb¨ûSbÆ#û—}ä'ç<!P
+ú¦»Ñu='CûMÔºwÙìÌqrKÏ”ºª²åBà¯´ýÐH¯¦|G³>²Õ5›iìÞ}>+°Ì‚8î˜ÑÄ{›*¢Ic]ÒmR0b™a°¾°»ð…ž…g¨N¶¶>DPÝ@ñ´ˆöÒ.Ü’¥Kˆz‚0*6ðVšÖU§Ÿv—d,íd»—kÂé!ùp]ZÞ6m<‚¤P8¾#è÷5ŵµõżV‚öæxQ;xwÊŽÌᶶƅò±aÌaÆHÐÖ|Aq¥x‡MÓáÓç¾[»K™DVÈ…ãx@ù™•vÈä–#$($$ðœöz¥¼÷—Ó6§§‹™¤”3•Ìĸùp™ß€6Œ(U bµ$Óa—Y¶Õ¤óííæ·Em+#FÌOÎb\sÜõìÍÛ|HÑ.¥•g]‘Gr¤´LZÙÚ1粫–Š0²¤‡Ívpv¶$›â&ƒoâQ¡I$‹pnÜHY31
+¥mÒ3tgb¶Æ÷í$Ñ~iZ½­¤sÙZÛÉk­Ï—$f)FfFù2ÂG
+í“ÁPj¦åŸ„lì%³’Úòú6†(â¸+(÷c3«LÁr[{ÈìT®òí¿p8 ·ˆJÔm4ôÓﯯ.â–Xb´E9˜Ãe™•Wý`9bÁÜT7?mñcÂ×Ë+ÙO=Ôiå”0F$yUåŽD@ù‹µåA‡UfÎP8­gÃ÷¯ˆtÝBB{´´¹ˆKlàHG„••‘—ln`pJ2Zö^Òôë´ûK‹è´Ûyb–ÖÈM˜à)2Nq‘–Üè	.X€X)PH 
+ñüBµò$šãEÕmcí
+!—È;b·.â_’VÊÆØ³nÆqb÷Æ–z]õÕ½ÚO'—¨-šyP…Á0Å&2_÷ûޘ܅¶2\x+M¹µ¸·yîÂOo¨[±¹y(–R>^¡†ÐuÏZ’ûÂ6wí¨o¼¾Ž=FR÷‘G(	24QÄñTáJÄ¿0ÃŒ¶ÖPÄP}ÿ Ä-.ÇZ{	Œð-´²™^
+à"A,¬HWßdOÞ”¤ºØ—ÆÐ[O¥ÖªÃ¨Ë*EŽÈ¤‘·¤¬”‘+$\–HËm_šKÀz^³©Çy©\_],^x†ÞI¾HÒxÚ97í`ÙåŽÝªª¦Å¿„àS·Ôîõëëø%Yâ)K*Ç4j…cE]£ížì·$€ WÔ<coia¥jG÷63]ÜC}ç!/n!‚áäRrÊð8Ü3hÒ¼}¢j±$©/‘	ó„“K,MO£”iQÙßÌY¾T|Q€±sàí.óNŽÂçÏ–Õnî®™ãy¸‰Û‹‡Æ0Fžd›Âö׺X²ÔnîïÏÚáç¹(]ˆÀ+€¡•UC+¾yv$Ÿâ~›©ƒMŽHï…Ū=½ØPê¯s\¼n†]¸p¹<®õ×I ø’ÏÄ?lû$s§ÙeòŸÍQÉü	ÚÜsí‘xÜ‹‘šíá6yÛ/…»]¥ävÂP#ŠAp·@Û–ß"‚w– P*æ•¡Ã¥\\\«»©æD‹Ìº;$(XÇ ÁK¹ÜÛœî;™¸À¥Q@Q@Q@Q@Q@Q@ÍøŠó^µÕ´x4»Í65ƒjÂêÉædaÒïf at F"·ÉÏj§wãË}û]þ×·ž-7K»Ž)/¢„˜áG†]üåÙžF\F­´m,Ä°¢¸¸~'è3Û¤ÉÛ®ÉÞcIÖÝa4…Þ'dÀI•ò¬ÙÁ_¿„;žñ-‡Š4é/4öÊÅ)†Tó#“c€ãfFùYOÊÇ®  lQ\¾…ãK=^}2ËdæêóOŠóÌòDjC |ù{ÙÕp~ÿ Ío“Ì/òÕ†ñuš¼‡ìwÆÝnÒÎ;‘1Ë!¸[v îÊì‘€;Â’4ÐQ\ž¥ñMÓmLíc©O„¾rB¬BÚJ#˜’XXF@ÇÞ*¦½ÏÄýÒêêÖâ;¸§¶·–v…Â,§dFm¾Q0ˆo”(ÈV*ù@ÚQ\~­ãim¬Yì´kç»K»$6ó¢#µ½ÄÞZÊH»wmuUb[ÕW&¤ðOañn‰¤\y-ÝÝ“\\@Gòˆ?1*Ä…3ÔFýÔŠ ê'…nmåÌ$BŒc‘‘€#2Tû‚í^&ö>"Ó~½¥Œ~#‹Ä1éöÃLŽ&º(›xŒêØýؐ1º
+¯ûÅÂ
+ôøO4¸üùnmï­l¡–꼚ݴ¶þa‘TY¾HdpÁJàmÎü¥\‡ÅÂßR—R´»ÒßN·w1]vX|H<¦pAòäwÊxäd/Æ:8ÿ „:v}Vóìú…œò<2ÌÓ¸(dlC†8RìFh]«Ž=4­kLð÷„­ë‚ô Ú”›®ÛìRFˆ‡“nÈüxü´*N|ÇÞc&½üRWɁt-Uµ)|ÃýŸ¶‘Q6n}í ‰”y±ý×n_ʸ\û‰:þœº¢Ç}þxPšÜ¬r4"G`«ç÷q;ƒ·nÜ‡Ê 
+zd·%ð†¥«E©h.smxáeX–éL;ƒªþì"b¯µ'	ŽoÅ/âímÞÚóÄvº…ωDWol[Èû/™)‡h`PâB¿+yÀ°Új¿t­ÞÞMfÞïN–WpÐ]yhȈ»ƒ¿d€C¶&v;ˆ
+J°\}cÅÚV—o­kúo†¤þÕD»´Kù-#O´Onte÷t|—jmÌ(í–¿ö[Ë)õÏí¿ôø]¥ž'ìÞTâÔ¤’'ÌÏÙ>d>fw9ó
+G>©q}ã9éüO‰;Ý:ÃoÌcH¬O– ˜ •¤æ1œ³gä2g¼½×ŸØ¡M*úæþî&˜XÂa".Ð噤XþS")Öã 2ôý}µï¶Q>2;ÅÔ%…Y®"¸ÉEŒï& Nä;¶BaK cëvÑÑ´
+Fa©ÂH–IßeRÊ×UŒdÆÛb,ùùÙZ”yªÁbsÅ;¿´tÿ ¶jÿ cySyßÙŸhó>јü¬ýŸ÷›vùÿ ìgçmðœYµ­•Âiz¬‹*Çc²Ü´«Å$‘ºØ
+Â6ûÅY2„Sº«Ü|EÓ-l㻞Æú(.bûE”²Q.áʏ0;H%ýäëŒdïU ±Û@eÿ 	N™à¹o·-5èâÕ'ÔLÇÄRåÃÄS÷AÁ½ä‘û¬WYo‹ÅïŠ$Šîí¯M½è´­™bY7Ÿ±•’IL|¼qÉóNð3ÔAâ«ŸE£$7by-Å™"Ù…#<ÆØ‘F8ÞP o¶ÿ –«Éã¿;Ão¥êVšÅüï²-:ê%…,z¸P«XÆ:¨XnÖlo¬G‹–ÜÙ^AÒ-ԍZÜò…„›óÏÎVVÛˆÎVtƒûcþì ý¸Ü‰PJÞւàeëU¾â“2äÍ ÜcÓ¾%iº»ÜG§é:ÌÒÅ{%‚ÆÖë	’d]ÅTÈÊز6‚d0RÈBé³	 ‚í^'¶ŽT(¹I&¹{]‡æÁ),nŒŒ©lÐ?§iÚ†§âmÚçÄøseÛ@$žâ$@,ö¬Žø™O›ö’»Š±
+@&3ƒ‡àoøJLz¦«öè&Õ|ËÛÄlÁ$EÝÄÒ±C·ošóÚ!Nä. )¯@Ð<]gâ²lï­VöÓ햍wO>1°9 1#i‘Ì mÀ¡eù«./ˆ°þÜžÆîÆ;«(ç‚{¨R&ºˆ:¨PK|¡d¸UÌ…S÷…””ËÐ?X¾¥/ˆ-$Žyf“ÃS.8ƒ»†&áFÎNH²[ïg \Vö> _Åu¦Mâ}-Å÷Ød»’íÌ[g²ÂÐï^Nï6à2¨\>T¨$Ÿ4Kµ´žÛJ¾Ô|™bh"‰ÄO,²ZŒHÎ7˜2­È|©dÜÂäþ8¶þËÔç[k»I-l®®c3Ä’6ÿ ,à*IÉŽB‚ÈýÆ+ó ?ýNËÄá`×$–ëOœXC2ZÕ¬ÆцÑ!œ¸Û?;F<¼ÔiŠQ'»Ô£Žˆ†øí¥’¦-ºbŸ¼Xâ‹È0®%†å—”3¿AñJÓ®5%·»/bê’Ý¢äœ|Ìî¢ýÓ1ŒIÿ ,÷äfDñŠI}sima}t²þêÖ	!37"Ž
+Ä`ƒµ²øØv– ÃŽúzÈúµåó]êZ­ä±]!Q%ãT\aWËF`ǨÀÎЊ9=fͨÄök/­Ã{¨8f\Ú'ú=ÒÙ•ßû°v´c)òä‘/ÎVºM/Çz·ö]RÚÂù­¥ûE½¦ Ödù¬›ãFd;–
+ü.Ó´);ÆÁ©§x¯MÔ<5q¯“$6É#Ìí¶@ªƒ,U¢.’wFnr¿x 8¿ôïøHÐá+ÿ „g쟸ÿ Ÿ´ÿ iïù×üþ_—õŸèùûÜæ·-o.t¯뚆¡q©
+*y§¹k˜œ$)·–IMäy!J…Ä¡ä ‹št}GNñ‰Å°•­å’0—À+,dÂÎœ8Û°°,Bd9c¹ñ–”t››ÝOM»†ÊÙÁuf6ž9–2·•GI¶®ç*¹•Š)p_^^iÍmwwž©‰!¶yVFó_íØH± ò¼¾e
+ÔùCx9Ã{«/kÄGâ5³ží¦F³iÛ}Á‚ÛÈ([÷eAJw~èmE“
+# ‹â>q\[[_\[Åh/ng…£·‡|¨ìÎklh_!Æd
++^½¾¾ñ,2éSªéwbp¦=×ÉŽLÞcq-‘»hÚéœØ M™bñžº	
+¬¯l’m˜ß)šMÇ(òד„Î ù‰¤®.Ï⇆—͝¼‚9¯^Ýã·ò\$͉æG)#·˜dlò9f³+…Øñ/Šl¼)oÞ¥‹g#•’äK¬Xä;«9 1v;Np可x’ÏÃßcû\s¿Ú¥ò“ÊQÁüHÜÜñn‘¹ÚƒŽnóâ Òõ~Ùk#i…/üÛ ±ÄHnÖÝ旁¹‚–8ȍò(}€å‡ŠôÛŸ	ŸÀd–È#kUŠ0ÜÌÝå€nÙóUx<k¦ÏÈ°]€ÉdÜ¢ÿ ËÔíx!°À2YIR¸e. ’Šãï~#èútÜÞ[_[Ú%ܶ)s2"G-Ê;§”¤°ë±ˆâ08gVgt}ZUÂs´ûd÷LÈ·Œ4¨ÅåÝ·åx~RAÈe,¡™@:Š+—Ÿâ†Óí_cÔ`Ծ˧Üj}‚xæÙ;7†áŽñ´#bÿ Æ:^™¬\é÷ž|fÖÑîæ›fUcU,Çh>aPùÂìÝònßòÐAErzWÄ+Z¸³¶°·»¸žååB°ùr¬F3ýò#´x:6CÕ~þõ” QE QE QE QE QE QE QE QEN÷M†úëN¸•¤apn"
+F¤‹
+ÇM²1ãô9z¯ƒ´½kNÕì/¼ù-u[¸®®>ܘÄ@( d).{òØ#ŒtP>|#gq¸êW—Ú‹Iisg3\Ê›þXq„U	Ä(À£–$%«SM°m>Ý£’úîöWrï=Ó)f8 `(TP 
+ u'$’nQ@þ›á=1´±åôÐi‘"[[Í(dWX¼‘/ÝÈc*TŸ1m»ŽêÂ6n·Qý²ùa–Sq+(	m1”NdA·æo4ýæð9P–SÐQ@¿ü ¶¦=”×·Óy–—ö²Líw’	%cµ†Ü8À g¡«—„lõ6Õ——ÐÁ©Äéso¡Q¢òL¿w%„`(RJ|¡¶î« ¢€0õoÛjÓ]Î×wvóÜ%¢ùÌfÚfš6PÊÃ;œç ‚ àU?ø:ßÂQ]¬?ò׈%X$.Ôîf2JØQóÌß{QE s÷>Òï4èì.|ùmVîê鐾7›8‘I ¸¸|cayàæH|/lmõ(µ+»½Qõqis-ÑDf€ÄcÊT 2C7|Çž7( }ü,[ɝuÝUu(¼Áý¡º‘‘önM‰TùQýÔ^S9Ë9jðøBƒÃÖZÇ9Ó,帒8§•™&FBß{hYÜwp¼žsÔQ@ûøQ%òe—XÕ^ñ<Å’ïÎU’X¤Ù¾/•BƧˏ˜Â0+Á™‹eÅðþ«ë]Rúí㹸¿•`Š`cˆÜ<Ëæ&åÜ®!˜©\ùy$í-óÒŠ ǽÐMçئMVúÚþÒ&„_B!2:6Òá•£hþc1ÂŒ㠐dÓ4ãͲY#Aeob‘Ü©M€gœþð‚I9À÷Î¥ÏØøFÎÁ´ý——ÒG§JÎ)%!EŠH’ Œ¨Y[æ9s…ÜÌ
+¯‚`¶û9·ÖuXZÊ#o§²<CìP Æ£ËÄŠB ýðü€‚殢Š ô𭍕ՃÁ5صÓÑE¥“K¾(]b0‡\åóå’»wmä¶ÝĵIâM2ãRÓ£k³Rµ”Mi/œ"òßî1È>ãÈ9FëØá†ÅÅè?áÒti!ûuÜ7ójrê¢â)„­m4ŠPª4ª|À#%H¤¶KaIn7l7Û¼w·Ñ2K×%Z3öÇŽá®TÉ”8ýëÈß»Ù÷È袊 åü#áøG´í,]^Ouwe§¥š+K¾82Ê#%CgOÎNР(Uùjž‹ðþOéÖzõÜ÷VvPÁ,Á–ÒE1HÍeË,1¸n`PåOiE sçÂ6nï$×—ÓM'Ù’Ë(fv·¸k…?wŒ»¶@Â…ÀP 
+ŽãÁZmÍ­Å»Ïv{}B݈uÈ[ÉD²‘òõ0¾ƒ®z×IE s÷>KE¯×XÕaºMâÕÒe?eeU¤:±UùdÞ`LWƒÀ¶$Òoo´É—4nc‹Ê†#£‚¤[BrAl¯ÞÁ õP7cà#NÑ´Ý&Ñ®â³Ó®'žÝRr¬¾jÌ¥w˜ '|C)É æä³M'QÓîäžýu=ÿ n–v
+÷£œùaBüŠ«ò…û¹ë’v( 4ð½³¼O¨ÝÝê¥eu¾(é!‘U„"”UF$“ —biÙøÎÓL6Úš¬Ð®×‡Î¸b˜H&3goÏ!•D„ɼ Ve=EÇÍàµê×’]j—Ïgs§Ãe0ûF^é|ÉÚe”Ú¼ÕÁM¬Ÿ0B‹ÁØ>³‘µÕ¸’yíu¬}¦ÙØ_Ý,-´¨7"®rǦF9­Š(—Á4WQÜk:¬Ë}‘|âQv¬¡:¬`
+ȱ¦T+ÚT³—Ð×<7g¯ùi’xñ–Òy,o.ß6È8VØ™+‡~V9Ø¢€1õ?¦¯§Eew¨_ü£ÉWUû\L u‘Bíù±÷+/;J‚sŸuà[—¶q{}[Ëu2Ú>^k…¹Éʹ*#/û 6àH=EŸý•ÿ °}¾ûÞû_ûíû·oÎ6ýîvcf>]»>ZÇoØo·xïo¢d–)®J´gíÃ\©“(qûב¿w³ï‘Ð(EÅÁðþâa©_]±MNãR¶Š)ŽÞvžGŠdܹªà$ÆNIF$±è4Ý6ökÁuwqq5¼PK%ā‹ly_wA‚Zgàa@
+(­J(Ä~¶ñ-¹Šk»»Gky­[R›š	Bù‘êÃ
+±@6Œ““S𭎳u#ê]ÜZº86M/M:ãçRcv]¡‚üŶî;«rŠ DzðúZj0jj×·‘E4F[—S¼Hb'åUU\y( P£ï15©m
+¼Q<ÒNèZY†rÞ;@=x zRQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xMÅÅýΩª»ëÈ#S¼EXõK„UU¸‘TW   µ{µx?üÄ5oû
+ßéLµêe4áR³SI«uõG…ĪRÃFTäÓæ[;taþ—ÿ Asÿ _ürô¿úëŸø8ºÿ ã”ê+è>«Cù܏úþ/þ~Ëÿ æ7ý/þƒ:çþ.¿øåéô×?ðquÿ Ç)ÔQõZȾä_Åÿ ÏÙàOüÆÿ ¥ÿ Ðg\ÿ ÁÅ×ÿ £ý/þƒ:çþ.¿øå:Š>«Cù܃ëø¿ùû/ü	ÿ ˜ßô¿úëŸø8ºÿ 㔥ÿ Ðg\ÿ ÁÅ×ÿ §QGÕh"û}ÿ ?eÿ ?óþ—ÿ Asÿ _ürô¿úëŸø8ºÿ ã”ê(ú­ä_r¯âÿ çì¿ð'þcÒÿ è3®àâëÿ ŽQþ—ÿ Asÿ _ürEU¡ü‹îAõü_üý—þÿ Ìoú_ýuÏü]ñÊ?Òÿ è3®àâëÿ ŽS¨£ê´?‘}È>¿‹ÿ Ÿ²ÿ ÀŸùÿ Kÿ  Î¹ÿ ƒ‹¯þ9Gú_ýuÏü]ñÊu}V‡ò/¹×ñóö_øÿ 1¿éô×?ðquÿ Ç(ÿ Kÿ  Î¹ÿ ƒ‹¯þ9N¢ªÐþE÷ úþ/þ~Ëÿ æ7ý/þƒ:çþ.¿øåéô×?ðquÿ Ç)ÔQõZȾä_Åÿ ÏÙàOüÆÿ ¥ÿ Ðg\ÿ ÁÅ×ÿ £ý/þƒ:çþ.¿øå:Š>«Cù܃ëø¿ùû/ü	ÿ ˜ßô¿úëŸø8ºÿ ã•KX¸Ô-tKûˆu½qeŠÚGFþ×¹8`¤ƒÌ•~³¼Aÿ "Þ©ÿ ^’ÿ 袦‚ƒjnÈÖ†;êÅ:²Ýuæ}EWÇ£…Q@~4žk_ø†âÞY!ž-2åã’6*ÈÂ& ‚9s^Gþ—ÿ Asÿ _ür½cÇòO<Kÿ `«¯ýÕå5ídô©ÔççŠ{n½O™â<EZ>ËÙÉÆ÷ÙµØoú_ýuÏü]ñÊ?Òÿ è3®àâëÿ ŽS¨¯kê´?‘}ÈùŸ¯âÿ çì¿ð'þcÒÿ è3®àâëÿ ŽQþ—ÿ Asÿ _ürEU¡ü‹îAõü_üý—þÿ Ìoú_ýuÏü]ñÊ?Òÿ è3®àâëÿ ŽS¨£ê´?‘}È>¿‹ÿ Ÿ²ÿ ÀŸùÿ Kÿ  Î¹ÿ ƒ‹¯þ9Gú_ýuÏü]ñÊu}V‡ò/¹×ñóö_øÿ 1¿éô×?ðquÿ Ç(ÿ Kÿ  Î¹ÿ ƒ‹¯þ9N¢ªÐþE÷ úþ/þ~Ëÿ æ7ý/þƒ:çþ.¿øåéô×?ðquÿ Ç)ÔQõZȾä_Åÿ ÏÙàOüÆÿ ¥ÿ Ðg\ÿ ÁÅ×ÿ £ý/þƒ:çþ.¿øå:Š>«Cù܃ëø¿ùû/ü	ÿ ˜ßô¿úëŸø8ºÿ 㔥ÿ Ðg\ÿ ÁÅ×ÿ §QGÕh"û}ÿ ?eÿ ?óþ—ÿ Asÿ _ürô¿úëŸø8ºÿ ã”ê(ú­ä_r¯âÿ çì¿ð'þcÒÿ è3®àâëÿ ŽQþ—ÿ Asÿ _ürEU¡ü‹îAõü_üý—þÿ Ìoú_ýuÏü]ñÊ?Òÿ è3®àâëÿ ŽS¨£ê´?‘}È>¿‹ÿ Ÿ²ÿ ÀŸùÿ Kÿ  Î¹ÿ ƒ‹¯þ9Z>¸½‡Çjê²Ç5Ì©$sê3ÊŽ¿f™€*îAåTôíT*ç‡ÿ äzð×ý}Ëÿ ¤³×.7F8y¸Á'nÈîË1˜™âéÆU$Ó}ÙíTQE|©÷ÁEPEPEP^ÿ 1
+[þ·ßúS-{Åx?üÄ5oû
+ßéLµëdßÇ~Ÿª>{‰?Ý#þ%ù1ÔQE}1ñ!EPEPT5ÉR’7d‘-eee8*B}jý6HÒhÞ9^7YXd0=A•3W‹HºrQš“èg^Ïq­ ZVûìö‰4[FzÉ=2jƒë—#È€IšþaiVÆg .Îw¡>`ä’0þ!Xt«8|̤“oC}¢g›å=To' ñ:àg ¦Èƨe`Ky«q ”ḉ·ÂðOð¯ Æ…Wvžþ¾GT*ÐVRMÛÉyú÷ÿ >–†ËP½¼¿Ž6‚8"û$7£äȬûÆÎÝ6ŽO¡ç+Ó¨¦-•º¾’ÛcˆÒ%qÛ%£-œg
+Žp
+jCioo!’–61¤X^ EÎÐ@ãùÕEÒÐý¢y¶iŒð”vG‰›%Àa‚2KƒÑÊàË䨭­ÿ ¯òÓæO´¤Ü¬¬­ý|ïgè·*C«]Ést†8òE½‘°ø™ãÆᐌ©ù¾ùlU(|G5´SÅn®.L‚KyaH÷Éì2‡$HpÊ?‡89ÅmE¢éм«eb%•¿x°Êç$€~é<b„Ѭñ
+•
++Öp‹•^åp*:öø¿¯ëú¹ª­…Mû¿ð×õý|¶Ð©<×ó]5ƒÍ»2Ë®ç»ÌS’§ò‰É
+I$pttû¯·i¶·›6yð¤»3»€8Ï~µ
+Þœ¤¸µë$¬ITb6ù›~ép¼g mÈnÞ­m¢·…vÅEÉ8P05¬#%7}¿«~§=IÂT×.ÿ Õþý>ç±%Q[áEPEPYÞ ÿ ‘oTÿ ¯IôZ5âùõOúô—ÿ @5_áËÑšáÿ ‹UùŸCÑEðçêAEP?ã¿ù'ž%ÿ °U×þŠjòšõoÿ É<ñ/ý‚®¿ôSW”×½’ËÏ—ê|Ÿÿ ˯û{ô
+(¢½ãåŠ( Š( 
+œ¾ÊÙ]‘n§1HÈpÁDnüÄì=pN0pFs^>ö¸-!ºó£’Ü*^Ïæ#‰%ò÷+nf àõé€võÎäðEsC2îFÇr äG ƒ‚ä‘U#Ѭ".V-!ÞVfsnBXœ’¯`@sΜܯëOóÔê¥Vœci®ÚwÖýûhT´Ô¯Zkc9·h§¹–×jFU•£eòXä(ü¸ãpäãšòë·«c¥K6í-å´r²¶Uw4.ç÷­ØôztÓmc»7+y™,‘Š+¬©¡ŽNH9>§4/<9c4 at Coýñƒæ32ùBTvŒ	Âô±“Q(VPvzÿ ÃÁûÍaSê'%§§¯Ÿšõ±wO¹šcu
+Á¥¶›ÊgJ«åò“¿Ž§¦{àa®¯¨.—qy…Ýl†¢ë>ã‘ r¨¤”" íóÿ ²I5ÑÚÚCgHU°NægrìǦK1$œ 9= «ëÃÓÍhÖ>]«Ûùmo#«G;2 !@ØPÝ
+îÝ–;J±¨¢­çÿ úû÷
+¢äù¶ÓþßÚþ›"ÔڝêM~mÄPÜÅk –- ‹æaž‹æ÷º|¸Éuž¥tú»iÓù,Ñ	wÉÜTBÀ€IÀÄÄOLñÒ¯½…´‰p­EÉ$ùˆ%€PÄm\Œžµ	Ѭj0’Í+|àìN]H
+bA
+8notÿ «ÿ •ŒÕZ¶qü<–»÷¿ßäeXkº…Õª]ɨ€Im*†ÜÆTˆœáB™3ß#Ž1“%ö£v‹{#•…¬Ã\¤XegHÏ#qùdWSÉêË.A8"ŏ‡ím.fÄ»|Ä0¨vá4U:1R¤ŒçÈÁ©nôxfYTûAÛ9,N#'2*¯E/Œmë»$Y(VäÕëý_Žæî®Ú+-4éé¦þ·êöÛCNŠ(®ÓÍ
+(¢€
+(¢€
+¹áÿ ù¼5ÿ _rÿ é,õN®xþG¯
+×Ü¿úK=qãÿ ݧèzOûí?SÚ¨¢Šøóôp¢Š( ¢Š( ¢Š( ¯ÿ ˜†­ÿ a[ïý)–½â¸YþXMyupšî³ ¹¸–ᣌەV‘Ë°¡'cÔšîËñ0ÃUsšvµ´ù^o©Œ ©Ói4ﯣõîptWsÿ 
+®Óþ†=sÿ %øÅðªí?èc×?òWÿ ŒW¯ý³C³ü?ÌùßõoüÑûßù5Üÿ «´ÿ ¡\ÿ É_þ1Gü*»OúõÏü•ÿ ãlÐìÿ óõoüÑûßù5Üÿ «´ÿ ¡\ÿ É_þ1Gü*»OúõÏü•ÿ ãlÐìÿ óõoüÑûßù5Üÿ «´ÿ ¡\ÿ É_þ1Gü*»OúõÏü•ÿ ãlÐìÿ óõoüÑûßù5Üÿ «´ÿ ¡\ÿ É_þ1Gü*»OúõÏü•ÿ ãlÐìÿ óõoüÑûßù5Üÿ «´ÿ ¡\ÿ É_þ1Tõ/…Sum/Äú’ÎŽ’é-ÊÊ 2Ä
+qóáñÏÊÔlÐìÿ óõoüÑûßù•ÐØø3Kšò=6ÿ ÄZ冬ÙÖclÄXÀæÜ	”»+Ê‚7„?(Øÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¬ïÈ·ªפ¿ú¯Jÿ …Wiÿ C¹ÿ ’¿üb¢¸øI§Ý[Ko7ˆuÆŠT(ë›a•#q
+Lóz‹I?Ãü˥ø¨MIÊ:>ïüB¢Š+ç³
+(¢€9ÿ ÿ É<ñ/ý‚®¿ôSW”×µjÚl:΍}¥Ü4‹í¼–ò4d
+êT‘Fp}
+qßðªí?èc×?òWÿ ŒW§—c)á¹¹ÓÖÛ|Ï9Ëjã¹=›K–ûß­¼Ÿc†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿üb½/횟áþg‰þ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢»ŸøUvŸô1ëŸù+ÿ Æ(ÿ …Wiÿ C¹ÿ ’¿übíšŸáþaþ­âÿ š?{ÿ #†¢ºOáõ¥•oo¯k—:…ÆE½°kUÝŒnvo ìr762 ̪Ö,~ÿ ¡ÆoüGª‹£’ëÙö.I!A0e°07`nÆv®vƒûf‡gø˜«x¿æÞÿ È㨮çþ]§ýzçþJÿ ñŠ?áUÚÐÇ®ä¯ÿ £ûf‡gø˜«x¿æÞÿ Èᨮçþ]§ýzçþJÿ ñŠ?áUÚÐÇ®ä¯ÿ £ûf‡gø˜«x¿æÞÿ Èᨮçþ]§ýzçþJÿ ñŠ?áUÚÐÇ®ä¯ÿ £ûf‡gø˜«x¿æÞÿ Èᨮçþ]§ýzçþJÿ ñŠ?áUÚÐÇ®ä¯ÿ £ûf‡gø˜«x¿æÞÿ Èᨮçþ]§ýzçþJÿ ñŠ?áUÚÐÇ®ä¯ÿ £ûf‡gø˜«x¿æÞÿ Èáªç‡ÿ äzð×ý}Ëÿ ¤³×[ÿ 
+®Óþ†=sÿ %øÅ[Ò~ÙiZÕ–©ý±ªÝIfìñÇ9ƒf捣$ì‰OGnõ†'4£VŒ¡îý?ÌêÁd8šˆU”£dû¿ò;*(¢¼ëŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( 
+÷Ö6úœ–·Qù¾	ŠAYX`« €AV?üN4úŠiÿ ¾o-Ðß_hÆÙ}«ÿ -\óÐQ@ôÝVÇW·iì.cÌrá¢p(êyGV ŽàUÊËÔ´8oîò+«»õ@‹ui V+“Ã+’–Àum»˜®	ÍSÿ „…ôÝx™`²_àÔ"-öI ã.Äb'#’>e
+îs€‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ±ïµk‡¼“MÒ-¾Ñv¸Y®E™ æ|Á™¶Â4ÉåwÕÕê¿Û.<Iû«=¶Ü¾ ®®Óû¶äʧœÊBü¸1çx‘6,lmôë8ímcòáL$’K31Éf$’X’I$’I 
+úfg¥y²BžeÝÆ
+͊ۨXgF g8
+£…
+ ¡E QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QEÏÿ b^hß¼ðôÙ„qý—w9Ø<~íö»Ã·
+¹Œ  -¸\ÓuÛmBᬤI,µ4C#é÷L‚uL€f‡#æRFr¤†
+J§©ivšµºÃv’Ž7ŠWŠHÛee8$Èb:(åÏý£Yо[¨§Ö¬&î ŸkŒu;âUUu'1üç*¢6 ±Ô¶Õ´ÛÛ{k‹MBÒx.œ¥¼‘L¬³0HB€ŽHÝ>†€.QE QE QE QE QE QE QEG<ðÚÛËqq,pÁ’I*¢’I< 9 	(¨Ìð­Â[´±‰ÝÒ2Ãs*Ô€YA=·Z§©ëú_•¤÷Sçȵ¶ˆÉ$„c<rTb¨¥—sŠ ±}}o§YÉuu'—
+`±$UFK1$  I Mcÿ gÜx÷šÍ´öv„ÓaºSÝ®lUÔò[™
+’_q`±Ø±Ònò=KW¹ûEÚå¡·Lyd‚—ò†fÚv™'–Ú#Wd­Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š +‡ñ¯‡eŸPÒõ=)í5sw#Iyc
+3œYÎȯˆßˆ„cy“q5ÜQ@µ»Û.;?ù–“OpRÊââI|«Œàyhn12¾ìü’å›’„ Âw•ðCuo-½ÄQͨRHäPÊêF ðAb°ÿ ³5çѦûFžœÿ dÊ«ò/÷-äÊìêHWܼ*)‰y Ÿ¦k6z¯›/åÝÛà]YÈ@šÙŽp$PN3ƒ‚2¬9RÊA: QE QE QE QE V šëÀ¾!··ŠI§—L¹HãK3±‰€ I'ŒVåsÿ Ú2ø“äе+Në5[m’yýÈ7FÁûÎC(ûƒ-¸ÆÁø¶ËUOXGg©ë:¿Ù­æŽòé–E]<;Û°âÅ"y]”ªÝžQÎÕ:ZÔWºüòë2ë3¤+¨ï„ªHêûf]Ɉ‘#È!WH‘ÞCè–66úuœv¶±ùp¦H‹I%™˜ä³I,I$’I$ÕŠ (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š ÏÔôk=WÊ’dòîíòmo# MlÇ(Äg åXpÁ”sþߪh_&©úŸðßYZî’1Ð	¡BYØñóĸ$¶R5\ž‚Š Ž	ặŠâÞXæ‚T‘°eu# ‚8 ŽsRVþk{‰nô¨ô»‰œÉ<bÝd·¹ryy#I~OÌŒ„»‹¤±×¼ËÈôýJÊ}:ýò$ᘀIò¥+tbí“j–(¢€6(¢Š (¢Š *½õýž™g%åýÜ–±ã|ÓÈ#EÉ e$øÕ}OY³Ò¼¨æ2îã"ÖÎ2×,1ŠHÎ22NG,UA"½Ž™y5äzŽµ4]E“m
+D6»‚Ç2I‚WÌ!~^Ss† ¯ökÏ|׫ömúX¼Efº^ÆbOËw‡nâ @gŠº
+( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŠóÛ‹z}Õ´Wø{\h¥@èضR23T¿ðµ-?è\×?òWÿ Öë]ê þær¼v;:±û×ùíÁÂÔ´ÿ ¡s\ÿ É_þ?Gü-KOú5Ïü•ÿ ãô}V¿ò?¹‹ëøOùûü	™ÞÑ\ü-KOú5Ïü•ÿ ãôÂÔ´ÿ ¡s\ÿ É_þ?GÕkÿ #û˜}	ÿ ?cÿ /ó;Ú+‚ÿ …©iÿ Bæ¹ÿ ’¿ü~øZ–Ÿô.kŸù+ÿ Çèú­äs¯á?çìð%þg{Uï¬,õ;9,ïí »µ“áž1"6#*x8 ¸¯øZ–Ÿô.kŸù+ÿ Çèÿ …©iÿ Bæ¹ÿ ’¿ü~ª×þG÷0úþþ~Çÿ _æný—TÐ9°óõ]4Ë”²ï»B{¤ÒÈ®yÙ!ÈÜÄ>c­M7T´Õ­ÚkG„r’$±<RFØŽ)ÁCЃ\wü-KOú5Ïü•ÿ ãõÉøçÆZÒä“Að¾¥o¯2#Ôæ;gŠ.Iá›{€NB³8bÜêµÿ ‘ýÌ>¿„ÿ Ÿ±ÿ À—ùžÓYz–«4a¦ÛGy©2	<©%1Gy#|ŽŠ‚A
+’Ä+²üõ{«øÏQð‡|0Ö×vGO¸Ss{m<{Ú(Èò6‘(3òž¦8Ûp9Ç¢xcÇžÐ᱓@Õgº5ÍÜVö±©:dhbÒ0sKž:êµÿ ‘ýÌ>¿„ÿ Ÿ±ÿ À—ùž‹¦iŸaón.&ûN¡qƒqrWnìgj*äìrv®N2I,ÌÌÚÁÂÔ´ÿ ¡s\ÿ É_þ?Gü-KOú5Ïü•ÿ ãô}V¿ò?¹‡×ðŸóö?øÿ 3½¢¸/øZ–Ÿô.kŸù+ÿ Çèÿ …©iÿ Bæ¹ÿ ’¿ü~ª×þG÷0úþþ~Çÿ _æw´Wÿ RÓþ…Ísÿ %øýðµ-?è\×?òWÿ ÑõZÿ Èþæ_ÂÏØÿ àKüÎöŠà¿ájZй®ä¯ÿ £þ¥§ýšçþJÿ ñú>«_ùÜÃëøOùûü	™ÞÑ\ü-KOú5Ïü•ÿ ãôÂÔ´ÿ ¡s\ÿ É_þ?GÕkÿ #û˜}	ÿ ?cÿ /ó;Ú+…ƒâ„×–¶ï¡k0›ˆ­ÖI¹Ui"“¶bq–®ê³9Óvšiù›Ò­Nªæ§$ד¸QEEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÏÿ ‘oKÿ ¯H¿ôZ5áÿ ùô¿úô‹ÿ @£_qKøqôG帏âËÕþaEV†AER÷Q·ÓÚÔ\æu·B~vŒûcñZ—%vTbäív[¢ª\j6ö·övRóîˈ€Ý]Ä“éÓóøTÓå€Ïõ«Â	S"Ì¥rqÏP Ÿ Í.xÞײ“¶úýnŠ­u}
+­ÝË6õµFyU,0»±\`óê(mBÉa–f¼·Bþ\®dQ³¬sÁäp}ióÇk‚§&®‘fŠ…/-]£T¹…š@ pw	z‚ˆúJcßB—†Ù›¨®ÌH
+»›jžìA²2s.âä•íbÍÞZÄÁd¹…È"œœŒ…ÿ x‚:óLmBÉf–¼·žd¨d‘qÌ3Àär}hæŠê
+{"ÍÔ‘%RѺº‚T•9äõøTbòÔÜ5¸¹„Τ)xÜ	€Ç\	úNè\­ßM‰¨ªªiñ@'’úÕ!$(‘¦P¹+¸ç©RÐæ§7®ìÍØâ6Ëã
+}ÎåÀ÷´¹£Ün[¢J*”š­’[O:OÉ,’ù.¢Äg¦Ü·©ŒÕÚ“Ø%	GtQEQ!EPæ!¤ÿ ØVÇÿ Jb¯x¯ÿ ˜†“ÿ a[ý)Š½â¾g9þ:ôýYöÜ7þé/ñ?ÉQ^Iô!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÏÿ ‘oKÿ ¯H¿ôZ5áÿ ùô¿úô‹ÿ @£_qKøqôG帏âËÕþaEV†AYÚ­‡öƒYDñù	ŸÏ±ò42!÷êÀqÏ5£EL¢¤¬Ë„Ü%ÍÎZ÷DÔo­?|Ë%ä…ái
+b	cF vgrü3í©bÒîn5+[»˜n¤	:ûcBYBG6Ò1Œ‘prN{dô”VV…ïvt¼uG[.ÞžŸ×C–·Ñn Ð®íRÙRI4x­Õ¨ÌÀK¸uÆr㞇=zÓ®4Ûén£¼†ÚKAoåF±[´Eð‹2“ï“oïW¶œàg§¢«BÉ&ôþ¿PxꍶÒ×þŸ‘‡£irZ_Ís4,àP²JÈÒe¥–G¨ ™I c<qšlÐK$Ú¬»¦v׊™xÔGÐôÉ0¸ ‘Èç æ·©¦42,…È ¨lrÆF}ä*½‚PP[_æGÖ¤ê:woÁ§úÔ¶„ÒÝÜýƒdÓÌÁÈŽ»(—lªx(L6ߘmÂäÔ7z.¡4–Ûn¤ ÝK/
+ÂL‹ P¼o-ûÌÄäç€[ECÂÅÞíšG8ÚÉiëþeÕ4=…¤—ÖVÍ
+!i‘6p6灌V-¾ÿ JdŠa…ËÇx’+,ϵ1“ŽÍœr£ºŽ¦¡[;T»{´¶…n\my‚ ì8à·R8«)I­vÿ 4ÿ O")ׄ"՝ÚïÖÍywó1llnt»MÒŤk{&‚X (;ylO$)FÉÎrG^MV¶Òµ+(ì²Ë™í%y–@V1
+°ä¶c'®~Zêh¥õh÷Ò°Ö6wnË_^÷ïÜå´m´½6ú{uµ´³Ó{©>ñî sœ!-9<në[š<Úè–ó.Ùb¶r(qVE¼"„C”›v&ѵvW¶01銒*<–קõù"kâ=­ôµÝÿ ?ów
+(¢·9‚Š( ÿ ÌCIÿ °­þ”Å^ñ^ÿ 1
+'þ¶?úS{Å|Îsüuéú³í¸oýÒ_â’
+(¢¼“èBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ž´{}B×D°·›D×X­£G_ì‹“†
+GWÒÿ è
+®àžëÿ ×¼Q^¬szñI$´õÿ 3ÀŸág'')kæ¿Èðô¿úkŸø'ºÿ ãt¥ÿ Ð\ÿ Á=×ÿ ¯x¢ŸöÍ~Ëñÿ 2Õ¼'óKï_äx?ú_ýµÏüÝñº?Òÿ è
+®àžëÿ ×¼QGöÍ~Ëñÿ 0ÿ VðŸÍ/½‘àÿ éô×?ðOuÿ Æèÿ Kÿ  6¹ÿ ‚{¯þ7^ñEÛ5û/ÇüÃý[Â4¾õþGƒÿ ¥ÿ Ð\ÿ Á=×ÿ £ý/þ€Úçþ	î¿øÝ{Ål×ì¿óõo	üÒû×ùþ—ÿ @msÿ ÷_ünô¿úkŸø'ºÿ ãuïQý³_²üÌ?Õ¼'óKï_äx?ú_ýµÏüÝñº?Òÿ è
+®àžëÿ ×¼QGöÍ~Ëñÿ 0ÿ VðŸÍ/½‘àÿ éô×?ðOuÿ Æèÿ Kÿ  6¹ÿ ‚{¯þ7^ñEÛ5û/ÇüÃý[Â4¾õþGƒÿ ¥ÿ Ð\ÿ Á=×ÿ £ý/þ€Úçþ	î¿øÝ{Ål×ì¿óõo	üÒû×ùþ—ÿ @msÿ ÷_ünô¿úkŸø'ºÿ ãuïQý³_²üÌ?Õ¼'óKï_äx?ú_ýµÏüÝñº?Òÿ è
+®àžëÿ ×¼QGöÍ~Ëñÿ 0ÿ VðŸÍ/½‘àÿ éô×?ðOuÿ Æèÿ Kÿ  6¹ÿ ‚{¯þ7^ñEÛ5û/ÇüÃý[Â4¾õþG„ÛÛßÜêšR&¬‚5;7f“K¸EU[ˆÙ‰f@  ’{W»QEpâq3ÄÍNi^ÖÐõp8x:n6Únúÿ K°QEÎvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~%ԦѼ+«ê–ëOee5Äk %K" àƒŒQ^_¥øïâU÷‚Æ‹§xbãIDy嵌ÏÁŠ7+&1 at p¬zžBx>‰ã¿ù'ž%ÿ °U×þŠjò‡~ñ‰þé¶çƳÙh~jK¦Áa,NáÔOß6¨#æÁp@=sÁþ%‡Æ°× ·’Ý.щ…È%X£Ž£rœ21ÀéV,üK ê÷WZÞ›s¢o¹’¤u…pN\ƒ…Rr}¥yŽ¼-ð>-@Y™kqÝùŒ¬Íbʼn=ÌÆ3ò㯠.Ep¶›íu/Û“áËä6Þ7a®¡6²•oR»Ô¨b‡ànÉ@GÃâ]åÁ­é² ·k¢ÉtŒ*ÅZNÜ-ÐEFž,ðÜ’Úň4§’ïfE½Œ™²ÅÁŸ›æxîë^?à_hÖŸµOÁg³W»Ñ5g¸ó\ï@Ò 6“´}Åè;}kˆÖt=.Óövðö¯„	©]ê®'ºÙ™=Bî<…Â/Ê8ÈÎ3“@OÚëº=ö£>gªØÜ_A»Î¶†áHö­¹AÈÁ ô5Ïø?ÄzεâÙji¥-®wåY›+„’B›ä¾U‘Š6x!yÝÇyýƇ¥ø{öð…†‘a•ªéNvB˜ÜDw#s¬Ø,rN95YWYøÊÏ&ž‚âR×±«3[×_¼y%zàsÇëŸð–xoûGû;þ
++íÞo‘öo¶Çæy™Û³ns»<c®jƧ®èú'•ý­ªØØyÙòþ×p‘oÆ3Äg=E|Á*iºg‡4«Xlüâ»Ô<¨VÐ\A«\wÆð¥]r>P`	Nƒ]¿-ìÅÍFê=—WÂÑb—LñT2,‰¶&_)ÎQ˜’[ ŒonI ¡âŸKiàK½{ÃW:U싳ìòÏt‚Ùó*£fBê¼|ÃïF:ñZ~´‰á+
+g[º±³ó-!–æa:ˆÝW;_qR»ŽÜs‘ɯ‚x.f
+~{}=%$½BV'•£œ‰ byŒÄ6¸Œ¡éÈjŸcþÞøMÿ 	O‘ÿ ·ö$[~я/íPÎüs·?gÎï“xÝ@÷­¦ÜégTƒP´—OÎnÒeh‚®wàã'<`Õ4ñg†ä–Ö(üA¥<—xû2-ìdÍ–(6üß0+ÇpGZñ
+/ìÛßáò?áþÄ—wÙñåý£Ê8ÙžvçíÛòc§k—Öt=.Óövðö¯„	©]ê®'ºÙ™=Bî<…Â/Ê8ÈÎ3“@QêZ¶›£[­Æ©¨ZXÀÎdº™bRØ' ±8ãØѦêÚn³n×^¡i}¹F’Öe•C`¤Œàƒq^GñVÞÊ_ˆº$Òkú_Ah|­#Ä0ÈlYÍ
++8Ê$ ÆJ/< n|ž‹´:›déz±I{¥<¦Òè‚üF˜ ¹'åÀÛ"ü£ gÄOˆ´8¯¦·ûeÕÄ¢+{A0Œ¿vbNHP:,£Œæ¹=[⎼o§êž3Ñti´»ÇXd].WYí¤ 6y*Çh~à•ûãŒÇñÒÍ>_	ø¶o´Úèz‡™q$¹£eÉ …RbÚXô,¼Õ‹þ=е¿‡ñèÚìµöµ,)Ž^DPÊù(!‰
+»ke÷H “Uø‰5ÅMÃñI¦ÿ LkùoYŽB„™·,›¶lÄjrAàž}:‹Ï[\øWUÕ|?¦ß½­¼Í‹r •SpWpÀ(û¹ËœŽµâ$ÓtâÏ€4¿µ£XYhVÖ÷M!&"yʤð>O0/Þ cïqš“Kûö÷ÅŸøE¼øE¿±%Ýö|yhòŽ6g¹ûF6ü˜éÆÚ öêúŽ½áKV[¾›Ìó„Ë,<HÊ6²»ƒÀÃsÓ¥hišî­ù¿Ù:­ÿ “3ì—	.ÌçÚN3ƒ×Ð×€j?Ú?ðÊOØ¿ãßímöï»þ§í2ã¯?ë<¯»ÏᚏAÅÚcøwRð¾¨t{”´¶ðù¹
+u›yBo5L{ÕÕX‰Hnìáhè?íÝûcû#ûVÇûOþ|¾ÐžwÝÝ÷3»îóÓ§5ÉÙ|PÓn~&ê>”Z@–¨W­z¸žbcJ¦ϹØ`19Cǧ–x'þ'ü*ûøJþÃý¡ö¹>Óþ·í;òÛÕüþ_—·§ÉŸö«oLƒA¶ý§|@š„ZlHmâ{E¸TPn˜[°)ŸùjX±Èù‰$úЦ|Dñ%ç„|	©k–Á%Õ¯•±'RPî•äF=èð_Œ¬üSàk_Ë4mˆý», ‘ï3ó«Æá¸çiRzÖ?Æßù$:ïý»ÿ éDuæTÐ|3ÿ n—ëÿ 	žŸa6˜ñÃæCÉ%é•È,2 ±ÚbFÚ ô…¿ï> j>#óm †ÆÆXþŵ
+Ècs&<Ï™†ì"ôÀÎk¸þÝÑÿ ¶?²?µl´ÿ çËí	ç}Ýßs;¾ï=:s^/ð¾ÆãLÔ~+Øxr?.êÖV‡NMÀíu7"!—àà…ûߍqñCÃ?ÿ ˏü%k÷ûNÿ 7óòüŸøÛ ¨õ-[MÑ­ÖãTÔ-,`g²]L±)l€Xœqìk‹Ðü{y¬|\Õü/±“HµÓÒòÚæKɹa`wn*Tù§œúðþ2óá`|9ÿ …ädÿ gÿ ¤ý£g—öí¿½ß³øwùÏɏmÕCÂcÿ …Ãã¯ø@ü¿Ø—ÙßgÇ—öÜýÍß.ß78þtùq@ïý»£ÿ ldjØÿ iÿ Ï—ÚÎû»¾æw}Þztæ¹?x×RñGŠ¼c¥ÞÁi-è·¶hQƒ:ï•rùb	Äc M|ñ¥oø@íÙu/é³¥îô¼sv5HfSs¶h léÑù¯cøAÿ %âwý…Gþ¸ `¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š(9à†êÞ[{ˆ£š	P¤‘È¡•ÔŒAà‚8ÅGcag¦YÇgai¥¬yÙˆÑrI8QÀÉ$þ5bŠ +.ÏÃZŸouoe¢i¶Ð]¦Ë˜áµDY—aÀa†#ÔúÖ¥N'M¶ÒΗŸižQÚ$*±lî ÆNF9ɪòxkA›K‡K—DÓ_O…÷ÅhÖ¨bFç•L`™¹¹õ­J(œšN›6©©.Ÿhú„)²+¶…L¨¼ð¯Œó7 ÷>´Yé:nŸquqe§Ú[Ovûîd†F™²N\–9br}O­\¢€1ì|'á½2ò;ËéV—QçdÐYG®AFA#ñ©5/
+h:ÍÂÜjš&›}: E’êÕ%`¹' °'$ãÜÖ¥Nm'M¹ÒÆ—>Ÿi.žPZ<*Ñ\mÆ8À¢m'M¹ÒÆ—>Ÿi.žPZ<*Ñ\mÆ8À«”P8t6ÛK:\}¤ZyFChªÄU³¸l99ç&«Éá­m..]M}>ߣZ¡‰žU1€~fäçÖµ( ýOBÑõ¿+û[J±¿òsåý®Ý%ÙœgÆp:z
+±cag¦YÇgai¥¬yÙˆÑrI8QÀÉ$þ5bŠ +/MðÖƒ£\5Æ—¢i¶3²i-mR&+pJ€q=…jQ@÷š¨^ËÝ*ÆæèDÐ	¦·Gq7¤3:ÇÖ¹ÿ x^óþÛÍÁv:Ÿöýñ\¤Ñ£òÞ6GeõŸs‚0>•ØQ@߀|57„<¦hWÜOlŽd’0Bîwg g’lgŒã8Åjiš¢y¿Ù:U‡3ì–éügÚq“×ÔÖ…Ÿý…£ÿ lkÿ eXÿ iÿ ÏïÙÓÎû»~þ7}Þ:ôâ‹­G¾Ô`Ôo4«‹è6ù73[£ÉÓ¹v±$‘Ž†´( 
+÷Özœ–wö]ÚɍðÏ‘•<áQ®“¦«Ù:éöì¥›W6êT)ñò p1W( 
+vzN›§Ü]\Yiö–Óݾû™!…Q¦l“— eŽXœŸSëQÿ ahÿ ÛÚÿ ÙV?Úóûötó¾îß¿ßwŽ½8­
+(ž¥¤éºÍºÛêš}¥ô
+áÖ;¨VU
+‚23‚F}ÍGg¡hú}á¼²Ò¬m®ŒKštG1¨SpÚ¨ Ú=+BŠ ÏþÂÑÿ ¶?µÿ ²¬´ÿ ç÷ìéç}Ý¿¾ïzqRYé:nŸquqe§Ú[Ovûîd†F™²N\–9br}O­\¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¯9ÑüEã
+WD°Ô~ß¡Åö»hçòÿ ²æm›Ô63öœg®(Ѩ®ûOÆôÐÿ ðU7ÿ $Ñý§ãú	èø*›ÿ ’h¹¢¸oí?ÐOCÿ ÁTßü“GöŸŒ?è'¡ÿ àªoþI æŠá¿´üaÿ A=ÿ SòMÚ~0ÿ  ž‡ÿ ‚©¿ù&€;š+†þÓñ‡ýô?üMÿ É4iøÃþ‚zþ
+¦ÿ äš îh®ûOÆôÐÿ ðU7ÿ $Ö÷„õKÍcÃéwä¡ss˜#(åO$`…,Äd 8Éë@tQE QE W-â}gX²ÖôÍ;I–Æ´Û\O$—vÏ7ú¶…@dLgÍ<’z
+ÏþÓñ‡ýô?üMÿ É4ÜÑ\7öŸŒ?è'¡ÿ àªoþI£ûOÆôÐÿ ðU7ÿ $ÐsEpßÚ~0ÿ  ž‡ÿ ‚©¿ù&í?ÐOCÿ ÁTßü“@ÍÃiøÃþ‚zþ
+¦ÿ äš?´üaÿ A=ÿ SòM w4W
+ý§ãú	èø*›ÿ ’hþÓñ‡ýô?üMÿ É4ÜÑ\=¦½âH|A£Ú_ÝiW·×/ˆ,d…×K !ŒÎ:Æ1Þ»Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š +Ìü!ÿ "Vƒÿ `ëýµé•æ~ÿ ‘+Aÿ °u¿þ‹Z °Õu+›×0ßj—#S–jö ZVå‘¿z"¬@‘ûÎXÉùN„&Ô/o
+­ž‘šd¹XšâóbÈ°Kå;eQˆå£À#ŸŸ U/¹acnðBÎÊÓK9.A;¤‘¤n²Çت
+áÈQck[ë»Kˆä¸u¸‹ËfÄòy²&vîÛÛ#hç®@2.<ooÃ:ìŽ+ËKI­þÝp°B†Q;ü슝°ãø;@–6¬<U>® éz|7^T~eÆ.Ày’Gû“·dÃ!Œ`‚‡#'hžC©»CçXÛÚ[ZÛØK«H†%˜ƒ»')ó‚rãÞC"Èšž£­ŠæE•w\¨f`Š’œ»ãËٍØv€½Ô/ô¹¦Ô–™onb_*MãjLêv¯LméÈPO$Ÿ'ˆ5+"ÓPŽÍ-­o&³{y’a#¥ž%+"•£ÿ ð>o˜aIÙ°Ò†œ7—-]ËtQöûÂÌÉÂçnæ,?‹8ÇJ/ÛÇo±¿¾{Xm:„b‘TaFá˜Ðe÷6Á$€VµñzK{yi%´2\Am-ȶ±º[™ÔFT4r  $¹eA`Ha»€Iÿ 	\Ÿf²ZÚHn¤dI"¿F‚m¥FØe •‹aQ‚d¤œ€ ›6¾·µx¶ßß4PBÖÖñoUÀÀ²¨||±Å‹ƒüܶâOÛÍi4_ßHnYä…Ô¥eTeu
+
+ˆ‹•
+À,Ä€nÕß ÿ Ȭì#¨édÕJ®øþEcÿ aCÿ K& šŠ( Š( 3Åò:èö¾ÿ Ñ–µÇ½õÍ׉uK'Öu«QÜpAžž²DªÐÄß4† îvÎæè+°ñGüŽºýƒ¯¿ôe­Uµ±ŠÒâöxÙË^L'1#HøöÄcñÍ f[ø‚YµQ¬Ñl®n沂a12bó7nM¸Uý̘!‰û¼´çñ“C¦è×i¦<Í©ZGr!I€e/-¼{ Ò3’T|½³‘§‡íàÔä\Ü´QÍ%Ì6¬WËŠY7opBï$ù’pÌ@Þp“Á–+-«›»æ[EHí£idQ¤±Jˆހ£qËNXáH Ä·oxtåÒÑõ(ZO>$¹ù6"ÄÇËr£s<xgvX 	Ïм]{u¢[Ïscæya‚k“*¯›-ÂÛœ…Æ<âHàp¸Îã³j
+ZË=ê]]Áq<ŒÒ<2%"FŒeTˆc9pG3PEáË]+÷še­¼×Ñ\Ɛ´3LxÇ, Ú»P ÷ˆáhÓëÑEc¬ßKý—LiøÈo9R5g+Ðd1tÆ~òHä
+Wz®³ou¦Gq`‘4·l­¬ë2ΟgÂuB­º5ê å~c–í¶ƒh£Lº™î"–c» [‡”î‘Î9RX¹Hyô‚oÛßD±êw÷Ú€Äùîª
+´RDWª€6Êü€œd  í|gÅž¡ [å³XšÆøO Y¨/.Ñ°)VgùNÔù¹è,Üx’H-´Ù>Ç	{Ü•ÍÚŸ ±I÷]ßp1©Û¸ILSÅáâ’O4š¾£-ÌѬm91# º<lE).pF{0/†­fÓÀÝ]¬'Ídí"V-(qŒ|Ä“•
+W$)PH ’ÿ ÈÓáoûÉÿ ¤w5èçòÿ ÈÓáoûÉÿ ¤w5è QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE Wgð÷ìVövÞ)×#··b‰6Úª£ dÁ“Àï]ÉÂ7ý
+šçýñgÿ ÈôÂ7ý
+šçýñgÿ ÈõÖÑ@—ü!ÐÙ®ßüGü!ÐÙ®ßü]mæÓèWš5ħ^ñf¥o¦³Ÿ'QSh±¯90k|DpB†ÜUˆ?p²!Üÿ „"oú5ÏûâÏÿ ‘ë­®ì7¾ùô¨ç¿Ó~èÒ•£V·¾ÎÍ´m9Ûq°¨@ŒKþ‰¿èl×?ï‹?þG£þ‰¿èl×?ï‹?þG®–ÆúßQ³ŽêÖO2È©R$2²œ`AHA Š±@—ü!ÐÙ®ßü[zƒ¤¦Ÿ
+Ä÷
+²K)–}»Ý¤‘¤bvª¼ç ¥E QE QE ak¾\½³¼õ…ŬrďiåË!BÀ‰ÇXצ;Öü!ÐÙ®ßü]mÉÂ7ý
+šçýñgÿ ÈôÂ7ý
+šçýñgÿ ÈõÖÔsÏ
+­¼·Ç!y$‘‚ª($“À sš å¿á›þ†Ísþø³ÿ äzËÓ|5y«\5Í·Šµ‘¤"š;B×M‘ó§î0" ùÈÂ…i:±Üx“÷·Æ{m!¸M=+]§÷®•Oˆùr$ÎótÉÂ7ý
+šçýñgÿ ÈôÂ7ý
+šçýñgÿ ÈõÖÑ@—ü!ÐÙ®ßüGü!ÐÙ®ßü]mËÙø-mµkB}{U½k)X¢œ[„ÜcxòvD¤ü²7zê(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€1ï´<ÞI©iA§ê²`K9ƒÌK…  &@Ê_ 
+§peÇiei4Ýio.Âê	,õ8д–îk @-„*r¼¯#z†ÇmpkŽÿ µ‡¼¾ð¤WÃU¶òaÔlÒK×ÿ F·Û乕Jää.°Ù<ô¬ÿ ݝwÃöUÖ§´±2Ú^i÷©0¼ð}®(Úé¤ ù2*M
+¾_ßÜ~óE°Q^/áßxÊfÑôÝcX‚6¼»Š)õ4HXA#ÅpZÑ”ªî¤8M®Uþñ`Ë°þ#ÔuBöšŽ­‰­<Kmc
+‘¶Rn­¢½‰EÓm «R¦N"Ê”Œ {Éø7W¾Ô®5H®ïã¾H]%Š=«1}Ñ•Ln»T˜\3Ǹn‘÷|½e QE Wøm+MðÞŸ«x`j‡L¶A—§Göï5Ú%Xæc1ÞB¨ùòÙÝ2#ñŠotMjZë[û%ü]YËfÂ1¦²ÊÆÞ[»þæU›vå1¨ß
+ {$óÃko-ÅıÃH^I$`ªŠI$ð æ±à‚mvâ+ë複O‰Ä––r©V‘ÊÍ2žA#?w†oŸjÅæãQñF«a{¬jZÄb
+GX·Óá·FŽyƒÜyfi
+âQˆ-DbUãÛµ\Øñ¿|Ú¶œÍ®Çmy±vi%¶VŤŠBê¤Ä/Ÿt¡Ç>`_.6Rë”V?…¯®5Z\ÝIæÌÛÔÊ(WeWR0X ÁÀPà†
+¶Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š (¢Š Žx!º·–Þâ(æ‚T)$r(eu#x Ž1Xf¼ðßÍd¿iÑ­ŠDZkUîa üѯhvî „…H« ¢€+Øß[ê6qÝZÉæBù •*A†VS‚¬ © ‚ V+ûGt¼“TÒ_ÈÔN‘¼¬ º ¶Eˆ
+¡w®ÕûÊ
+4šn·
+åÃi÷>]®¯šÅ¤ÛAÌN…â$Œ8®V RŠ*ž¥©C¦[¬’,’É#ˆà·ˆ$òHDœI$ f!A Këë}:ÎK«©<¸S ¥‰$€ªª2Y‰  ’H k>ÆÆâöò=WUË™2m,Ë€‚1
+1‚Ã!A(¤‚ï!c¦^My£­M×QdÛA‘
+®àA ±Ì’`•ó_—…TÜá¶( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ª÷×özeœ——÷pZZǍóO $–<’ãV+™ñ÷üŠÃþÂ:þ–C@Âwàÿ úô?üÃÿ ÅQÿ 	߃ÿ èkÐÿ ðcÿ Y•™ÿ 	öß²ù³nó<¯7ìòy;ó·o›·ËÝ»åÆìîùzñ@7ü'~ÿ ¡¯Cÿ ÁŒ?üUgë>/ð=ÖœïqâÍ)Û3Å5µôM4. üÑ€I-‚FÜÀ•!ƒ,¢€<ÛÂÿ šmS[M]£k8,¤“Kó¶Âó¼[˜,…AQ,ŠFH‚€*å°zO‡>=±Ô4ïí?êºU¶³å$qÏ.§mµ¡ ’5|ÄĨ.¬-·œ*¤}-§ÿ 	߃ÿ èkÐÿ ðcÿ Gü'~ÿ ¡¯Cÿ ÁŒ?üUcZÝÁ{KnûÑd’"pGÌŽQ‡>Œ¤~5 iÿ Âwàÿ úô?üÃÿ ÅTxÓ·W[Ûø—Fšy\$qÇ3±8  Ù$ž1Y™®ǵ‡ý…tÿ ý+†€=Š( Š( Š( Š( Š( Š( Š( ¹h~"xvâçõIb‘C¤‰£Þ2²‘Ar®¦¼ÏÂò%h?ö·ÿ Ñk@7ü'Ú¦¯ÿ ‚[Ïþ5Gü'Ú¦¯ÿ ‚[Ïþ5Y•ôZ^—w¨N®ÑZÂó¸@U,qœsD—ÑGª[éå_ÍžgR Úçß2.>†€5ÿ á>н5üÞñª?á>н5üÞñªÅþØÓ?³?´ÿ ´m>Áÿ ?^zù_{oßÎ:ñׯøõ+^ŽöÙÚeWˆ,ªLŠÁ™JóÈ!Œu
+}
+ kÿ Â}¡zjÿ ø%¼ÿ ãTÂ}¡zjÿ ø%¼ÿ ãUú•ŒZ„z|—¶É{*ïŽÙ¥Q#¯<…ÎHàþGÒ«XøƒL¿OÙwWöÉs¬²*ÌÈ˸™Éà™J è?á>н5üÞñª?á>н5üÞñªÈ:•Š½Ú5í°k5r«˜À¿?(À'žÕ<3EqsÁ"KŠ$F¬¤dGPE hÂ}¡zjÿ ø%¼ÿ ãU½a}o©éÖ×öry–·Q$оÒ7# Tàò2ë\¥iøþI熿ìkÿ ¢–€:
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+(¢€
+æ|}ÿ "°ÿ °ŽŸÿ ¥×M\׏#–O
+¹†	çhïl¥1ÁJûRê&bA'
+	àv 
+5ÄÅ6¥§i:“jº¢^éíkktÚ·’0ñ£¹‘‚»rFÆ7e€ÚÛz?íÈè®à’óÿ Qý¹ýµÏü^ñª æF6	=ޝ4ÖòkWrê41’
+÷>PòðK&÷Â€@'~:µM§¥Ö™6—zöon±ßÃ1BK*ËqÛ¦ßùf¾ZcæÚ©€¯Jè?·!ÿ  v¹ÿ ‚KÏþ5Göä?ô×?ðIyÿ ƨÏü7bëpÿ fÝ®­Κf±
+¥½¡3Ò&òÃÎÝà…ù±ÓjqÚ]kfëPÒîïm沇û<%«™"›t…öœnä4?3äFÍí3Nk‹†°Ö`ûTèÒ;è÷€<„$J9;Q@N;šn›ã-Y·k,jWÐ+”i-t«©T6Á+Áâ€0nì¤þ̆+½5$‹íúƒ–ºÓ¥½D-rå?ÑЂK)$HxPÿ –•'‡mo"Õ4Ù.í.å¾ÉÔ÷Q8xÊC±Êϝ¯‘qå’ìe]¤ôßېÿ Ð;\ÿ Á%çÿ £ûrúkŸø$¼ÿ ãT™áW´ûd_dš4žhš)%“æÝæ)%d”|¥§_–BÃr´õÏøö°ÿ °®Ÿÿ ¥pÑý¹ýµÏü^ñª«}|u&Óí­´ÝdÈu;'&M&ê5UK˜™‰fŒ(Tœ“Ú€=BŠ( Š( Š( Š( Š( Š( Š( ¼ÏÂò%h?ö·ÿ Ñk^™^_¡[x‹Kðö™§Ïá-Q¥µ´Š)qfT² SŒÎ8È ºíŒº§‡µ=>E–êÒX¹!C2Æxɬ›‹K½zõå¹Ñ¦··]:æÑ ¼Ï3ðDÎUqðFá€yÆÏ›®ÿ С«ÿ ßû?þ?G›®ÿ С«ÿ ßû?þ?@Ìú^³>Ÿms²î;ˆ5s˜Å¨½‘<†‹/ǐ_-O-Wø†*oè—V¡y¨Mc4²µòÚG‰çwiî&‘26¨c¾<„Î butn»ÿ B†¯ÿ ìÿ øýW¿Ôõ]3N¹¿¼ð¦¯­¬O4ÏçZ¨ –8äàÒ€*%µÝ¾±¨DÚWÚíï¯bºYÙÐEXâ_˜¿x1\))óJó–ú½o¥é–mir¢±™âµ6Â)u•˜ù†\ÄÊ¥N̲@ÜGmæë¿ô(jÿ ÷þÏÿ Ñæë¿ô(jÿ ÷þÏÿ Ð96z×7Êšs›dgšçE¹d3¤Á­ÜŒä²—d—åÞAØ	®ƒD†æ
+&$»#œ³»UîrÀ¾ß—Ì ‚û~RűÆ)þn»ÿ B†¯ÿ ìÿ øýn»ÿ B†¯ÿ ìÿ øý ]­?É<ð×ý‚­ôR×?æë¿ô(jÿ ÷þÏÿ ×Qá;3Áº…ä~]Õ®Ÿoɸ®±¨a‘ÁÁ¥ lQE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QEÏøËþ@vßöÓô¶¹©xoEÕîêÿ K´ží$wMÄ$l|èA$‚¤y5OÆ_ò¶ÿ °®›ÿ ¥°×A@ÿ ö©cÿ  N‘ô[}N?¶Æƒ©!‹,ųݥ` mÚkkºwž‰ö¨G[­*Q'Ê>ó¼/µ×#‘™›¨ä» ¢€1ì|S£_ÞGeç‘}&Lvw‘=´ò 	,±JÙpÌ>V烍Š¯}ag©ÙÉgiݬ˜ßñ‰°ASÁÁ þÿ •½·:V§ªémÐ{£,jŸÜHfDŠ8ÆÔ @:
++ŸûGŠtînl¬uˆG,öÚÍÏV)Y‘°y,f^	Âä
+Çü&:]·Ë¬yú$ƒ†þÓO*0{(œ±íW'ÈX ‚Š( Š( Š( Š( Š( Š( Š( Š( ¹ôÿ Šƒ\g?6•¥Êcy[›¥ØÁÆ8+Ü£$þóvB´JMZúáï Ò4Ù6]Ïó\LªÙÁ†ýî˹™v nä¶×XÝkBÂÆßLÓ­¬,ãòímbHaMÄíE (ÉäàÖ€,QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QEâsþÍ]OˁöKX¸ŸÈ|ÉR=Îû[j®ü“ƒÀ¬ý'ÆÚuåœòÝßi^d_0mã^#®U at V®ù72¯–¡˜o¼Š§ˆ4©µ'ì–÷1ÛN·÷Ë$FU
+É(C) ”ÇQÖ²æðÞ±¨}¢mO\îÒ 4Ù,ìÞ²›æÌÛL­æ1ÊŒ¡—îÈá€0õ/iþ Ñm¢Ž+¸®N»k’Ö³
+«£rPÃ8ݏ˜2YøÛâY£:‡Í¯nÄC!tb¦;pÓdD2ì0BA<~¹àì˸5§¸±¹ëv¥L¶½†95!(Xäßò6ë‰6u
+6©žƒRð/ÛôÍ>Ôj>\–ܺÌR7#I4ˆŒ»†T4«œX)il€_4mOS¼²Yö4il­±ÈËG7åKvˆ+K£(ùQÔWoàkµÖÛS¼Ö£¹–KÕ½wû
+$°°H”¤˜Ñü ®ýÑásÎÝ¥ QE QE sÿ ð…èP|Úe§ö<Ñ&”Æ×,>éuL$»OA"²òF0H<߉uøjöÓNÓõMDÜÛÍ4/{¤O<¹áHmxÆ%bD Úªr[uz%S“M†]fÛTf“Ï··šÝ´¬1<g9‰qÏs×°&ÿ l4ø®¢Ö´ËëNÎÐÜÜXCåÞ:…PÍÌÛn\4¢0wëˆâø·á©„ïHñ¥¼×4sÛÈÓ¬q´„ÖS"ˆÇ÷Š˜ÆÖ K¿Ø]ýµMíôpÝEu’Ø’ç&p¤¡?;•“’pÈáw)§â?†‰oï/®$»¶¹»@$šÐ¢I‚2D…àÆ<²™òÈ$íÜwP¥‹ »Ôã°›N¾²™¥6ÇÏòˆK›É%¾cï22˜8ݻ宂¸¹<	wm¨Ã¥øŽíeŽ÷ížN£
+]D[ìæÜr»%$FTÒíËn$šÔþÛÖløÔü5;(ùšm2å.cDîH.Va‚v¤m‘Œn'h è(¬½7ÄzF­pÖ¶—Ñ›ÄBòYÊW®@ËÂà:ŽF	QÀô"µ( ¢Š( ¢Š( ¢Š(Ïô[Är]j„“NÖ÷z‚ÈúŒ–°Ù,QK* ãe`R0Í +´Hy;j½ßÅW´³fm1yË:ÏpÖÑFèm¶‚ÓFŽ…Ôcs"áºü™w‘iV0ØO`¶Ñµ¤ï3ËŸ:¹•ÙäÈlä3;qÓœtâ¹=ÂÚ6§¬K­}Ï±H¤µ³k©^ä^$ŠžeÃKÜ”­üQ§Þth€SÐüIzai¢Ó#¸×¯µ‰,'û\’Û"(†K˜”‡Ì‘Pk–.Øù‹7Iá¯ÿ ÂA»uŸÙ÷Ú[ßÁ‰wî·Ÿ–[¶Oݶå€ãÙ8±iá}&ÊxgŠÚheóÖI®å•Œ›=ì]ŽæÙ#.NNЃ¢&Ûn‰§i>Ãoål´†É~vlCï-y'¦öç©Ï$ñ@QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE QE sþ2ÿ ·ý…tßý-†º
+ó‹:°ð­¶›ee|ÿ i»¶ºŠhV6B ¹ŠI—hãpç®=ÂëíÚuµçÙç·óâI|›„Ù${€;]{0ÎìhÅQ@Q@Q@Q@Q@Q@õ-'MÖmÖßTÓí/ W±ÝB²¨lœ3îk/þ±|Ú«}¦ã‘oæ}¢Øã&|¸ÇM°˜ø8ÈÂíè( í~)±ÿ .ÇT…>ô¶	¤ÏM°Kòƒ™ù ‘É	Gü&š.§wý0àǪ©µË¼Ÿ	.ÓÔÆ̼ƒœOAE W?ÿ v—móhþ~‰ å³ÊŒì` ÂìG™	Æ0AU û?Štî-¯luˆG
+—àÚÍÏ%šX•‘°x
+!^ËdÀÏÿ ÂV–Üêú>«¥Fy\B²Æ ûÌïH±*ðKHTcœ8}cãE¼þÓõ¿
+Z}¾âMV+6áœW  „á›`ÚÃpäŒ ƹÿ «ÏøF£æ	"j§¡®$PŠ½#!^²rŒPž‚¹ÿ ¥Çü"Z}ÍýœöڝÜK=ø¹ J󕙀'ÀÂñµB®nÑÐPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPXž-Õ/4½Ý‡.Í´gŒº/›<q’T2“€äã#¥m×3ãïù‡ý„tÿ ý,†€3?´üaÿ A=ÿ SòMÚ~0ÿ  ž‡ÿ ‚©¿ù&¦®[ĦY<C¥[‹}Rê&´ºvƒO¼6ìY^ ™@Ã?{¥ tÚ~0ÿ  ž‡ÿ ‚©¿ù&í?ÐOCÿ ÁTßü“XV÷wÖ÷Ú>—ijöÑO
+ÄóFfžxÖ9"0vÜH–ã ÿ Ómâ­vmMJUÓ£û6•«,)·šŽ®|µmÃc~éŽâ0›œoÄZ^·â«;[]ZóCšk¸®ãS¥K‚èz072YH ä1èpFÇöŸŒ?è'¡ÿ àªoþI¬ý:úúó[Õ ‘m–ÊÊe‚2¡ŒŽÆ(¤ç°yõÎGÝÛób¾§¬]ø{OÕ$–Ù-¯¦°–5^9!Y.!ýÛÄH
+¹¾NŸt†ù@:¯í?ÐOCÿ ÁTßü“GöŸŒ?è'¡ÿ àªoþI®bãÄ×ðkf‚o¼Ù&‚x •ôŽG Ý7îÙ‰iPRÄdì9ŸûoRmψÃ4ËsåK<v“
+íݹísæ†ÉUÚðË&vð :í?ÐOCÿ ÁTßü“TµxÃJÑ/õ·èrý’ÚIü¿ì¹—~Å-Œý ã8늻g?Ú¬­î3y±«æ<ÈÎF~VÀܾ‡#µfx¿þD­{þÁ×ú-¨Ó(¢Š (¢Š (¢Š (¢Š +Ëît-Tñ‡Š'Ô4«¹Vþ$\[¤Œì–ç ñ’:õ
+óø¿äiñOý„cÿ Ò;j þÓ|¥Î°j^´•—xŽâ(#b¹#8 q*Ðÿ „CÃ?ô.éøÿ T¦‹S“ƺ‡öuÝ¥¾4ëO3í­6ïÞ\ãdLwõü;ák¢ëFž
+&Îñ ŠÓL†=6KBH¦Ô•Ž4?il,YŒƒÔ >s«þÿ л¤àüMG/…¼)›AÑcRÊ€½œ@bG#©$êH¬8¢º¹ûýWQlׯ “eÁ\CÚñã¢ü£Ÿ¼8Ã
+©¶®Ÿ©êO¦[É6£s4—è·r;§|÷%dh )UUÚ8À$ä³ÕÂ!áŸútüÿ ‰¨Ï…¼(³¤AÑD®¬ë³‹s( :ËŸ¨õ¬;‹É–óY‡ûRmë¹å”M HÐJ¸ISnm~BQeNÌ~è5æ§uöm Ãuw´–Ó	Ù®$]Ú£È$,‚&¬Ç
+°ï$M tÿ ðˆxgþ…Ý#ÿ  £ÿ âhÿ „CÃ?ô.éøÿ \ür=ä¶v–z¥ÛirkF.!ºg3Aö&vQ)$ºù¡ÆrJ‘€T¨ÅŸí)áž?¶¿™o~`™¼ÓæGh/Z"ÌÙÜ ‰÷„çåfݐM iŸxQgHƒ¢‰]YÖ3gæP@$t—?QëRÂ!áŸútüÿ ‰®búîÊ+ËytíBîîÍl®ÕgLÁA–Ð6.-å’òÅüPe¾©$ºÚIª[GmúìÆ«+E$
+ÆoùŠ¾h“z²³Ž(ªÿ „CÃ?ô.éøÿ Y)ð·‡­ü!­Oƒ¥Å,vºH–q«+Ø‚hÓoåÚ,·WÒI<(Â	˜Ç4(aDÖûBmÜ	3.‘„}¯âÿ ùµïû\趠L¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ¢Š( ®gÇßò+ûéÿ úY
+tÕKUÒ¬õ½9ì/ãy-Ý‘ÈI^6ŒHd! ð{P3YúŽ‹eªO÷iY`WHä·º–
+ÅKÆːJ/_JÝÿ „BõÕÿ ðuyÿ Çhÿ „BõÕÿ ðuyÿ ÇhÛJ´µ’ÞD<¶ñÉrM;ÊÁ]•˜rIÉEëœc«7†t—‚Ú³:Åo
+Û¬i<Š¯Œ*H~ñ@ϸ|Íý㞏þ×Wÿ ÁÕçÿ £þ×Wÿ ÁÕçÿ  „Óí¢¸’xÕÒIfóä+# ïåˆòFpFÐ:dŒŒÕ8ü3¤Är¶Î@dhÕç‘–-Ž®«-ˆ×r!Ú¸SµA WGÿ …ë«ÿ àêóÿ ŽÑÿ …ë«ÿ àêóÿ ŽÐ97†t›‰ä–kgq#1äò·ó퀶X6ÌÁÈfËÿ áÓ¾Åö_*m¾g›æý¢O;~6îówy›¶ü¹Ý¿/N+ ÿ „BõÕÿ ðuyÿ Çhÿ „BõÕÿ ðuyÿ Çh>b·‚8 "Š5‘¢…UP0  ²|_ÿ "V½ÿ `ëýÕÓ¡zêÿ ø:¼ÿ ã´É¾øvâ	 5Ib‘J<o¬^2²‘‚2ò ¦Š( Š( Š( Š( ¼¾ç]Ñô¿x¢
+CU±´•¯âqÅÂFÅ~Én3‚Gò¯P¢€<Ïþÿ ÿ ÐŤàlüUð—øgþ†-#ÿ cÿ â«Ó( 3ÿ „¿Ã?ô1iøÿ Gü%þÿ ¡‹Hÿ ÀØÿ øªôÊ(Ìÿ á/ðÏýZGþÇÿ ÅQÿ 	†èbÒ?ð6?þ*½2Š ó?øKü3ÿ C‘ÿ ±ÿ ñTÂ_áŸú´ü
+ÿ Š¯L¢€<Ïþÿ ÿ ÐŤàlüUð—øgþ†-#ÿ cÿ â«Ó( 3ÿ „¿Ã?ô1iøÿ Y)ñO‡®<!­A½¥Ë,–¢F—‘³3Ø  <’kØè Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿÙ
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/index.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/index.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/index.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,5 @@
+GIF89a    ð    ÿ ÿÿ!ù   ,        ‡$$$(((GGGLLLBYYPPP]]]^rreeebuuexxyyyo¥¥v©©xªª”””ššš‹¨¨Œ··   µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÍææÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿ =H†8hð`ÂJœ8ƒ„ hܸ±€„ˆ'Z,   *hÐP!=‚é!Â’	"lØɳg„d ™ z*U
+  C'f y ÂÒ
+\­pàiÔŠ
+ °pu€F­K-8U0Óƒ„£V—šÝˆVi§*bL*—ãÙ« ù6AY¿t¯& —FKd;™ÁÕ‚
+0 ×2O=%/5à  Ï<ÍÖÝ :5€Õ @ òNÊW]¿ö	`‚ q±&þ çÜÝ;+ pð[ÃmÄÅ9²FŒVÃò œG<4ôê üž~|uëç“/ŸPÛxúܸyFè}á´RÕ=χ-ûáÑÎùÇ“hJ9ÑcWI–ÕYY¡æSfn`X_ß)Ƙ@ŽÀ×}Ô¡@oœ{ÃÙ…WAaurJYÐ[%Öˆ©Á–\WPQ„QHå¶TS^V 9ù¸ÁOA}ÒH%”ÒJ-½ÓG4IÄ$tÉTå’ùÖ CATe@ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last0.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last0.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last0.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,6 @@
+GIF89a    ð    ÿ ÿÿ!ù  " ,        ‡$$$(((LLLBYYPPP]]]eeebuuvvv~~~o¥¥v©©xªª‡‡‡”””ŸŸŸ…££‹¨¨¹¹™¿¿¦¦¦¬¬¬µµµ¼¼¼´ÐлÔÔÇÇÇÌÌÌÃÙÙÉääÔééÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÿ EH„†
+0XЀB
+ Jœ8ðà 2jÜH`ŠA\ @‚8pÀAÁ€  :F)p XèÀ³§O`"Ø@s  ø\º€˜D'
+` Ó«=1ˆéA"T3`Û!ÃV3N 0À*Ù±žN¨xTiÏW9\àpB E¬=à3ÂI¦DàËtë\GwÞMp¸pÅŒþ5Èv©áÏ?<ÀÌôéA 
+<Ÿͳe„ŠÅúT  ! »“ñ–lAA„XÈÜ!€„ Üæn`§kÀ,Î
+€ Ä‹WÖþZÁð 8ΐÀ‚ØUãåiaµo¾`“çPýºræëÛ;_¸ìTG ë-×’dF÷Ý]ÇU€šzúõÔÁ-ØSµiЙe¬µ¦€x‹egd§Ývb–›	 aË-•ØoW9&ÐuvU{õõW`.¶õÖXÈUÐMü7dO  Zy€QUKfå$QId[¸½åT4ypS :‘”P]Ñ$‚H!å[J+µôRL¤¥¦a´ÑžH äi@Y7(Dj ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last1.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last1.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/last1.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,4 @@
+GIF89a    ð    ÿ ÿÿ!ù  " ,        ‡$$$(((666GGGLLLBYYPPP^^^Oeeeeebuuexxyyyo¥¥v©©xªª”””ššš†¤¤‹¨¨°°Œ··š¿¿   µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÍææÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÿ EH‡
+ <pPÁ Jœ8… 2jܘ€BDŠ-  @	<xÈ ¡A  x9°’
+$|Øɳ'0t Ùc=“&P @‚¡‹@A©Už8…ZqÁT
+WÃ~Р À‚) (Põ‚«o­JhJ¡¢ Hw `uïÕ|T« 'L¾I_-[Ä]<dDy²Ü 	8X#å0-+= à €I%{®¼:i @fÝZukž Xx  -íÕ¶oÈ ào©7z~ÛCq ÷d>™: ÊÎöN®œ/õÏÄÊ™æ^»{ÒÜO“¿þûóÎ××’ÿlÛýΦÀ0]4ÏÐö} fM @aÿ±—\€0&cxEV€U%ýZj±µS\J!¨Ttä`‰eUVf¡%TT™˜ŠOQ$ÕQ.îÄÔVDy@NbI ”Y\$Iœ”ÒJ¸“L*Ò$ÊmĤ“BrpAB8 @äd@ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next0.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next0.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next0.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,4 @@
+GIF89a    ð    ÿ ÿÿ!ù    ,        ‡$$$(((LLLBYYPPP]]]eeebuuvvvzzzo¥¥v©©xªª”””ŸŸŸ…££‹¨¨¹¹™¿¿¦¦¦µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÃÙÙÊääÒèèÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ÿ AHІ0XÐ@ÂJœ8°C 2jÜH BŠ=\ @‚4h¨ð@A  :F)0 PØÀ³§O
+ @f8ðÉ”©ƒ1‹N<À@…¦X{V8“ƒDªZÈJvƒ®f
+Œ `ÀÕ²d+@P‘€€¥YÀÝà@  Ø ûàä^®@x@º3oÃe) `@²…3Ãà  ˜Oj&«  B z	.Üë  xë85ë¬ 0­!tê
+£™j °`€ÞªSHÐÚçðݳ}ó\ÞÜgnPK§  ºÏ×?ûƒ¦^6€‡–}C&[  Dƪ×g•L90€Áµ ¢R¼®íÕ×_±åÖ^¸ÍUÐMŒ… O0”Zq€‘UòT„H%‘Mm×SQuS :EÔP^ѤØH%)€’J,)ÀYLPè¢Emä# æâDIÛ»IpD. ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next1.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next1.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/next1.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,6 @@
+GIF89a    ð    ÿ ÿÿ!ù  " ,        ‡$$$(((666GGGLLLBYYPPP^^^Oeeeeebuuexxyyyo¥¥v©©xªª”””ššš†¤¤‹¨¨°°Œ··š¿¿   µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÍææÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÿ EH‡
+ <pPÁ Jœ8… 2jܘ€BDŠ-  @	<xÈ ¡A  x9°’
+$|Øɳ'0t Ùc=“&P @‚¡‹@A©Už8…ZqÁT
+WÃ~Р À‚) (PU)±;%4¥PÑ@ ¤V€û!‚ Õ*s/ܲtAØÕyu at FÃa%H`À±0Ã= à €bk„lµ „ 7Þ€tR	 ,< Ðv5k×X<˜í!4kÍJ=èv  wXÑ·­
+gHÛwr« 4Lí|täØ>Wo-ÖôõÕq'um
+1A „Gžq€Á«Å'E,PñÝ«%ùú<P-[«ð‰•Á\y… X|%••Yh	$U	b¥ÕSIuT„LmE”Wä$–@™ÅH"‘t@¤´R.Á$Sƒ4‰Pâo½#‰\@`ÁÅ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev0.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev0.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev0.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,4 @@
+GIF89a    ð    ÿ ÿÿ!ù    ,        ‡$$$(((LLLBYYPPP]]]eeebuuvvvzzzo¥¥v©©xªª”””ŸŸŸ…££‹¨¨¹¹™¿¿¦¦¦µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÃÙÙÊääÒèèÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ÿ AHІ0XÐ@ÂJœ8°C 2jÜH BŠ=\ @‚4h¨ð@A  :F)0 PØÀ³§O
+ @f8ðÉ”©ƒ1‹N<À@…¦X{V8“ƒDªZÈJvƒ®f
+Œ `ÀÕ²d+@P‘€€¥pu €ÀGlÀÝðà$Y®@x@º³laÃY) `@¼'!gà  e)œ,¬—¬ ”ÆJš°fÖ $0 ð¶©èÒ­ã`0[ÖÛ=sgÕ `Á ¾›nìz5Vâ¼iGNÐX8Ö
+»%¨&KA^ëÊcOŠøzôë¦	 <´÷öy¦ @dŒù}OÉ”ŒÙ9S®tÐRx9¶W_éçÖ`YÉ@€€c1è“¥–@`d•…<U!RIdS[ÂõTTFÝ€N¡5”W4)6RIÞ¥´RKœÅÁ†5Z„ÑFD A‚5~…²-À›@Tc@ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev1.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev1.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/prev1.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,5 @@
+GIF89a    ð    ÿ ÿÿ!ù  " ,        ‡$$$(((666GGGLLLBYYPPP^^^Oeeeeebuuexxyyyo¥¥v©©xªª”””ššš†¤¤‹¨¨°°Œ··š¿¿   µµµºººžÂ«ÊʼÕÕÆÆÆÌÌÌÍææÿÿÿüû   ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÿ EH‡
+ <pPÁ Jœ8… 2jܘ€BDŠ-  @	<xÈ ¡A  x9°’
+$|Øɳ'0t Ùc=“&P @‚¡‹@A©Už8…ZqÁT
+WÃ~Р À‚) (PUìV%4¥PÑ@ ¤n	¸A€j¸ý@€dزtAØÕ)¶0€½W%H`À¼ˆ= à €7B¾Ú  B Œ­:Ö8:.  ´UºšµØ Äö z£í°r; À›¶ïŒ­•g(ûjmä·4Döyò¤^_øú7i ×bv†¶)Ä0Œ×yrÄ	 c¾Î±@Åw¿äë­Z¶ƒÉ—Tsä`
+–”Z%‘TT)ˆ•VOQ$ÕQ2µQ^“X eW ‰DÒ'¥´RKÀ$Z4ÝGÁHÇiôbŒ%rp8 ›@c@ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/standards.htm
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/standards.htm	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/architecture/tour/standards.htm	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,18 @@
+<html>
+<head>
+<title>Slide 1</title>
+</head>
+<body text=#000000 bgcolor=#FFFFFF link=#000080 vlink=#800000 alink=#000080>
+<center>
+<h2><a href="img0.htm">Click here to start</a></h2>
+</center>
+<center><table width=90%><TR>
+<td valign=top align=left width=50%>
+<h3><u>Table of contents</u></h3><p align=left><a href="img0.htm">Slide 1</a></p>
+<p align=left><a href="img1.htm">Slide 2</a></p>
+<p align=left><a href="img2.htm">Slide 3</a></p>
+</td>
+<td valign=top width=50%>
+</td></tr></table></center>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/background/charter.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/background/org_chart.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/background/whos_who.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/doc_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/doc_utils.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/doc_utils.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,117 @@
+<?php
+
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999, 2000, 2001 (c) VA Linux Systems, Inc.
+// http://sourceforge.net
+//
+// $Id$
+//
+
+// colorized link to a file with CVS history
+// @param threshold age when quicklink is no longer highlighted (default is one week)
+// @param path path to file within CVS module
+//
+//
+//
+//
+//
+function util_cvs_query($path, $threshold = 604800, $module = "alexandria", $cvsroot = "/home/cvsroot", $viewcvs = "http://webdev.sourceforge.net/cgi-bin/viewcvs.cgi/") {
+
+	// cvs, the client, is too restrictive to use via PHP
+	// instead, read and munge the RCS files directly
+	//
+
+	// clean up slashes on inputs: path and cvsroot should only have
+	// leading slashes, module should have none
+	//
+	// TODO
+
+	// fail if path is unset or a directory
+	//
+	if (($path == '') || (substr($path, -1) == '/')) {
+
+		return 0;
+
+	} // if
+
+	// extract head line and first date line
+	//
+	$cvspath       = escapeshellcmd($cvsroot . "/" . $module . "/" . $path . ",v");
+	$cvstemp       = explode("/", $cvspath); 
+	$cvsfile       = $cvstemp[sizeof($cvstemp) - 1];
+
+  $datecmd       = "grep -a ^date $cvspath | head -n1";
+	$datestring    = exec($datecmd);
+
+  $versioncmd    = "grep -a ^head $cvspath | head -n1";
+	$versionstring = exec($versioncmd);
+
+	// test for error
+	//
+	if (substr($datestring, 0, 4) != "date") {
+
+		return 0;
+
+	} else {
+
+		// pull out date and format
+		//
+		$result["date_full"] = substr($datestring, 5, 19);
+		$result["date_YYYY"] = substr($datestring, 5, 4);
+		$result["date_MM"]   = substr($datestring, 10, 2);
+		$result["date_DD"]   = substr($datestring, 13, 2);
+		$result["date_HH"]   = substr($datestring, 16, 2);
+		$result["date_II"]   = substr($datestring, 19, 2);
+		$result["date_SS"]   = substr($datestring, 22, 2);
+
+    $result["date_UNIX"] = mktime($result["date_HH"], 
+																	$result["date_II"],
+																	$result["date_SS"],
+																	$result["date_MM"],  
+																	$result["date_DD"],  
+																	$result["date_YYYY"]);
+    $result["date_RFC"]  = date("Y/m/d H:i:s", $result["date_UNIX"]) . " GMT";
+
+		// pull author name
+		//
+		eregi(".*author.(.*);.state.*", $datestring, $eregi_result);
+		$result["author"]    = $eregi_result[1];
+
+		// pull head version number
+		//
+		eregi("head.(.*);", $versionstring, $eregi_result);
+		$result["version"]   = $eregi_result[1];
+
+		// generate ViewCVS string
+		//
+		$result["viewcvs"]   = $viewcvs . $module . "/" . $path;
+
+		// build quick-status HTML string
+		//
+		$result["status"]    = "<font size=\"-2\"><a href=\"" . $result["viewcvs"] . "\">" . $cvsfile . "</a>&nbsp;" . $result["version"] . "&nbsp;" . $result["date_RFC"] . "&nbsp;" . $result["author"] . "</font>";
+		if (time() < ($result["date_UNIX"] + $threshold)) {
+			$result["status"] = "<b><font color=\"#000000\">" . $result["status"] . "</b></font>";
+		} // if
+
+	} // if ... else
+
+	return $result;
+
+} // util_cvs_query
+
+// utility function to call util_cvs_query
+//
+function util_cvs_status($path) {
+
+	$result = util_cvs_query($path);
+
+	if (is_array($result)) {
+		return $result["status"] . "&nbsp;";
+	}
+	else {
+		return "<font size=\"-2\">revision history n/a</font>&nbsp;";
+	} // if
+} // function util_cvs_status
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/docs/index.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/index.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,255 @@
+<?php include("doc_utils.php"); ?>
+
+<!-- ------------------------ HEADER ------------------------ -->
+<html>
+<head>
+  <title>SourceForge: Engine Team Documentation</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<table width="100%">
+  <tr>
+    <td>
+      <b><font size=+1>SourceForge: Engine Team Documentation</font></b><br>
+      <font size="-1">$Id$<br>
+      SourceForge Engine Team [<a href="mailto:alexandria-devel at sourceforge.net">email</a>]</font>
+    </td>
+    <td>
+      <a href="http://sourceforge.net"><img src="images/sflogo2-105a.png" width="108" height="53" border="0"></a>
+    </td>
+  </tr>
+</table>
+
+<!-- ------------------------ MENU ------------------------ -->
+<p><hr><p>
+
+<dd>
+  <a href="#0">0. Quick Links</a>
+</dd>
+
+<dd>
+  <a href="#1">1. Background</a>
+</dd>
+
+<dd>
+  <a href="#2">2. Project Management</a>
+</dd>
+
+<dd>
+  <a href="#3">3. Requirements, Design, Implementation</a>
+</dd>
+
+<dd>
+  <a href="#4">4. Projects</a>
+</dd>
+
+<p>
+  <b>Note:</b> revision histories in bold denote changes in the last week.
+</p>
+
+<!-- ------------------------ SECTION 0 ------------------------ -->
+<p><hr><p>
+
+<a NAME="0"></a><b>0. Quick Links</b>
+
+<p>
+  <b>List Archives:</b>&nbsp;|&nbsp;alexandria-devel&nbsp;|&nbsp;alexandria-cvs&nbsp;|&nbsp;<a href="https://lists.valinux.com/archives/sf-engine/">sf-engine</a>&nbsp;|&nbsp;<a href="https://lists.valinux.com/archives/sf-onsite/">sf-onsite</a>|<br>
+  <b>Sandboxes:</b>&nbsp;|&nbsp;<a href="http://webdev.tperdue.sourceforge.net">tperdue</a>&nbsp;|&nbsp;<a href="http://webdev.dbrogdon.sourceforge.net">dbrogdon</a>&nbsp;|&nbsp;<a href="http://webdev.pfalcon.sourceforge.net">pfalcon</a>&nbsp;|&nbsp;<a href="http://webdev.jbyers.sourceforge.net">jbyers</a>&nbsp;|<br>
+  <b>Reference:</b>&nbsp;|&nbsp;<a href="http://webdev.sourceforge.net/cgi-bin/viewcvs.cgi/">ViewCVS</a>&nbsp;|&nbsp;<a href="https://vaweb.valinux.com/Marketing/SourceForge/">product marketing</a>&nbsp;|<br>
+</p>
+
+</table>
+
+<!-- ------------------------ SECTION 1 ------------------------ newer than-->
+<p><hr><p>
+
+<a NAME="1"></a><b>1. Background</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Engine Team Charter, Vision</td>
+    <td><font size="-1">[<a href="background/charter.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/background/charter.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Engine Team Org Chart</td>
+    <td><font size="-1">[<a href="background/org_chart.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/background/org_chart.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Who's Who</td>
+    <td><font size="-1">[<a href="background/whos_who.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/background/whos_who.html"); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ SECTION 2 ------------------------ -->
+<p><hr><p>
+
+<a NAME="1"></a><b>2. Project Management</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>MRD, ERD, PRD: Requirements Discovery</td>
+    <td><font size="-1">[<a href="project_management/requirements.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/requirements.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Change Control and the Change Czar</td>
+    <td><font size="-1">[<a href="project_management/change_control.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/change_control.html"); ?></td>
+  </tr>  
+
+  <tr>
+    <td>Source Control</td>
+    <td><font size="-1">[<a href="project_management/source_control.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/source_control.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Source Control: Branching Diagram</td>
+    <td><font size="-1">[<a href="project_management/source_branching.sda">SDA</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/source_branching.sda"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Community Involvement</td>
+    <td><font size="-1">[<a href="project_management/community.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/community.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Technical and Document Review</td>
+    <td><font size="-1">[<a href="project_management/review.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/review.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Development Process</td>
+    <td><font size="-1">[<a href="project_management/development_process.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/development_process.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>PS Engineers on the Engine Team</td>
+    <td><font size="-1">[<a href="project_management/ps_engineers.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/project_management/ps_engineers.html"); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ SECTION 3 ------------------------ -->
+<p><hr><p>
+
+<a NAME="1"></a><b>3. Requirements, Design, Implementation</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Architecture Tour (slides)</td>
+    <td><font size="-1">[<a href="architecture/tour/standards.htm">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/architecture/tour/standards.htm"); ?></td>
+  </tr>
+
+  <tr>
+    <td>PHP Template Example: Logic and Presentation</td>
+    <td><font size="-1">[<a href="architecture/templating.php">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/architecture/templating.php"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Coding Standards</td>
+    <td><font size="-1">[<a href="architecture/coding_standards.html">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/architecture/coding_standards.html"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Site-Wide Structure and Use Cases</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ SECTION 4 ------------------------ -->
+<p><hr><p>
+
+<a NAME="1"></a><b>4. Projects</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Code Cleanup (March Madness and April Fool's)</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>XML Interface</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Site Searching</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Geocrawler II</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Reporting and Statistics Engine</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>UI Redesign</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Doc Manager II</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Content Manager</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+
+  <tr>
+    <td>Foundry II</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status("docs/"); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ FOOTER ------------------------ -->
+<p><hr><p>
+
+<p align="right">
+  <font size="-1">
+    Copyright &copy; 1999, 2000, 2001 <a href="http://www.valinux.com/">VA Linux Systems, Inc.</a>
+  </font>
+</body>
+</html>
+<br>
+
+
+

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/change_control.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/community.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/development_process.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/ps_engineers.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/requirements.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/review.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/source_branching.sda
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/project_management/source_branching.sda	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/project_management/source_branching.sda	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,298 @@
+ÐÏࡱá                ;  þÿ	               G                þÿÿÿ        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿþÿÿÿ      þÿÿÿ      	   
+         
+                                                             !   "   #   $   %   &   '   (   )   *   +   þÿÿÿ-   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   þÿÿÿH   I   þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t   E n t r y                                               ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        þÿÿÿþÿÿÿþÿÿÿ               	   
+         
+            þÿÿÿþÿÿÿ            þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿ
+  ÿÿÿÿ ‰.½…щР€)ä°±   Drawing 
+   StarDraw 5.0                                                                        <ñÿÿü   Éc  YH                                                SfxDocumentInfo                                    º11‚S                                º11‚S                                 uKô                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Info 0                                   Info 1                                   Info 2                                   Info 3                                      º11äyPðø        <                                       TASK,0,1
+ 1,0,100,1,                                          þÿ                        à…ŸòùOh«‘ +'³Ù0   ø      	   h   
+   t      €   
+   Œ      ˜      ¤      °      ¼      È      Ô      à      ì         1   @    jÄ   @    @#C   @    F;cÀ@    F;cÀ                                                                                                                                                              »» ÿÿ    ‰     XOutdevItemPool      1   èèéêëìíîïðñòóôõö÷øùúûüý
+ è)èéêëìíîïðñùúûüýþ	
+
+&'()*+,-./06789:;UVWXYZ[\] ècèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst ètèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
+
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef”•–—˜™š›œžŸ ¡    d   î   ì  D  0 ƒ }  ¹'è       @  q          X  X  º'é    ,   @  ­       ÿÿÿÿ               X  »'ê    .   @  ß           –     2   X  X  X  ¼'ë        @         ÿÿÿÿ €      X  ½'ì    ž   @  µ       ÿÿÿÿ       Arrowÿÿÿÿ   
+                                   Arrowÿÿÿÿ   d           È                   d           X  X  XS  ¾'í    ª   @  k       ÿÿÿÿ       Arrowÿÿÿÿ   d           È                   d              Arrowÿÿÿÿ   }           ú   ú           ú       }           X  X  X_  ¿'î    .   @  ¥     ,    ¼    È   X  X  X  À'ï    .   @  ß     ,    È     ú   X  X  X  Á'ð       @          X  X  Â'ñ       @  .      X  òò    
+   @   H  óó    
+   @   ^  ôô    
+   @   t  õõ    
+   @   Š  öö    
+   @      ÷÷    
+   @   ¶  øø    
+   @   Ì  ´'ú       @  î          X  X  µ'û    €   @  n       ÿÿÿÿ €  ¸¸ÿÿ    ÿÿÿÿ €  €€€€    ÿÿÿÿ €ÿÿÌÌ™™    ÿÿÿÿ €ÿÿÿÿÿÿ   Gray 10%ÿÿÿÿ €ææææææX  X   X2  XD  XV  ¶'ü   6   @  À       ÿÿÿÿ        ÿÿÿÿÿÿ      2 2 d d   X  ·'ý    (   @  ô       ÿÿÿÿ               X  ¸'þ   "  @  "	       ÿÿÿÿ    BMv      v   (   @   @     SD                   Ä   @      x^íSI
+Ã0ô¯sŒ½å\èzéü ÿ
+ª–46•Z…Bn›8x‘Ç)1²Ì”³.<觔B+ï Ì„¨Þ¢Ï40:prf
+š‡·í|q±ìüâÊ]~½+Háë•~|ðWíF¼ðúúMñbÀöž þâPÙ@úaüoÌCÄ“Ø[½È¡z¼6~U{Û߃<ª½Õ?¥ †ü–{¿rü=+Îý÷ô—|´¨ý•¿.©MåÛxò³åG¦
+Ü«±X  ÿÿ    
+   @   <	        
+   @   R	      
+   @   h	      
+   @   ~	      
+   @   ”	      
+   @   ª	      
+   @   À	      
+   @   Ö	      
+   @   ì	      
+   @   
+  		    
+   @   
+  
+
+    
+   @   .
+      
+   @   D
+      
+   @   Z
+  
+
+    
+   @   p
+      
+   @   †
+      
+   @   œ
+      
+   @   ²
+      
+   @   È
+      
+   @   Þ
+      
+   @   ô
+      
+   @   
+      
+   @          
+   @   6  (    
+   @   L  (    
+   @   b  (    
+   @   x  (    
+   @   Ž  (    
+   @   ¤  (    
+   @   º  (    
+   @   Ð  (    
+   @   æ  (     
+   @   ü  (!    
+   @     ("    
+   @   (  (#    
+   @   >  $$    
+   @   T  %%    
+   @   j  &&    
+   @   €  ''    
+   @   –  ((    
+   @   ¬  ))    
+   @   Â  ;(+       @  â        X  X  ,,        @  
+       ÿÿÿÿ €€€€€€€X  --    "   @  <
+     ,    È   X  X  ..    "   @  j
+     ,    È   X  X  //    
+   @   ˆ
+  00    
+   @   ž
+  11    
+   @   ´
+  22    
+   @   Ê
+  33    
+   @   à
+  44    
+   @   ö
+  55    
+   @     66    
+   @   "  II       @  @     ô  X  JJ    .   @  r     ¸g    A%    \)  X  X  X  KK       @  ™      X  (L    
+   @   ³  MM    
+   @   É  NN    
+   @   ß  OO    
+   @   õ  PP    
+   @     QQ       @  '      X  RR    
+   @   A  SS    
+   @   W  TT    
+   @   m  UU    
+   @   ƒ  VV       @  Ÿ      X  WW    
+   @   ¹  XX    
+   @   Ï  YY    
+   @   å  ZZ    
+   @   û  [[    
+   @     \\    
+   @   '  ]]    
+   @   =  ^^    
+   @   S  __    
+   @   i  ``    
+   @     aa    
+   @   •  bb    
+   @   «  cc    
+   @   Á  dd    
+   @   ×  ee    
+   @   í  gg       @  	      X  hh    
+   @   #  ii    
+   @   9  jj    
+   @   O  kk    
+   @   e  ll    
+   @   {  mm    
+   @   ‘  nn    
+   @   §  oo    
+   @   ½  pp    
+   @   Ó  qq    
+   @   é  rr    
+   @   ÿ  ss    
+   @     tt    
+   @   +  uu    
+   @   A  vv    
+   @   W  ww    
+   @   m  xx    
+   @   ƒ  yy    
+   @   ™  ùù  	  b   @  ë          è¹'                    í¾' ïÀ' X  X  X   X&  X,  X2  X8      j   @  e          ú´' ûµ'        ûµ'    ûµ'     ú´'  ûµ' X  X  X&  X,  X8  XD  **    <   @  ±                        X  X  X  X   X&  77    <   @  ù                        X  X  X  X   X&  HH  	  x   @  q          £+'    £+'            ¦'        ¦' §'
+ X  X  X   X,  X2  X8  XD  XJ  ff  
+  º   @  7          QQ  VV     JJ  KK  QQ  VV     JJ KK     JJ KK     JJ    II  QQ  VV     QQ  VV  X  X  X&  XD  XV  Xh  Xt  XŒ  zz       @  y      gg  X      8   p   ª   Ö   €  6  p  ª  Ò  ñ      3  I  _  u  ‹  µ  A  ƒ  ·  å  û    '  =  S  i    •  «  Á  ×  í      /  E  [  q  ‡    ³  É  ß  õ    !  7  M  c  y    ¥  »  Ñ  ç  ý  	  )	  ?	  U	  k	  	  ©	  Õ	  
+  1
+  G
+  ]
+  s
+  ‰
+  Ÿ
+  µ
+  Ë
+  á
+    =  \  r  ˆ  ž  ´  Ê  ê       ,  B  b  x  Ž  ¤  º  Ð  æ  ü  
+  (
+  >
+  T
+  j
+  €
+  –
+  ¬
+  Ì
+  â
+  ø
+    $  :  P  f  |  ’  ¨  ¾  Ô  ê       ,  B  X  Æ  <  „  Ì  P    
+   P   —  ÷$     EditEngineItemPool ¤      Q   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ    6   f   x  0  q7  g*š   >  @  0      
+              "                     ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -     
+              " X                  ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -     
+              "   È È               ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -     
+ Z             •                             €      d          " |ü°°              ,    StarBats      N               ÿ                 €      -          – àü`	`	              ,    StarBats      N               ÿ                 €      K          " ¨ý              ,    StarBats      N               ÿ                 €      -          – ¨ýÀÀ              ,    StarBats      N               ÿ                 €      K          " ¨ýpp              ,    StarBats      N               ÿ                 €      -          " ¨ý                ,    StarBats      N               ÿ                 €      -          " ¨ýÐ Ð               ,    StarBats      N               ÿ                 €      -          " ¨ý€%€%              ,    StarBats      N               ÿ                 €      -          " ¨ý0*0*              ,    StarBats      N               ÿ                 €      -     
+              r                     ,    StarBats                     ÿ                 €      -          r   èè              ,    StarBats                     ÿ                 €      -          r   ÐÐ              ,    StarBats                     ÿ                 €      -          r   ¸¸              ,    StarBats                     ÿ                 €      -          r                   ,    StarBats                     ÿ                 €      -          r   ˆˆ              ,    StarBats                     ÿ                 €      -          r   pp              ,    StarBats                     ÿ                 €      -          r   XX              ,    StarBats                     ÿ                 €      -          r   @@              ,    StarBats                     ÿ                 €      -          r   (#(#              ,    StarBats                     ÿ                 €      -     	              " ¨ýXX              ,    StarBats      i               ÿ                 €      -          " ¨ý°°              ,    StarBats      i               ÿ                 €      -          " ¨ý              ,    StarBats      i               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      i               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      i               ÿ                 €      -          " ¨ý              ,    StarBats      i               ÿ                 €      -          " ¨ýhh              ,    StarBats      i               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      i               ÿ                 €      -          " ¨ý              ,    StarBats      i               ÿ                 €      -    X  X, XJ Xh XT Xr 6'›    
+   @   Ë0  œœ       @  í0          X  X     !   @  1    d   d üd x X  <(ž       @  >1       X  
+(Ÿ   þ   @  <2       €                      StarBats  °   !"-      %   €                      StarBats       !"-         €                      StarBats       !r-         €                      StarBats  X   !"-     X  XG  X€  X¹  @'    ˆ  @  ¨3    )   d   d   d        d   d Xd        d È d   d È    °d   d   d ° þ”Y|ü  `	d   d   d `	 þ”Yàü  d   d   d  þ”Y¨ý  Àd   d   d À þ”Y¨ý  pd   d   d p þ”Y¨ý   d   d   d   þ”Y¨ý	  Ð d   d   d Ð  þ”Y¨ý
+  €%d   d   d €% þ”Y¨ý  0*d   d   d 0* þ”Y¨ý  Xd   d   d X þ”Y¨ý    d   d ¨ýd X X  X!  X4  XG  X`  Xy  X’  X«  XÄ  XÝ  Xö  X X( XA A'¡   Š   @  V4       d   d   d d d d   ¤d Ò d     d ôd     d d     d ,d     d È d     d d d X  X  X&  X2  X>  XJ  XV  Xb  1'¢       @  —4     d  È   X  +'£   (   @  Ã4             X  X  X  '¤    
+   @   å4  !'¥       @  5    
+  €      X  '¦    6   @  E5   
+   times   dA	 helvetica  X  X  '§   À   @ 
+ å5    Nd 
+   4d 
+   d 
+   öd 
+   {d 
+   îd 
+   §d 
+   hd 
+ 	  Ûd 
+ 
+  Ád 
+   d 
+   id 
+ 
+ 
+íd 
+ X  X  X"  X,  X6  X@  XJ  XT  X^  Xh  Xr  X|  X†  ?(¨    
+   @   /6  '©       @  O6    
+   X  X  'ª       @  r6    
+  X  '«       @  ‘6    
+  X  '¬       @  µ6    
+    X  X  '­       @  Ø6    
+  X  '®       @  ÷6    
+  X  %'¯    
+   @   7  S'°    
+   @   '7  "'±    
+   @   =7  '²    
+   @   S7  ³³       @  m7    |X      X  n  ˜  Å  å  ï  ƒ    >  r  ˆ  ®  ð  ¼  Ò  ú    8  `    ž  ´  Ê  à  ö  µ  P  z<  g*š  
+              " ¨ýXX              ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -  œœ    
+(Ÿ   €                      StarBats  °   !"-     !'¥   €      '¦  	 helvetica  '§ íd 
+     .  6  q    • ü    2   î    + æJ   Standard   Standard     ¾é  # è¹'  éº'  ê»'  ë¼'  ì½'  í¾'  î¿'  ïÀ'  ðÁ'  ñÂ'  ú´'  ûµ'  ü¶'  ý·'  þ¸'  +;(  ,,  --  ..  šg*  œœ  Ÿ
+(   @'  ¡A'  ¢1'  £+'  ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Object with arrow Standard Object with arrow     ¿é   è¹'  ê»' ë¼'  ì½' î¿' ïÀ'  ðÁ'        Object with shadow Standard Object with shadow     Àé   +;( ,,  --  ..         Object without fill Standard Object without fill     Áé   ú´'        Text Standard Text     Âé   è¹' ú´'       	 Text body Standard	 Text body     Ãé   è¹' ú´' §'        Text body justfied Standard Text body justfied     Äé   è¹' ú´' £+'        First line indent Standard First line indent     Åé   è¹' ú´' šg*  @'        Title Standard Title     Æé   è¹' ú´' §'        Title1 Standard Title1     Çé  	 è¹' ú´'  ûµ' +;( ,,  -- .. £+' §'        Title2 Standard Title2     Èé   ê»' ûµ' +;( ,,  -- .. šg*  @' ¡A' £+' §'        Heading Standard Heading     Éé   è¹' ú´' ¡A' §'        Heading1 Standard Heading1     Êé   è¹' ú´' ¡A' §' ©'        Heading2 Standard Heading2     Ëé   è¹' ú´' ¡A' §' ©' ¬'        Dimension Line Standard Dimension Line     Ìé   è¹'  ì½' í¾' î¿' ïÀ' ú´' §'        Home~LT~Gliederung 1   Home~LT~Gliederung 1þ¯ÿÿ  Ïé   è¹' ú´' šg* œœ  @' ¡A' £+'  ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Gliederung 2 Home~LT~Gliederung 1 Home~LT~Gliederung 2þ¯ÿÿ  Ðé    @' ¡A' §'	        Home~LT~Gliederung 3 Home~LT~Gliederung 2 Home~LT~Gliederung 3þ¯ÿÿ  Ñé    @' ¡A' §'        Home~LT~Gliederung 4 Home~LT~Gliederung 3 Home~LT~Gliederung 4þ¯ÿÿ  Òé    @' ¡A' §'
+        Home~LT~Gliederung 5 Home~LT~Gliederung 4 Home~LT~Gliederung 5þ¯ÿÿ  Óé    @' ¡A' §'
+        Home~LT~Gliederung 6 Home~LT~Gliederung 5 Home~LT~Gliederung 6þ¯ÿÿ  Ôé    @' ¡A' §'
+        Home~LT~Gliederung 7 Home~LT~Gliederung 6 Home~LT~Gliederung 7þ¯ÿÿ  Õé    @'	 ¡A' §'
+        Home~LT~Gliederung 8 Home~LT~Gliederung 7 Home~LT~Gliederung 8þ¯ÿÿ  Öé    @'
+ ¡A' §'
+        Home~LT~Gliederung 9 Home~LT~Gliederung 8 Home~LT~Gliederung 9þ¯ÿÿ  ×é    @' ¡A' §'
+       
+ Home~LT~Titel  
+ Home~LT~Titelþ¯ÿÿ  Íé   è¹' ú´' QQ  šg* £+' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Untertitel   Home~LT~Untertitelþ¯ÿÿ  Ýé   è¹' ú´' QQ  šg*  @' £+' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Notizen   Home~LT~Notizenþ¯ÿÿ  Úé   è¹' ú´' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Hintergrundobjekte   Home~LT~Hintergrundobjekteþ¯ÿÿ  Øé   +;(  ,,  --  ..         Home~LT~Hintergrund   Home~LT~Hintergrundþ¯ÿÿ  Ùé   è¹' ú´'        Title   Title  @  Íé           Subtitle   Subtitle  @  Ýé           Background objects   Background objects  @  Øé          
+ Background  
+ Background  @  Ùé           Notes   Notes  @  Úé          	 Outline 1  	 Outline 1  @  Ïé          	 Outline 2	 Outline 1	 Outline 2  @  Ðé          	 Outline 3	 Outline 2	 Outline 3  @  Ñé          	 Outline 4	 Outline 3	 Outline 4  @  Òé          	 Outline 5	 Outline 4	 Outline 5  @  Óé          	 Outline 6	 Outline 5	 Outline 6  @  Ôé          	 Outline 7	 Outline 6	 Outline 7  @  Õé          	 Outline 8	 Outline 7	 Outline 8  @  Öé          	 Outline 9	 Outline 8	 Outline 9  @  ×é                t  Ð    P  ”  ê  D  €  â  P  –  ä  8  ž  >  ¤  
+  p  Ö  <  ¢  	  n	  ô	  Š
+    f  °  Ò  ú  6  b  „  ®  á  
+  G
+  z
+  ­
+  à
+                                                                                                                 DrMd /  /  JoeMn   0   º11€yP   º11‚S   º11€yP                   ÿÿ                               O  ö   DrLy      LAYER_LAYOUT  DrLy    
+ LAYER_BCKGRND  DrLy      LAYER_BACKGRNDOBJ  DrLy     LAYER_CONTROLS  DrLy !    LAYER_MEASURELINES  DrMP À       &  JoeM   Çl  VT  Ð  Ð  Ð  Ð    DrML      DrOb <   SVDr &   ø  Ð  ’(  A&                     DrOb <   SVDr &   3D  Ð  Í[  A&                     DrOb <   SVDr &   ø  .  ’(  „L                     DrOb <   SVDr &   3D  .  Í[  „L                     DrXX     gg                   f                  Home~LT~Gliederung                                        ÿ    DrMP 8       ¶   JoeM   VT  Çl  {  y  ™  —    DrML      DrOb €   SVDr &   {  y  ½Q  0j               '          Home~LT~Hintergrundþ¯   {  y  ½Q  0j               DrXX     gg                   N                  Home~LT~Gliederung                       ÿ     DrMP ‡       ý  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML      DrOb Þ   SVDr &   º  ç
+  ›8  '0                 !         
+ Home~LT~Titelþ¯ƒ   º  ç
+  ›8  '0          d      xV4B1 O   õ    Click to move the slide
+ Home~LT~Titelþ¯  ž<(  Ÿ
+(  @'             DrOb é   SVDr &   Ü  Ç3  ˆG  "]                 #          Home~LT~Notizenþ¯Œ   Ü  Ç3  ˆG  "]          m      xV4B1 X   õ    Click to edit the notes format Home~LT~Notizenþ¯  ž<(  Ÿ
+(  @'           DrXX     gg                   V                  Home~LT~Gliederung                            ÿ     DrPg ä        b   JoeM   Çl  VT  Ð  Ð  Ð  Ð    DrML 8    DrMD ,     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrXX     Handoutsgg                   F                  Home~LT~Gliederung                ÿ    DrPg Š%       %  JoeM   VT  Çl  {  y  ™  —    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb    SVDr &   Š  y    	                              Standard l   Š  y    	          M      xV4B1 8   õ    CVS Standard  ž<(  Ÿ
+(  @'   ¦            DrOb Ê   SVDr &   {  c  q                                Standard t   {  c  q            U      xV4B1 @   õ    Tag20001214 Standard  ž<(  Ÿ
+(  @'   ¦            DrOb e  SVDr &   |  9  Ë  D                              Standard r           €ÿÿ€ÿÿ        S      xV4B1 >   õ    enhance Standard  Ÿ
+(  @'   §
+    ¦         ¡       P  	  ö  c    DrCn $                          DrCn $                            ;                                           xi  (#    ÿÿ DrOb Ê   SVDr &   {  C  q  ä#                              Standard t   {  C  q  ä#          U      xV4B1 @   õ    Tag20010110 Standard  ž<(  Ÿ
+(  @'   ¦            DrOb Å   SVDr &   {  ;.  q  Ü4                              Standard o   {  ;.  q  Ü4          P      xV4B1 ;   õ    Tag... Standard  ž<(  Ÿ
+(  @'   ¦            DrOb e  SVDr &   O  #  ž  $                              Standard r           €ÿÿ€ÿÿ        S      xV4B1 >   õ    enhance Standard  Ÿ
+(  @'   ¦    §
+         ¡       ö    ö  C    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb Q  SVDr &   ¹
+  #  4  /                              Standard ^           €ÿÿ€ÿÿ        ?      xV4B1 *   õ    ... Standard  Ÿ
+(  @'         ¡       ö  ä#  ö  ;.    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb É   SVDr &   ´$  1  ª=  Ò                              Standard s   ´$  1  ª=  Ò          T      xV4B1 ?   õ   
+ Ps20001214 Standard  ž<(  Ÿ
+(  @'   ¦   
+         DrOb m  SVDr &   o  9  2                                Standard z   W)  L   €ÿÿ€ÿÿ        [      xV4B1 F   õ   	 PS Branch Standard  ž<(  Ÿ
+(  @'   §
+   	 ¦   	      ¡       P  	  /1  1    DrCn $                          DrCn $                            ;                                           xi  (#    ÿÿ DrOb É   SVDr &   ©$  ÷$  Ÿ=  ˜+                              Standard s   ©$  ÷$  Ÿ=  ˜+          T      xV4B1 ?   õ   
+ Ps20001214 Standard  ž<(  Ÿ
+(  @'   ¦   
+         DrOb m  SVDr &   å*  ñ  n7  Ø%                              Standard z           €ÿÿ€ÿÿ        [      xV4B1 F   õ   
+ Enhance & tag Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       /1  Ò  $1  ÷$    DrCn $                         DrCn $   	                         ;                                           xi  (#    ÿÿ DrOb ^  SVDr &     ²  Š%  ()                              Standard k           €ÿÿ€ÿÿ        L      xV4B1 7   õ    Diff Standard  Ÿ
+(  @'  ¦' §'
+        ¡       q  “   ©$  G(    DrCn $                         DrCn $   	                        ;                                               PF    ÿÿ DrOb ^  SVDr &        •%  t!                              Standard k           €ÿÿ€ÿÿ        L      xV4B1 7   õ    Diff Standard  Ÿ
+(  @'  ¦' §'
+        ¡       ´$    q  “     DrCn $                         DrCn $                           ;                                           PF        ÿÿ DrOb ^  SVDr &     f'  Š%  l2                              Standard k           €ÿÿ€ÿÿ        L      xV4B1 7   õ    Diff Standard  Ÿ
+(  @'  ¦' §'
+        ¡       ©$  G(  q  ‹1    DrCn $   	                      DrCn $                           ;                                           PF        ÿÿ DrOb Á   SVDr &   %D  «  ½Q  L                              Standard k   %D  «  ½Q  L          L      xV4B1 7   õ    GS Standard  ž<(  Ÿ
+(  @'   ¦            DrOb à   SVDr &   %D  ]  ½Q  þ                              Standard m   %D  ]  ½Q  þ          N      xV4B1 9   õ    CSCO Standard  ž<(  Ÿ
+(  @'   ¦            DrOb à   SVDr &   %D  Ç   ½Q  h'                              Standard m   %D  Ç   ½Q  h'          N      xV4B1 9   õ    INTC Standard  ž<(  Ÿ
+(  @'   ¦            DrOb    SVDr &   %D  {(  ½Q  /                              Standard l   %D  {(  ½Q  /          M      xV4B1 8   õ    HWP Standard  ž<(  Ÿ
+(  @'   ¦            DrOb `  SVDr &   É<     E  Ü                              Standard m           €ÿÿ€ÿÿ        N      xV4B1 9   õ    Branch Standard  Ÿ
+(  @'  ¦' §'
+        ¡       ª=    %D  û    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb `  SVDr &   É<     E  Ž                              Standard m           €ÿÿ€ÿÿ        N      xV4B1 9   õ    Branch Standard  Ÿ
+(  @'  ¦' §'
+        ¡       ª=    %D  ­    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb f  SVDr &   É<     E  ø$                              Standard s   â   á   €ÿÿ€ÿÿ        T      xV4B1 ?   õ    Branch Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       ª=    %D  $    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb f  SVDr &   É<     E  ¬,                              Standard s   à    €ÿÿ€ÿÿ        T      xV4B1 ?   õ    Branch Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       ª=    %D  Ë+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb    SVDr &   {  Â@  q  cG                              Standard l   {  Â@  q  cG          M      xV4B1 8   õ    ... Standard  ž<(  Ÿ
+(  @'   ¦            DrOb   SVDr &     û3  ×  £A                              Standard            €ÿÿ€ÿÿ          ¡       ö  Ü4  ö  Â@    DrCn $                         DrCn $                            ;                                           xi  (#    ÿÿ DrOb Ä   SVDr &   ©$  Õ9  Ÿ=  v@                              Standard n   ©$  Õ9  Ÿ=  v@          O      xV4B1 :   õ    PS... Standard  ž<(  Ÿ
+(  @'   ¦            DrOb m  SVDr &   à*  ·*  i7  ¶:                              Standard z       Þ  €ÿÿ€ÿÿ        [      xV4B1 F   õ   
+ Enhance & tag Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       $1  ˜+  $1  Õ9    DrCn $   	                      DrCn $                            ;                                           xi  (#    ÿÿ DrOb d  SVDr &     ª0  Š%  >                              Standard q   á   á   €ÿÿ€ÿÿ        R      xV4B1 =   õ    Diff Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       q  ‹1  ©$  %=    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb d  SVDr &   ¾<    E  ()                              Standard q   á   á   €ÿÿ€ÿÿ        R      xV4B1 =   õ    Diff Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       %D  û  Ÿ=  G(    DrCn $                         DrCn $   	                        ;                                           PF        ÿÿ DrOb d  SVDr &   ¾<  Ì  E  ()                              Standard q   Â  Â  €ÿÿ€ÿÿ        R      xV4B1 =   õ    Diff Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       %D  ­  Ÿ=  G(    DrCn $                         DrCn $   	                        ;                                           PF        ÿÿ DrOb d  SVDr &   ¾<  6#  E  >                              Standard q   £  £  €ÿÿ€ÿÿ        R      xV4B1 =   õ    Diff Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       %D  $  Ÿ=  %=    DrCn $                         DrCn $                           ;                                           PF        ÿÿ DrOb d  SVDr &   ¾<  ê*  E  >                              Standard q   £  £  €ÿÿ€ÿÿ        R      xV4B1 =   õ    Diff Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       %D  Ë+  Ÿ=  %=    DrCn $                         DrCn $                           ;                                           PF        ÿÿ DrOb d  SVDr &     D<  Š%  óD                              Standard q   á   á   €ÿÿ€ÿÿ        R      xV4B1 =   õ    Diff Standard  ž<(  Ÿ
+(  @'  ¦' §'
+        ¡       ©$  %=  q  D    DrCn $                         DrCn $                           ;                                           PF        ÿÿ DrXX     gg                   F                  Home~LT~Gliederung                 ÿ     DrPg        {  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb <   SVDr &   º  ç
+  ›8  '0                      DrOb Ý   SVDr &   Ü  Ç3  ˆG  #]                   #          Home~LT~Notizenþ¯€   Ü  Ç3  ˆG  #]          a      xV4B1 L   õ    Click to add notes Home~LT~Notizenþ¯  ž<(  Ÿ
+(  @'           DrXX     gg                   V                  Home~LT~Gliederung                            ÿ     DrXX   V          þÿÿGeneric Printer                                                                                                                 SGENPRT PostScript                D       VT  $m  áí   ²      VT  $m      d   ,,lpr -P zonker                                                                                                                                                                                                                                                   default_queue                                                                                                                                                                                                                                                   SGENPRT                                                                                                                                                                                                                                                                                         	     DrVw P     SVDr€  
+   SVDr  :   SVDr    ö  ö  þ   þ   ö     ö                SVDrA  Layout  :   SVDr         è  è         þ      þ         SVDr  Ü        #   SVDr                            SVDr#            SVDr0     SVDr1    SVDr3    SVDr4    SVDr@ SVDr     SVDrD     SVDrP    SVDrQ Ö    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrHL      DrHl     {    DrHL      DrHL       <ñÿÿü   Éc  YH                                                 
+                                                                                                                                                              R o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ    ‰.½…щР€)ä°±                       À       C o m p O b j                                                         ÿÿÿÿ                                        =        O l e                                                         
+  ÿÿÿÿÿÿÿÿÿÿÿÿ                                              p e r s i s t   e l e m e n t s                                 "        ÿÿÿÿ                                              S f x D o c u m e n t I n f o                                         ÿÿÿÿÿÿÿÿ                                       u      S f x W i n d o w s                                               ÿÿÿÿ   ÿÿÿÿ                                              S f x S t y l e S h e e t s                                       ÿÿÿÿÿÿÿÿÿÿÿÿ                                       ’K       S u m m a r y I n f o r m a t i o n                           (     ÿÿÿÿÿÿÿÿ                                       (      S t a r D r a w D o c u m e n t 3                               $  ÿÿÿÿÿÿÿÿÿÿÿÿ                                    ,   f5                                                                          ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/docs/project_management/source_control.html
===================================================================

Added: trunk/gforge_base/evolvisforge/gforge/docs/templates/generic_document.html
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/templates/generic_document.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/templates/generic_document.html	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,56 @@
+<!-- ------------------------ HEADER ------------------------ -->
+<html>
+<head>
+  <title>SourceForge: HTML Documentation Template</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<table width="100%">
+  <tr>
+    <td>
+      <b><font size=+1>SourceForge: HTML Documentation Template</font></b><br>
+      <font size="-1">$Id: generic_document.html,v 1.1 2001/03/14 01:46:18 jbyers Exp $<br>
+      SourceForge Engine Team [<a href="mailto:alexandria-devel at sourceforge.net">email</a>]</font>
+    </td>
+    <td>
+      <a href="http://sourceforge.net"><img src="/images/sflogo2-105a.png" width="108" height="53" border="0"></a>
+    </td>
+  </tr>
+</table>
+
+<!-- ------------------------ MENU ------------------------ -->
+<p><hr><p>
+
+<dd>
+  <a href="#0">0. section zero</a>
+</dd>
+
+<dd>
+  <a href="#1">1. section one</a>
+</dd>
+
+<!-- ------------------------ SECTION 0 ------------------------ -->
+<p><hr><p>
+
+<a NAME="0"></a><b>0. section zero</b>
+
+<p>
+Content foo.
+
+<!-- ------------------------ SECTION 1 ------------------------ -->
+<p><hr><p>
+
+<a NAME="1"></a><b>1. section one</b>
+
+<p>
+Content bar.
+
+<!-- ------------------------ FOOTER ------------------------ -->
+<p><hr><p>
+
+<p align="right">
+  <font size="-1">
+    Copyright &copy; 1999, 2000, 2001 <a href="http://www.valinux.com/">VA Linux Systems, Inc.</a>
+  </font>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge/gforge/docs/templates/project_index.html
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/docs/templates/project_index.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/docs/templates/project_index.html	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,181 @@
+<!-- ------------------------ HEADER ------------------------ -->
+<html>
+<head>
+  <title>SourceForge: [TODO] Project Documents</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<table width="100%">
+  <tr>
+    <td>
+      <b><font size=+1>SourceForge: [TODO] Project Documents</font></b><br>
+      <font size="-1">$Id: project_index.html,v 1.1 2001/03/14 01:46:18 jbyers Exp $<br>
+      SourceForge Engine Team [<a href="mailto:alexandria-devel at sourceforge.net">email</a>]</font>
+    </td>
+    <td>
+      <a href="http://sourceforge.net"><img src="/images/sflogo2-105a.png" width="108" height="53" border="0"></a>
+    </td>
+  </tr>
+</table>
+
+<!-- ------------------------ MENU ------------------------ -->
+<p><hr><p>
+
+<dd>
+  <a href="#0">0. Requirements</a>
+</dd>
+
+<dd>
+  <a href="#1">1. Project Management</a>
+</dd>
+
+<dd>
+  <a href="#2">2. Design</a>
+</dd>
+
+<dd>
+  <a href="#3">3. Implementation</a>
+</dd>
+
+<!-- ------------------------ SECTION 0 ------------------------ -->
+<p><hr><p>
+
+<a NAME="0"></a><b>0. Requirements</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Project Charter, Vision</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Use Case Requirements</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Non-Functional Requirements</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Interface Requirements / Mockup</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+  <tr>
+    <td>Acceptance Plan</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Enhancement Proposals</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ SECTION 1 ------------------------ -->
+<p><hr><p>
+
+<a NAME="1"></a><b>1. Project Management</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Development Process</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Resources</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Schedule and Milestones</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Risk Management (Top 10 Risks)</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Text Archive (Emails, Meeting Minutes, IRC Logs)</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ SECTION 2 ------------------------ -->
+<p><hr><p>
+
+<a NAME="2"></a><b>2. Design</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Project Architecture</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Project Interfaces and Interactions</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Object Model (UML)</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ SECTION 3 ------------------------ -->
+<p><hr><p>
+
+<a NAME="3"></a><b>3. Implementation</b>
+
+<ul>
+<table border="1" cellpadding="2" cellspacing="2">
+  <tr>
+    <td>Development Notes</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+
+  <tr>
+    <td>Deployment and Installation Notes</td>
+    <td><font size="-1">[<a href="">HTML</a>]<font></td>
+    <td><?php echo util_cvs_status(""); ?></td>
+  </tr>
+</table>
+</ul>
+
+<!-- ------------------------ FOOTER ------------------------ -->
+<p><hr><p>
+
+<p align="right">
+  <font size="-1">
+    Copyright &copy; 1999, 2000, 2001 <a href="http://www.valinux.com/">VA Linux Systems, Inc.</a>
+  </font>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge/gforge/pager.php3
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/pager.php3	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/pager.php3	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,17 @@
+<?php
+
+require ('squal_pre.php');
+
+if (!$conn) {
+	echo "false\n";
+} else {
+	$result=db_query("SELECT count(*) FROM users");
+
+	if (!$result || db_numrows($result) < 1) {
+		echo "false\n";
+	} else {
+		echo "true\n";
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/utils/download/README
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/utils/download/README	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/utils/download/README	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,10 @@
+#
+#
+#	download_filemaint.pl
+#
+#	-runs once a minute to clear out files that 
+#		admins have requested to be deleted
+#	-depends on a file called .delete_files in the incoming directory
+#		.delete_file must be owned by nobody:nobody so the web servers
+#		can write to it
+#

Added: trunk/gforge_base/evolvisforge/gforge/utils/groupCreator
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/utils/groupCreator	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/utils/groupCreator	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,120 @@
+#!/usr/bin/perl -w
+#
+# $Id$
+#
+# groupCreator - perl script to create /home/groups/* and /cvsroot/* from
+#                ldap properly.  It's made independant of the other scripts
+#                for a reason.
+#
+use strict;
+use Net::LDAP;
+use Getopt::Std;
+
+# initialize our variables
+umask(002);
+my ($basedn, $binddn, $bindpw, $ldap, $filter, $uid, $gid, $type, $cvsdir);
+my ($entry, $attr, $mesg, @groupArray, $counter, $ticker, $group, %opts);
+
+ at groupArray = ();
+$counter = 0;
+$ticker = 0;
+
+# unbuffer our output
+$| = 1;
+
+# configuration
+$basedn = 'dc=sourceforge,dc=net';
+$binddn = 'cn=Manager, dc=sourceforge, dc=net';
+$bindpw = '';
+$filter = '(&(objectClass=posixGroup)(memberUid=*))';
+
+# proccess the command line args
+getopt('t', \%opts);
+if (!$opts{'t'} || $opts{'t'} ne 'shell' && $opts{'t'} ne 'cvs') {
+	print <<EOF;
+usage: groupCreator [-t type]
+creates project directories and repositories  based on information from LDAP
+
+	-t	type (shell or cvs) will create either cvsroots
+		or /home/groups directories
+
+EOF
+	exit;
+}
+
+$ldap = Net::LDAP->new('sf-ldap1') or die $@;
+
+$ldap->bind(
+	dn       => $binddn,
+	password => $bindpw
+);
+
+print "Performing search query $filter: ";
+$mesg = $ldap->search(
+		base   => $basedn,
+		filter => $filter,
+		scope  => 'sub',
+		attrs  => 'cn'
+) or die $@;
+print "done.\n";
+
+
+# build an array of group names
+foreach $entry ($mesg->entries) { 
+	$counter++;
+	push @groupArray, $entry->get('cn');
+}
+
+print "Preparing to process $counter groups: ";
+ at groupArray = sort @groupArray;
+print "done.\n";
+
+print "Processing: ";
+foreach $group (@groupArray) {
+	$ticker++;
+
+	# print a . for every 1000 groups we process
+	if ($ticker == 1000) {
+		print ".";
+		$ticker=0;
+	}
+
+	# get numeric uid for the user and group
+	$uid = getpwnam('nobody');
+	$gid = getgrnam($group);
+
+	# uh oh! nobody or the group doesn't seem to exist on this machine??
+	if (!$uid || !$gid) { die "\nhouston, we have a problem: $group\n"; }
+
+	# process this batch like we're on a shell server (create /home/groups/*, /home/groups/*/htdocs, /home/groups/*/cgi-bin)
+	if ($opts{'t'} eq 'shell') {
+		if (! -e "/home/groups/$group" && $group eq 'alexandria') {
+			mkdir "/home/precision/groups/$group", 0775 or die "Can't create top-level directory for $group: $!\n";
+			mkdir "/home/precision/groups/$group/htdocs", 0775 or die "Can't create htdocs directory for $group: $!\n";
+			mkdir "/home/precision/groups/$group/cgi-bin", 0775 or die "Can't create cgi-bin directory for $group: $!\n";
+			chown $uid, $gid, ("/home/precision/groups/$group", "/home/precision/groups/$group/htdocs", "/home/precision/groups/$group/cgi-bin");
+		}
+
+	# proccess the batch like a cvs server (create /cvsroot/* and init the repository)
+	} elsif ($opts{'t'} eq 'cvs') {
+		$cvsdir = "/home/precision/groups/cvsroot/$group";
+		if (! -e $cvsdir && $group eq 'alexandria') {
+			mkdir $cvsdir, 0775 or die "Can't create $cvsdir: $!\n";
+			system("/usr/bin/cvs -d$cvsdir init");
+			system("echo \"\" > $cvsdir/CVSROOT/writers");
+			system("echo \"anonymous\" > $cvsdir/CVSROOT/readers");
+			system("echo \"anonymous:\\\$1\\\$0H\\\$2/LSjjwDfsSA0gaDYY5Df/:anoncvs_$group\" > $cvsdir/CVSROOT/passwd");
+
+			# setup loginfo to make group ownership every commit
+			system("echo \"ALL chgrp -R $group $cvsdir\" > $cvsdir/CVSROOT/loginfo");
+			system("echo \"\" > $cvsdir/CVSROOT/val-tags");
+			chmod 0644, "$cvsdir/CVSROOT/val-tags";
+
+			# set group ownership, anonymous group user
+			system("chown -R $uid:$gid $cvsdir");
+			system("chmod g+rw $cvsdir/CVSROOT/*");
+		}
+	}
+		
+}
+print " done.\n"


Property changes on: trunk/gforge_base/evolvisforge/gforge/utils/groupCreator
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/utils/ldap-check-replica
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/utils/ldap-check-replica	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/utils/ldap-check-replica	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+#
+#  Check proper installation of LDAP replication 
+#  by pfalcon at sourceforge.net 2001-01-16
+#  $Id: ldap-check-replica,v 1.1 2001/01/24 22:17:31 pfalcon Exp $
+#
+
+require("include.pl");  # Include all the predefined functions
+&parse_local_inc;
+
+$ldap1="sf-ldap1";
+$ldap2="sf-ldap2";
+
+print "Making change to the master server.\n";
+$time=time();
+$cmd = "
+echo '
+dn: cn=Replicator,dc=sourceforge,dc=net
+changetype: modify
+replace: description
+description: modified at $time
+' |
+${ldap_prefix}ldapmodify -h $ldap1 -p $ldap1 -D '$sys_ldap_bind_dn' -w $sys_ldap_passwd
+";
+system($cmd);
+
+print "Allowing for propogation delay...\n\n";
+sleep(10);
+
+print "Querying master server:\n";
+$cmd = "${ldap_prefix}ldapsearch -h $ldap1 -p $sys_ldap_port -LLL -D '$sys_ldap_bind_dn' -w $sys_ldap_passwd -b '$sys_ldap_base_dn' '(cn=Replicator)' description";
+system($cmd);
+print "Querying slave server 1:\n";
+$cmd = "${ldap_prefix}ldapsearch -h $ldap2 -p $sys_ldap_port -LLL -D '$sys_ldap_bind_dn' -w $sys_ldap_passwd -b '$sys_ldap_base_dn' '(cn=Replicator)' description";
+system($cmd);
+
+print "If two requests above differ, LDAP replication is NOT functioning\n";


Property changes on: trunk/gforge_base/evolvisforge/gforge/utils/ldap-check-replica
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/evolvisforge/gforge/www/account/unsubscribe.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/account/unsubscribe.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/account/unsubscribe.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,62 @@
+<?php
+/**
+  *
+  * Disable optional site mailings for account
+  *
+  * This page is accessed via URL present in site mailings
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require_once('pre.php');    
+require_once('common/include/account.php');
+
+if (!$confirm_hash) {
+	$confirm_hash = $ch;
+}
+
+$confirm_hash = html_clean_hash_string($confirm_hash);
+
+$res_user = db_query("SELECT * FROM users WHERE confirm_hash='$confirm_hash'");
+if (db_numrows($res_user) > 1) {
+	exit_error("Error","This confirm hash exists more than once.");
+}
+if (db_numrows($res_user) < 1) {
+	exit_error("Error","Invalid confirmation hash.");
+}
+
+$row_user = db_fetch_array($res_user);
+$user =& user_get_object($row_user['user_id'], $res_user);
+exit_assert_object($user, 'User');
+
+$user->unsubscribeFromMailings($all);
+
+site_header(array('title'=>"Unsubscription Complete"));
+
+if ($all) {
+	$what = $Language->getText('account_unsubscribe', 'all_mailings');
+} else {
+	$what = $Language->getText('account_unsubscribe', 'site_mailings');
+}
+?>
+
+<h2>Unsubscription Complete</h2>
+<p>
+You have been unsubscribed from <?php print $what; ?>. In case you
+will want to re-activate your subscriptions in the future, login
+and visit your Account Maintenance page.
+</p>
+
+<p>
+<A href="/"><?php echo $Language->getText('general', 'return'); ?></A>
+</p>
+
+<?php
+site_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/admin_table.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/admin_table.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/admin_table.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,276 @@
+<?php
+/**
+  *
+  * Module to render generic HTML tables for Site Admin
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+/**
+ *	admin_table_add() - present a form for adding a record to the specified table
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ */
+function admin_table_add($table, $unit, $primary_key) {
+	global $PHP_SELF;
+	
+	// This query may return no rows, but the field names are needed.
+	$result = db_query('SELECT * FROM '.$table.' WHERE '.$primary_key.'=0');
+
+	if ($result) {
+		$cols = db_numfields($result);
+	       
+		echo 'Create a new '.$unit.' below:
+			<FORM NAME="add" ACTION="'.$PHP_SELF.'?function=postadd" METHOD="POST">
+			<TABLE>';
+
+		for ($i = 0; $i < $cols; $i++) {
+			$fieldname = db_fieldname($result, $i);
+
+			echo '<TR><TD><B>'.$fieldname.'</B></TD>';
+			echo '<TD><INPUT TYPE="text" NAME="'.$fieldname.'" VALUE=""></TD></TR>';
+		}
+		echo '</TABLE><INPUT TYPE="submit" VALUE="Submit New '.ucwords($unit).'"></FORM>
+			<FORM NAME="cancel" ACTION="'.$PHP_SELF.'" method="POST">
+			<INPUT TYPE="submit" VALUE="Cancel">
+			</FORM>';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ *	admin_table_postadd() - update the database based on a submitted change
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ */
+function admin_table_postadd($table, $unit, $primary_key) {
+	global $HTTP_POST_VARS;
+
+	$sql = "INSERT INTO $table ("
+		. join(',', array_keys($HTTP_POST_VARS))
+		. ") VALUES ('"
+		. htmlspecialchars(join("','", array_values($HTTP_POST_VARS)))
+		. "')";
+
+	if (db_query($sql)) {
+		echo ucfirst($unit).' successfully added.';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ *	admin_table_confirmdelete() - present a form to confirm requested record deletion
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ *	@param $id - the id of the record to act on
+ */
+function admin_table_confirmdelete($table, $unit, $primary_key, $id) {
+	global $PHP_SELF;
+
+	$result = db_query("SELECT * FROM $table WHERE $primary_key=$id");
+
+	if ($result) {
+		$cols = db_numfields($result);
+
+		echo 'Are you sure you want to delete this '.$unit.'?
+			<UL>';
+		for ($i = 0; $i < $cols; $i++) {
+			echo '<LI><B>'.db_fieldname($result,$i).'</B> '.db_result($result,0,$i).'</LI>';
+		}
+		echo '</UL>
+			<FORM NAME="delete" ACTION="'.$PHP_SELF.'?function=delete&id='.$id.'" method="POST">
+			<INPUT TYPE="submit" VALUE="Delete">
+			</FORM>
+			<FORM NAME="cancel" ACTION="'.$PHP_SELF.'" method="POST">
+			<INPUT TYPE="submit" VALUE="Cancel">
+			</FORM>';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ *	admin_table_delete() - delete a record from the database after confirmation
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ *	@param $id - the id of the record to act on
+ */
+function admin_table_delete($table, $unit, $primary_key, $id) {
+	if (db_query("DELETE FROM $table WHERE $primary_key=$id")) {
+		echo ucfirst($unit).' successfully deleted.';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ *	admin_table_edit() - present a form for editing a record in the specified table
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ *	@param $id - the id of the record to act on
+ */
+function admin_table_edit($table, $unit, $primary_key, $id) {
+	global $PHP_SELF;
+	
+	$result = db_query("SELECT * FROM $table WHERE $primary_key=$id");
+
+	if ($result) {
+		$cols = db_numfields($result);
+	       
+		echo 'Modify the '.$unit.' below:
+			<FORM NAME="edit" ACTION="'.$PHP_SELF.'?function=postedit&id='.$id.'" METHOD="POST">
+			<TABLE>';
+
+		for ($i = 0; $i < $cols; $i++) {
+			$fieldname = db_fieldname($result, $i);
+			$value = db_result($result, 0, $i);
+
+			echo '<TR><TD><B>'.$fieldname.'</B></TD>';
+			
+			if ($fieldname == $primary_key) {
+				echo "<TD>$value</TD></TR>";
+			} else {
+				echo '<TD><INPUT TYPE="text" NAME="'.$fieldname.'" VALUE="'.$value.'"></TD></TR>';
+			}
+		}
+		echo '</TABLE><INPUT TYPE="submit" VALUE="Submit Changes"></FORM>
+			<FORM NAME="cancel" ACTION="'.$PHP_SELF.'" method="POST">
+			<INPUT TYPE="submit" VALUE="Cancel">
+			</FORM>';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ *	admin_table_postedit() - update the database to reflect submitted modifications to a record
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ *	@param $id - the id of the record to act on
+ */
+function admin_table_postedit($table, $unit, $primary_key, $id) {
+	global $HTTP_POST_VARS;
+
+	$sql = 'UPDATE '.$table.' SET ';
+	while (list($var, $val) = each($HTTP_POST_VARS)) {
+		if ($var != $primary_key) {
+			$sql .= "$var='". htmlspecialchars($val) ."', ";
+		}
+	}
+	$sql = ereg_replace(', $', ' ', $sql);
+	$sql .= "WHERE $primary_key=$id";
+
+	if (db_query($sql)) {
+		echo ucfirst($unit) . ' successfully modified.';
+	} else {
+		echo db_error();
+	}
+}
+
+/**
+ *	admin_table_show() - display the specified table, sorted by the primary key, with links to add, edit, and delete
+ *
+ *	@param $table - the table to act on
+ *	@param $unit - the name of the "units" described by the table's records
+ *	@param $primary_key - the primary key of the table
+ */
+function admin_table_show($table, $unit, $primary_key) {
+        global $HTML, $PHP_SELF;
+
+        $result = db_query("SELECT * FROM $table ORDER BY $primary_key");
+
+	if ($result) {
+		$rows = db_numrows($result);
+		$cols = db_numfields($result);
+
+                echo '<TABLE BORDER="0" WIDTH="100%">
+		<TR BGCOLOR="'.$HTML->COLOR_HTMLBOX_TITLE.'">
+		<TD COLSPAN="'.($cols+1).'"><B><FONT COLOR="'. $HTML->FONTCOLOR_HTMLBOX_TITLE .'">'. ucwords($unit) .'s</FONT></B>
+		<A HREF="'.$PHP_SELF.'?function=add">[add new]</A></TD></TR>';
+
+                echo '
+			<TR><TD WIDTH="5%"></TD>';
+                for ($i = 0; $i < $cols; $i++) {
+			echo '<TD><B>'.db_fieldname($result,$i).'</B></TD>';
+		}
+		echo '</TR>';
+
+                for ($j = 0; $j < $rows; $j++) {
+			echo '<TR BGCOLOR="'. html_get_alt_row_color($j) .'">';
+
+                        $id = db_result($result,$j,0);
+                        echo '<TD><A HREF="'.$PHP_SELF.'?function=edit&id='.$id.'">[edit]</A>';
+                        echo '<A HREF="'.$PHP_SELF.'?function=confirmdelete&id='.$id.'">[delete]</A> </TD>';
+			for ($i = 0; $i < $cols; $i++) {
+				echo '<TD>'. db_result($result, $j, $i) .'</TD>';
+			}
+			echo '</TR>';
+		}
+		echo '</TABLE>';
+	} else {
+		echo db_error();
+	}
+}
+
+
+require_once('pre.php');
+session_require(array('group'=>'1','admin_flags'=>'A'));
+
+$HTML->header(array('title'=>'Edit the '. ucwords($unit) .'s Table'));
+
+echo '<H3>Edit '. ucwords($unit) .'s</H3>
+<P><A HREF="/admin/">Site Admin Home</A>
+<P>';
+
+switch ($function) {
+	case 'add' : {
+		admin_table_add($table, $unit, $primary_key);
+		break;
+	}
+	case 'postadd' : {
+		admin_table_postadd($table, $unit, $primary_key);
+		break;
+	}
+	case 'confirmdelete' : {
+		admin_table_confirmdelete($table, $unit, $primary_key, $id);
+		break;
+	}
+	case 'delete' : {
+		admin_table_delete($table, $unit, $primary_key, $id);
+		break;
+	}
+	case 'edit' : {
+		admin_table_edit($table, $unit, $primary_key, $id);
+		break;
+	}
+	case 'postedit' : {
+		admin_table_postedit($table, $unit, $primary_key, $id);
+		break;
+	}
+}
+
+echo admin_table_show($table, $unit, $primary_key);
+
+$HTML->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/database.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/database.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/database.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,150 @@
+<?php
+/**
+  *
+  * Site Admin page for maintaining groups'databases
+  *
+  * This page allows to:
+  *   - browse aggregate numbers of databases of specific type (active,
+  *     deleted, etc.)
+  *   - list all databases of given type
+  *   - edit some database (by going to group's DB Admin page)
+  *   - register existing database in system
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('www/admin/admin_utils.php');
+
+session_require(array('group'=>'1','admin_flags'=>'A'));
+
+
+if ($submit) {
+
+	$group_id = seek_gid($groupname);
+
+	if ($group_id) {
+
+		$group =& group_get_object($group_id);
+		exit_assert_object($group, 'Group');
+
+		$user =& session_get_user();
+		exit_assert_object($user, 'User');
+
+		$res = db_query("
+			INSERT INTO prdb_dbs(group_id, dbname, dbusername, dbuserpass, requestdate, dbtype, created_by, state)
+			VALUES ($group_id,'$dbname','$dbname','xxx',".time().",1,".$user->getID().",1)
+		");
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$feedback .= 'Error adding databse: '.db_error();
+		} else {
+			$feedback .= "Group <i>".$group->getUnixName()."</i> added already active database";
+		}
+
+	} else {
+
+		$feedback .=	"<b>Unable to insert already active database..</b>";
+
+	}
+			
+}			
+
+
+site_admin_header(array('title'=>"Site Admin: Groups' DB Maintanance"));
+
+$res_db = db_query("
+	SELECT stateid,statename,COUNT(*) 
+	FROM prdb_dbs,prdb_states 
+	WHERE stateid=state 
+	GROUP BY statename,stateid
+");
+
+echo '<h3>Statistics for Project Databases</h3>';
+
+if (db_numrows($res_db) > 0) {
+
+	echo '<table width="50%"><tr><td>';
+	$title=array();
+	$title[]='Type';
+	$title[]='Count';
+	echo html_build_list_table_top($title);
+
+	while ($row_db = db_fetch_array($res_db)) {
+
+		print '<tr><td align="center"><a href="'.$PHP_SELF.'?displaydb=1&dbstate='.$row_db['stateid'].'">'.$row_db['statename'].'</a></td><td align="center">'.$row_db['count'].'</td></tr>';
+
+	}
+
+	echo '</table>';
+	echo '</td></tr></table>';
+
+} else {
+	echo '<p>No databases defined</p>';
+}
+
+
+if ($displaydb) {
+
+	$res_db = db_query("
+		SELECT statename 
+		FROM prdb_states 
+		WHERE stateid=".$dbstate."
+	");
+
+	$row_db = db_fetch_array($res_db);
+
+	print '<hr><h3>Displaying Databases of Type: '.$row_db['statename'].' </h3>';
+
+	$res_db = db_query("
+		SELECT * 
+		FROM prdb_dbs 
+		WHERE state=".$dbstate."
+		ORDER BY dbname
+	");
+
+	while ($row_db = db_fetch_array($res_db)) {
+
+		print '<li><a href="/project/admin/database.php?group_id='.$row_db['group_id'].'">'.$row_db['dbname']."</a>";
+
+	}
+	
+
+}
+
+
+
+?>
+<hr>
+
+<h3>Add an already active database</h3>
+
+<form name="madd" method="post" action="<?php  echo $PHP_SELF; ?>">
+
+<table>
+
+<tr>
+<td>Group Unix Name</td>
+<td><input type="text" name="groupname"></td>
+</tr>
+
+<tr>
+<td>Database Name</td>
+<td><input type="text" name="dbname"></td>
+</tr>
+
+</table>
+<input type="submit" name="submit" value="Add">
+</form>
+
+<?php
+
+site_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_filetype.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_filetype.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_filetype.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,21 @@
+<?php
+/**
+  *
+  * Site Admin page to edit File Release System file types
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+$unit        = 'file type';
+$table       = 'frs_filetype';
+$primary_key = 'type_id';
+
+include_once('admin_table.php');
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_processor.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_processor.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/edit_frs_processor.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,21 @@
+<?php
+/**
+  *
+  * Site Admin page to edit File Release System processor types
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+$unit        = 'processor';
+$table       = 'frs_processor';
+$primary_key = 'processor_id';
+
+include_once('admin_table.php');
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/edit_supported_languages.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/edit_supported_languages.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/edit_supported_languages.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,21 @@
+<?php
+/**
+  *
+  * Site Admin page to edit supported language treanslations
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+$unit        = 'supported language';
+$table       = 'supported_languages';
+$primary_key = 'language_id';
+
+include_once('admin_table.php');
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/intelapprove.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/intelapprove.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/intelapprove.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,99 @@
+<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id: intelapprove.php,v 1.9 2001/04/24 14:34:37 pfalcon Exp $
+
+require_once('pre.php');    
+
+session_require(array('group'=>'5914','admin_flags'=>'A'));
+
+// group public choice
+if ($submit) {
+	/*
+		update the project flag to active
+	*/
+	$accept_count=count($accept);
+	$delete_count=count($delete);
+
+	$approve_message='Congratulations!  Your proposal has been accepted and you now have
+access to the Itanium(tm) processor prototype compile farm.  This is a
+great opportunity for members of the Open Source community and
+SourceForge is excited to be able to provide this access.  Please be
+understanding if there are any issues with accessing the Itanium
+processor prototype compile farm during the start-up phase.  We will be
+continually improving access to the machines.
+
+Remember that your access to the compile farm is subject to the terms
+and conditions set forth by Intel and VA Linux as documented in the
+click through license.
+
+Please wait at least 6 hours for your account to be activated
+before trying to login.
+
+If you have questions, READ THE DOCS at http://sourceforge.net/compilefarm/
+
+For find more resources on porting to IA-64 and for mailing lists, see
+http://sourceforge.net/project/?group_id=1196';
+
+	$delete_message='I am sorry to inform you that your proposal to access the Itanium(tm)
+processor prototype compile farm has been rejected because you did not 
+meet our criteria.';
+
+
+	for ($i=0; $i<$accept_count; $i++){
+		$result=db_query("UPDATE intel_agreement SET is_approved='1' WHERE user_id='$accept[$i]'");
+		if (!$result) {
+			echo db_error();
+		}
+		$sql="SELECT email FROM users WHERE user_id='$accept[$i]'";
+		$result=db_query($sql);
+		mail (db_result($result,0,'email'),'You Have Been Approved',$approve_message,'From: esindelar at users.sourceforge.net');
+	}
+
+	for ($i=0; $i<$delete_count; $i++){
+		$result=db_query("DELETE FROM intel_agreement WHERE user_id='$delete[$i]'");
+		if (!$result) {
+			echo db_error();
+		}
+		$sql="SELECT email FROM users WHERE user_id='$delete[$i]'";
+		$result=db_query($sql);
+		mail (db_result($result,0,'email'),'You Could Not Be Approved',$delete_message,'From: esindelar at users.sourceforge.net');
+	}
+
+
+}
+
+
+// get current information
+$result = db_query("SELECT users.user_name,users.email,users.user_id,intel_agreement.message ".
+		"FROM users,intel_agreement ".
+		"WHERE users.user_id=intel_agreement.user_id AND is_approved='0'");
+
+if (db_numrows($result) < 1) {
+	exit_error("None Found","No Pending Requests to Approve");
+}
+
+$HTML->header(array('title'=>'Approving Pending Requests'));
+
+echo '<TABLE BORDER="1">';
+
+echo '<TR><TD>user_name</TD><TD>Email</TD><TD>Justification</TD><TD>Accept</TD><TD>Delete</TD></TR>
+
+	<FORM ACTION="'. $PHP_SELF .'" METHOD="POST">';
+
+$rows=db_numrows($result);
+
+for ($i=0; $i<$rows; $i++) {
+	echo '<TR><TD><A HREF="/developer/?form_dev='. db_result($result,$i,'user_id') .'">'. db_result($result,$i,'user_name') .'</A></TD><TD>'. db_result($result,$i,'email') .'</TD><TD>'. nl2br(db_result($result,$i,'message')) .'</TD>
+		<TD VALIGN="TOP"><INPUT TYPE="CHECKBOX" NAME="accept[]" VALUE="'. db_result($result,$i,'user_id') .'"></TD>
+		<TD VALIGN="TOP"><INPUT TYPE="CHECKBOX" NAME="delete[]" VALUE="'. db_result($result,$i,'user_id') .'"></TD></TR>';
+}
+
+echo '<TR><TD COLSPAN="5"><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Process"></TD></TR></FORM></TABLE>';
+
+$HTML->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/massmail-old.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/massmail-old.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/massmail-old.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,87 @@
+<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id$
+
+require_once('pre.php');
+
+session_require(array('group'=>'1','admin_flags'=>'A'));
+$HTML->header(array('title'=>"Administrative Mass Mail Engine"));
+
+// get numbers of users for each mailing
+$res_count = db_query("SELECT count(*) AS count FROM users WHERE status='A' AND mail_va=1");
+$row_count = db_fetch_array($res_count);
+$count_comm = $row_count[count];
+$res_count = db_query("SELECT count(*) AS count FROM users WHERE status='A' AND mail_siteupdates=1");
+$row_count = db_fetch_array($res_count);
+$count_sf = $row_count[count];
+$res_count = db_query("SELECT count(*) AS count FROM users WHERE status='A'");
+$row_count = db_fetch_array($res_count);
+$count_all = $row_count[count];
+$res_count = db_query("SELECT count(*) AS count FROM users,user_group WHERE "
+	."users.user_id=user_group.user_id AND users.status='A' AND user_group.admin_flags='A'");
+$row_count = db_fetch_array($res_count);
+$count_admin = $row_count[count];
+$res_count = db_query("SELECT count(*) AS count FROM users,user_group WHERE "
+	."users.user_id=user_group.user_id AND users.status='A'");
+$row_count = db_fetch_array($res_count);
+$count_devel = $row_count[count];
+$res_count = db_query("SELECT count(*) AS count FROM users,user_group WHERE "
+	."users.user_id=user_group.user_id AND users.status='A' AND user_group.group_id=1");
+$row_count = db_fetch_array($res_count);
+$count_sfadmin = $row_count[count];
+
+print '<P><B>Mail Engine for SourceForge Subscribers (MESS)</B>
+
+<P>Be <FONT color=#FF0000><B>VERY</B></FONT> careful with this form,
+because sutmitting it WILL send email to lots of users.
+
+<FORM action="massmail_execute.php">
+<INPUT type="radio" name="destination" value="comm">
+Send only to users subscribed to "Additional Community Mailings" ('
+.$count_comm
+.')<BR><INPUT type="radio" name="destination" value="sf">
+Send only to users that agreed to receive "Site Updates" ('
+.$count_sf
+.')<BR><INPUT type="radio" name="destination" value="devel">
+Send only to project developers ('
+.$count_devel
+.')<BR><INPUT type="radio" name="destination" value="admin">
+Send only to project administrators ('
+.$count_admin
+.')<BR><INPUT type="radio" name="destination" value="sfadmin">
+Send only to SourceForge administrators (test) ('
+.$count_sfadmin
+.')<BR><INPUT type="radio" name="destination" value="all">
+Send to all users, regardless of their preferences ('
+.$count_all
+.')
+<P><B>Start With User ID:</B> (for use when the process quits)
+<BR><INPUT type="text" name="first_user" value="0">
+<P>
+Subject:
+<BR><INPUT type="text" name="mail_subject" value="SourceForge: ">
+
+<P>Text of Message:
+<PRE>
+<BR><TEXTAREA name="mail_message" cols="70" rows="40" wrap="physical">
+
+---------------------
+This email was sent from '. $GLOBALS['sys_default_domain'] .'. To change your email receipt
+preferences, please visit the site and edit your account via the
+"Account Maintenance" link.
+
+Please direct any questions to admin@'. $GLOBALS['sys_default_domain'].' .
+</TEXTAREA>
+</PRE>
+<P><INPUT type="submit" name="Submit" value="Submit">
+
+</FORM>
+';
+
+$HTML->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/resetapc.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/resetapc.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/resetapc.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,16 @@
+<?php
+
+require_once('pre.php');
+require_once('www/admin/admin_utils.php');
+
+session_require(array('group'=>'1','admin_flags'=>'A'));
+
+site_admin_header(array('title'=>"Site Admin"));
+
+echo '<P>'.$sys_name.'<P>';
+
+apc_reset_cache();
+
+site_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/unsubscribe.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/unsubscribe.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/unsubscribe.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,134 @@
+<?php
+/**
+  *
+  * Site Mailings Subscription Maintanance page
+  *
+  * This page is used to maintain site mailings (currently, just
+  * unsubscribe specific user).
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('www/admin/admin_utils.php');
+session_require(array('group'=>'1','admin_flags'=>'A'));
+
+if ($submit && $user_name) {
+
+	if (!$type) {
+
+	        /*
+	        	Show form for unsubscription type selection
+		*/
+
+                site_admin_header(array('title'=>'Site Mailings Subscription Maintanance'));
+		?>
+
+		<h4>Unsubscribe user: <?php echo $user_name; ?></h4>
+		<p>
+		You can unsubscribe user either from admin-initiated
+		sitewide mailings or from all site mailings
+		(admin-initiated and automated mailings, like forum
+		and file release notifications).
+		</p>
+		<form action="<?php echo $PHP_SELF; ?>" method="POST">
+		<input type="hidden" name="user_name" value="<?php echo $user_name?>">
+		Unsubscription type: <?php echo html_build_select_box_from_arrays(
+			array('MAIL','ALL'),
+			array('Admin-initiated mailings','All site mailings'),
+			'type',false,false
+		); ?>
+		<input type="submit" name="submit" value="Unsubscribe">
+		</form>         
+
+		<?php
+		site_admin_footer(array());
+		exit();
+	} else {
+
+	        /*
+	        	Perform unsubscription
+		*/
+
+		$u =& user_get_object_by_name($user_name);
+		exit_assert_object($u, 'User');
+		if (!$u->unsubscribeFromMailings($type=='ALL' ? 1 : 0)) {
+			exit_error(
+				'Error',
+				'Could not unsubscribe user: '.$u->getErrorMessage()
+			);
+		}
+
+		$feedback .= 'User unsubscribed<br>';
+	}
+}
+
+site_admin_header(array('title'=>"Site Mailings Subscription Maintanance"));
+
+?>
+
+<h4>
+Site Mailings Subscription Maintanance
+</h4>
+
+<p>
+Use field below to find users which match given pattern with
+the SourceForge username, real name, or email address
+(substring match is preformed, use '%' in the middle of pattern
+to specify 0 or more arbitrary characters). Click on the username
+to unsubscribe user from site mailings (new form will appear).
+</p>
+
+<form action="<?php echo $PHP_SELF; ?>" method="POST">
+Pattern: <input type="text" name="pattern" value="<?php echo $pattern; ?>"> 
+<input type="submit" name="submit" value="Show users matching pattern">
+</form>
+
+<?php
+
+if ($pattern) {
+	$res = db_query("
+		SELECT *
+		FROM users
+		WHERE user_name LIKE '%$pattern%'
+		OR realname ILIKE '%$pattern%'
+		OR email ILIKE '%$pattern%'
+	");
+
+	$title=array();
+	$title[]='&nbsp;';
+	$title[]='user_id';
+	$title[]='Username';
+	$title[]='Real Name';
+	$title[]='Email';
+	$title[]='Site Mail.';
+	$title[]='Comm. Mail.';
+
+	echo html_build_list_table_top($title);
+
+	while ($row = db_fetch_array($res)) {
+		echo '
+		<tr bgcolor="'.html_get_alt_row_color($i++).'">
+		<td>&nbsp;</td>
+		<td>'.$row['user_id'].'</td>
+		<td><a href="unsubscribe.php?submit=1&user_name='.$row['user_name'].'">'.$row['user_name'].'</a></td>
+		<td>'.$row['realname'].'</td>
+		<td> '.$row['email'].'</td>
+		<td>'.$row['mail_siteupdates'].'</td>
+		<td> '.$row['mail_va'].'</td>
+		</tr>
+		';
+	}
+
+	echo '</table>';
+}
+
+site_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/admin/vhost.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/admin/vhost.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/admin/vhost.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,173 @@
+<?php
+/**
+  *
+  * Site Admin page for maintaining groups' Virtual Hosts
+  *
+  * This page allows to:
+  *   - add a VHOST entry for group
+  *   - query properties of VHOST entry
+  *   - edit some database (by going to group's DB Admin page)
+  *   - register existing database in system
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('common/include/account.php');
+require_once('www/admin/admin_utils.php');
+
+session_require(array('group'=>'1','admin_flags'=>'A'));
+
+if ($add) {
+
+	$group_id = seek_gid($groupname);
+
+	if ($group_id) {
+
+		$group = &group_get_object($group_id);
+		exit_assert_object($group, 'Group');
+
+		if (valid_hostname($vhost_name)) {
+
+			$homedir = account_group_homedir($group->getUnixName());
+			$docdir = $homedir.'/htdocs/';
+			$cgidir = $homedir.'/cgi-bin/';
+
+
+			$res = db_query("
+				INSERT INTO prweb_vhost(vhost_name, docdir, cgidir, group_id) 
+				VALUES ('$vhost_name','$docdir','$cgidir',$group_id)
+			");
+
+			if (!$res || db_affected_rows($res) < 1) {
+				$feedback .= 'Error adding VHOST: '.db_error();
+			} else {
+				$feedback .= "Virtual Host <b>".$vhost_name."</b> scheduled for creation on group <i>".$group->getUnixName()."</i>";
+			}
+		} else {
+
+			$feedback .=	"<b>The provided group name does not exist.</b>";
+
+		}
+			
+	}			
+}
+
+if ($tweakcommit) {
+
+	$res = db_query("
+		UPDATE prweb_vhost 
+		SET docdir='$docdir',
+			cgidir='$cgidir' 
+		WHERE vhostid=$vhostid
+	");
+
+	if (!$res || db_affected_rows($res) < 1) {
+		$feedback .= 'Error updating VHOST entry: '.db_error();
+	} else {
+		$feedback .= "Virtual Host entry updated.";
+	}		
+
+}
+
+
+site_admin_header(array('title'=>"Site Admin"));
+?>
+
+<h3>Virtual Host Administration</h3>
+
+<form name="madd" method="post" action="<?php echo $PHP_SELF; ?>">
+
+<b>Add Virtual Host</b>
+
+<table border="0">
+
+<tr>
+<td>Group Unix Name</td>
+<td><input type="text" name="groupname"></td>
+</tr>
+
+<tr>
+<td>Virtual Host Name</td>
+<td><input type="text" name="vhost_name"></td>
+</tr>
+</table>
+
+<input type="submit" name="add" value="Add Virtual Host">
+</form>
+
+<p>
+
+
+<hr>
+<b>Tweak Directories</b>
+<br>
+
+<form name="tweak" method="post" action="<?php echo $PHP_SELF; ?>">
+<table border="0">
+<tr>
+   <td>Virtual Host: </td><td><input type="text" name="vhost_name"></td><td><input type="submit" value="Get Info"></td>
+</tr>
+</table>
+
+<input type="hidden" name="tweak" value="1">
+
+</form>
+
+<?php
+
+if ($tweak) {
+
+
+	$res_vh = db_query("
+		SELECT vhostid,vhost_name,docdir,cgidir,unix_group_name
+		FROM prweb_vhost,groups
+		WHERE vhost_name='$vhost_name'
+		AND prweb_vhost.group_id=groups.group_id
+	");
+
+	if (db_numrows($res_vh) > 0) {
+
+		$row_vh = db_fetch_array($res_vh);
+	
+		print '<p><b>Update Record:</b><hr>';
+
+		$title=array();
+		$title[]='VHOST ID';
+		$title[]='VHOST Name';
+		$title[]='Group';
+		$title[]='Htdocs Dir';
+		$title[]='CGI Dir';
+		$title[]='Operations';
+		echo html_build_list_table_top($title);
+
+		print '
+			<form name="update" method="post" action="'.$PHP_SELF.'">
+
+			'.html_build_list_table_top($title).'
+			<tr><td>'.$row_vh['vhostid'].'</td>
+			<td>'.$row_vh['vhost_name'].'</td>
+			<td><a href="/projects/'.$row_vh['unix_group_name'].'">'.$row_vh['unix_group_name'].'</a></td>
+			<td><input maxlength="255" type="text" name="docdir" value="'.$row_vh['docdir'].'"></td>
+			<td><input type="text" name="cgidir" value="'.$row_vh['cgidir'].'"></td><td><input maxlength="255" type="submit" value="Update"></tr>
+			</table>
+
+			<input type="hidden" name="tweakcommit" value="1">
+			<input type="hidden" name="vhostid" value="'.$row_vh['vhostid'].'">
+			</form>
+		';
+	} else {
+		echo "No such VHOST: '$vhost_name'";
+	}
+
+}
+
+site_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_featuredprojects.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_featuredprojects.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_featuredprojects.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,55 @@
+<?php
+/**
+ * rss_foundry_featuredprojects.php - Stats export page for Foundry featured projects.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @author		Darrell Brogdon <dbrogdon at valinux.com>
+ * @date		2001-06-06
+ * @version		$Id: rss_foundry_featuredprojects.php,v 1.2 2001/06/14 21:54:23 dbrogdon Exp $
+ *
+ */
+require_once('pre.php');
+require_once('rss_utils.inc');
+
+header("Content-Type: text/plain");
+print '<?xml version="1.0" encoding="utf-8"?>';
+?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
+    <channel rdf:about="http://www.xml.com/xml/news.rss">
+        <title>Featured Projects</title>
+        <description>SourceForge.net Site Statistics</description>
+<?php
+	$sql="SELECT 
+			groups.group_name,
+			groups.unix_group_name,
+			groups.group_id,
+			foundry_preferred_projects.rank 
+		  FROM 
+			groups,
+			foundry_preferred_projects 
+		  WHERE 
+			foundry_preferred_projects.group_id=groups.group_id 
+		  AND 
+			foundry_preferred_projects.foundry_id='$foundry_id' 
+		  ORDER BY 
+			rank ASC";
+	$res_grp=db_query($sql);
+	$rows=db_numrows($res_grp);
+
+	if (!$res_grp || $rows < 1) {
+		echo "	No Projects\n";
+	} else {
+		for ($i=0; $i<$rows; $i++) {
+			echo "	<item>\n";
+			echo "		<title>Project</title>\n";
+			echo '		<description>' . db_result($res_grp,$i,'group_name') . "</description>\n";
+			echo '		<link>http://' . $GLOBALS[sys_default_domain] . '/projects/' . db_result($res_grp,$i,'unix_group_name') . "</link>\n";
+			echo "	</item>\n";
+		}
+	}
+?>
+    </channel>
+</rdf:RDF>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_mostactive.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_mostactive.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_mostactive.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,48 @@
+<?php
+/**
+ * rss_foundry_mostactive.php - Stats export page for Foundry most active projects.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @author		Darrell Brogdon <dbrogdon at valinux.com>
+ * @date		2001-06-06
+ * @version		$Id: rss_foundry_mostactive.php,v 1.2 2001/06/14 21:54:23 dbrogdon Exp $
+ *
+ */
+require_once('pre.php');
+require_once('rss_utils.inc');
+
+header("Content-Type: text/plain");
+print '<?xml version="1.0" encoding="utf-8"?>';
+?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
+    <channel rdf:about="http://www.xml.com/xml/news.rss">
+        <title>Most Active Projects</title>
+        <description>SourceForge.net Site Statistics</description>
+<?php
+	$sql="SELECT 
+				*
+		  FROM 
+				foundry_project_rankings_agg
+		  WHERE 
+				foundry_id='$foundry_id'
+		  ORDER BY 
+				foundry_id ASC, 
+				ranking ASC";
+	$result=db_query($sql, 20, 0, SYS_DB_STATS);
+	if (!$result || db_numrows($result) < 1) {
+		echo "	<error/>\n";
+	} else {
+		while ($row=db_fetch_array($result)) {
+			echo "	<item>\n";
+			echo '		<title>' . $row['group_name'] . "</title>\n";
+			echo '		<description>' . $row['percentile'] . "%</description>\n";
+			echo '		<link>http://' . $GLOBALS[sys_default_domain] . '/projects/' . $row['unix_group_name'] . "</link>\n";
+			echo "	</item>\n";
+		}
+	}
+?>
+    </channel>
+</rdf:RDF>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_topdownloads.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_topdownloads.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/rss_foundry_topdownloads.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,49 @@
+<?php
+/**
+ * rss_foundry_topdownloads.php - Stats export page for Foundry top downloads.
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @author		Darrell Brogdon <dbrogdon at valinux.com>
+ * @date		2001-06-06
+ * @version		$Id: rss_foundry_topdownloads.php,v 1.2 2001/06/14 21:54:23 dbrogdon Exp $
+ *
+ */
+require_once('pre.php');
+require_once('rss_utils.inc');
+
+header("Content-Type: text/plain");
+print '<?xml version="1.0" encoding="utf-8"?>';
+?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
+    <channel rdf:about="http://www.xml.com/xml/news.rss">
+        <title>Top Downloads</title>
+        <description>SourceForge.net Site Statistics</description>
+<?php
+	$res_topdown = db_query("SELECT 
+								* 
+							 FROM 
+								foundry_project_downloads_agg
+							 WHERE
+								foundry_id='$foundry_id'
+							 ORDER BY 
+								foundry_id DESC, 
+								downloads DESC", 10, 0, SYS_DB_STATS);
+	if (!$res_topdown || db_numrows($res_topdown) < 1) {
+		echo "	<item>\n";
+		echo "		<title>No Projects</title>\n";
+		echo "	</item>\n";
+	} else {
+		while ($row_topdown = db_fetch_array($res_topdown)) {
+			echo "	<item>\n";
+			echo '		<title>' . $row_topdown['group_name'] . "</title>\n";
+			echo '		<description>' . $row_topdown['downloads'] . "</description>\n";
+			echo '		<link>http://' . $GLOBALS[sys_default_domain] . '/projects/' . $row_topdown['group_name'] . "</link>\n";
+			echo "	</item>\n";
+		}
+	}
+?>
+    </channel>
+</rdf:RDF>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdn_search.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdn_search.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdn_search.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,85 @@
+<?php
+/**
+ * rss_osdn_search.php - Global OSDN search export
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @author		Darrell Brogdon <dbrogdon at valinux.com>
+ * @date		2001-06-15
+ * @version		$Id: rss_osdn_search.php,v 1.2 2001/06/21 21:38:00 jbyers Exp $
+ *
+ */
+require_once('pre.php');
+require_once('rss_utils.inc');
+
+header("Content-Type: text/plain");
+print '<?xml version="1.0" encoding="utf-8"?>';
+?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
+    <channel rdf:about="http://www.xml.com/xml/news.rss">
+        <title>OSDN Universal Search</title>
+        <description>SourceForge export for OSDN Universal search</description>
+<?php
+	$result=search_projects();
+	if (!$result || db_numrows($result) < 1) {
+		echo "	<item>\n";
+		echo "		<title>No Data</title>\n";
+		echo "	</item>\n";
+	} else {
+		while ($row=db_fetch_array($result)) {
+			$weight = 10;
+			if (stristr($row['group_name'], $query_text)) {
+				$weight += 10;
+			}
+
+			if (stristr($row['short_description'], $query_text)) {
+				$weight += 10;
+			}
+
+			echo "	<item>\n";
+			echo '		<title>' . $row['group_name'] . "</title>\n";
+			echo '		<description>' . $row['short_description'] . "</description>\n";
+			echo '		<link>http://' . $GLOBALS[sys_default_domain] . '/projects/' . $row['unix_group_name'] . "</link>\n";
+			echo "		<osdn:weight>$weight</osdn:weight>\n";
+			echo "	</item>\n";
+		}
+	}
+?>
+    </channel>
+</rdf:RDF>
+
+<?php
+	function search_projects() {
+		global $query_text, $offset;
+
+		// If multiple words in the query text, separate them and put ILIKE (pgsql's 
+		// case-insensitive LIKE) in between
+		// XXX:SQL: this assumes db understands backslash-quoting
+
+		$array=explode(" ",quotemeta($query_text));
+		// we need to use double-backslashes in SQL
+		$array_re=explode(" ",addslashes(quotemeta($query_text)));
+	
+		$query_text1="group_name ILIKE '%" . implode($array,"%' $crit group_name ILIKE '%") ."%'";
+		$query_text2="short_description ILIKE '%" . implode($array,"%' $crit short_description ILIKE '%") ."%'";
+		$query_text3="unix_group_name ILIKE '%" . implode($array,"%' $crit unix_group_name ILIKE '%") . "%'";
+	
+		$sql = "SELECT 
+					group_name,
+					unix_group_name,
+					type,
+					group_id,
+					short_description 
+				FROM 
+					groups 
+				WHERE 
+					status='A' 
+				AND 
+					is_public='1' 
+				AND 
+					(($query_text1) OR ($query_text2) OR ($query_text3))";
+		return db_query($sql, 15, $offset);			
+	}
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdnnews.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdnnews.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/rss_osdnnews.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,219 @@
+<?php
+/**
+ * rss_osdnnews.php - Stats export page for the OSDN newsletter
+ *
+ * SourceForge: Breaking Down the Barriers to Open Source Development
+ * Copyright 1999-2001 (c) VA Linux Systems
+ * http://sourceforge.net
+ *
+ * @author Darrell Brogdon <dbrogdon at valinux.com>
+ * @date 2001-05-22
+ * @version   $Id: rss_osdnnews.php,v 1.2 2001/07/10 00:03:08 pfalcon Exp $
+ *
+ */
+require_once('pre.php');
+require_once('rss_utils.inc');
+
+if (!$days) {
+	$days = '7';
+}
+
+//
+// Get the dates
+//
+$udate = date('U') - ($days * 86400);
+$currudate = date('U');
+
+$tmp1 = getdate($udate);
+$month = pad_number($tmp1['mon']);
+$day = pad_number($tmp1['mday']);
+$year = $tmp1['year'];
+
+$tmp2 = getdate($currudate);
+$curr_month = pad_number($tmp2['mon']);
+$curr_day = pad_number($tmp2['mday']);
+$curr_year = $tmp2['year'];
+
+$month_day = $year . $month;
+$curr_month_day = $curr_year . $curr_month;
+
+header("Content-Type: text/plain");
+print '<?xml version="1.0" encoding="utf-8"?>';
+?>
+
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
+    <channel rdf:about="http://www.xml.com/xml/news.rss">
+        <title>SourceForge Stats</title>
+        <description>SourceForge.net Site Statistics</description>
+        <item>
+            <title>Pageviews</title>
+            <description><?php echo get_pageviews(); ?></description>
+        </item>
+        <item>
+            <title>Downloads</title>
+            <description><?php echo get_downloads(); ?></description>
+        </item>
+        <item>
+            <title>Registered Users</title>
+            <description><?php echo get_registered_users(); ?></description>
+        </item>
+        <item>
+            <title>Registered Projects</title>
+            <description><?php echo get_registered_projects(); ?></description>
+        </item>
+    </channel>
+</rdf:RDF>
+
+<?php
+/**
+ * get_downloads() - Get downloaded files
+ *
+ * This function retrieves a count of downlaoded files as well as the
+ *  total number of Kbytes made up of those files.
+ *
+ * @returns String A string of data containing file and filesize counts or 'ERROR' on error.
+ *
+ */
+function get_downloads() {
+	global $month_day, $day;
+
+	$sql = "SELECT
+				sum(s.downloads) AS downloads,
+				sum(f.file_size) AS filesize
+			FROM
+				frs_dlstats_file_agg s,
+				frs_file f
+			WHERE
+				s.file_id=f.file_id
+			AND (
+					s.month = '$month_day'
+				AND
+					s.day >= '$day'
+				OR
+					s.month > '$month_day'
+			)";
+	$res = db_query($sql, 1, 0, SYS_DB_STATS);
+	if (!$res) {
+		return 'ERROR';
+	}
+	$http_stats = db_fetch_array($res);
+
+	//
+	// Determine the total number of files and file sizes
+	//
+	$total_files = number_format($ftp_stats[0] + $http_stats[0]);
+	$total_size = number_format(($ftp_stats[1] + $http_stats[1]) / 1000);
+
+	return "$total_files downloads accounting for " . $total_size . "Kb" . " of data.";
+}
+
+/**
+ * get_registered_users() - Get a count of regiestered users
+ *
+ * This function retrieves both a count of current users and new users
+ *  since '$days' ago.
+ *
+ * @returns String A string of data containing the current and new users or 'ERROR' on error.
+ *
+ */
+function get_registered_users() { 
+	global $udate, $days;
+
+	//
+	// Get the current users
+	//
+	$sql = "SELECT count(*) AS count FROM users WHERE status='A'";
+	$res = db_query($sql, 1, 0, SYS_DB_STATS);
+	if (!$res) {
+		return 'ERROR';
+	}
+	$curr_users = number_format(db_result($res, 0, 0));
+
+	//
+	// Get the users from '$days' offset
+	//
+	$sql = "SELECT count(*) AS count FROM users WHERE status='A' AND add_date >= '$udate'";
+	$res = db_query($sql, 1, 0, SYS_DB_STATS);
+	if (!$res) {
+		return 'ERROR';
+	}
+	$new_users = number_format(db_result($res, 0, 0));
+
+	return "$curr_users up $new_users from $days days ago.";
+}
+
+/**
+ * get_registered_projects() - Get a count of registered projects
+ *
+ * This function retrieves both a count of current registered projects and 
+ *  new projects registered since '$days' ago.
+ *
+ * @returns String A string of data containing the current and new projects or 'ERROR' on error.
+ *
+ */
+function get_registered_projects() {
+	global $udate, $days;
+
+	//
+	// Get the current projects
+	//
+	$sql = "SELECT count(*) AS count FROM groups WHERE status='A'";
+	$res = db_query($sql, 1, 0, SYS_DB_STATS);
+	if (!$res) {
+		return 'ERROR';
+	}
+	$curr_projx = number_format(db_result($res, 0, 0));
+
+	// 
+	// Get the projects from '$days' offset
+	//
+	$sql = "SELECT count(*) AS count FROM groups WHERE status='A' AND register_time >= '$udate'";
+	$res = db_query($sql, 1, 0, SYS_DB_STATS);
+	if (!$res) {
+		return 'ERROR';
+	}
+	$new_projx = number_format(db_result($res, 0, 0));
+	
+	if (!$new_projx) {
+		return 'ERROR';
+	}
+
+	return "$curr_projx up $new_projx from $days days ago.";
+}
+
+/**
+ * get_pageviews() - Get the latest pageview count
+ *
+ * This function retreives the latest site-wide pageview count.
+ *
+ * @returns Int A count of total pageviews or 'ERROR' on error.
+ *
+ */
+function get_pageviews() {
+	$sql = 'SELECT sum(a.site_views) FROM stats_project_all a, groups g WHERE a.group_id=g.group_id';
+	$res = db_query($sql, 1, 0, SYS_DB_STATS);
+	if (!$res) {
+		return 'ERROR';
+	}
+	$pageviews = number_format(db_result($res, 0, 0));
+
+	return $pageviews;
+}
+
+/**
+ * pad_number() - Zero-pad a number
+ *
+ * This function will zero-pad a single digit number
+ *
+ * @param $num Int A number that may need padding.
+ * @returns Int The padded number if $num was a single digit number or 'ERROR' on error.
+ *
+ */
+function pad_number($num) {
+	if (strlen($num) < 2) {
+		return ('0' . $num);
+	} else {
+		return $num;
+	}
+}
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,170 @@
+<?php
+/**
+  * sf_tracker_export.php
+  *
+  * SourceForge Exports: Export tracker contents in XML
+  *
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @author		Darrell Brogdon <dbrogdon at valinux.com>
+  * @version	$Id$
+  *
+  */
+
+set_time_limit(0);
+
+require_once('pre.php');
+require_once('common/tracker/Artifact.class');
+require_once('common/tracker/Artifacts.class');
+require_once('common/tracker/ArtifactFile.class');
+require_once('common/tracker/ArtifactType.class');
+require_once('common/tracker/ArtifactGroup.class');
+require_once('common/tracker/ArtifactCategory.class');
+require_once('common/tracker/ArtifactCanned.class');
+require_once('common/tracker/ArtifactResolution.class');
+
+header("Content-Type: text/plain");
+?>
+<tracker version="1.0" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://<?php echo $sys_default_domain; ?>/export/sf_tracker_export.xsd">
+<?php
+if ($group_id && $atid) {
+	//
+	//	get the Group object
+	//
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group) || $group->isError()) {
+		echo("	<error>Could not get the Group object</error>\n");
+		$errors = true;
+	}
+
+	//
+	//	Create the ArtifactType object
+	//
+	$ath = new ArtifactType($group,$atid);
+	if (!$ath || !is_object($ath)) {
+		echo("	<error>ArtifactType could not be created</error>\n");
+		$errors = true;
+	}
+	if ($ath->isError()) {
+		echo('	<error>' . $ath->getErrorMessage() . "</error>\n");
+		$errors = true;
+	}
+
+	//
+	// Create the Artifacts object
+	//
+	$artifacts = new Artifacts($ath);	
+	if (!$artifacts || !is_object($ath)) {
+		echo("	<error>Artifacts could not be created</error>\n");
+		$errors = true;
+	}
+	if ($artifacts->isError()) {
+		echo('	<error>' . $artifacts->getErrorMessage() . "</error>\n");
+		$errors = true;
+	}
+
+	//
+	// Loop through each artifact object and show the results
+	//
+	if (!$alist =& $artifacts->getArtifacts($offset)) {
+		echo('	<error>' . $artifacts->getErrorMessage() . "</error>\n");
+		$errors = true;
+	}
+
+	if ($errors) {
+		echo ('</tracker>');
+		exit;
+	}
+
+	for ($i=0; $i<count($alist); $i++) {
+?>
+	<artifact id="<?php echo $alist[$i]->getID(); ?>">
+		<submitted_by><?php echo $alist[$i]->getSubmittedUnixName(); ?></submitted_by>
+		<submitted_date><?php echo date( $sys_datefmt, $alist[$i]->getOpenDate() ); ?></submitted_date>
+		<artifact_type id="<?php echo $ath->getID(); ?>"><?php echo $ath->getID(); ?></artifact_type>
+		<category id="<?php echo $alist[$i]->getCategoryID(); ?>"><?php echo $alist[$i]->getCategoryName(); ?></category>
+		<artifact_group id="<?php echo $alist[$i]->getArtifactGroupID(); ?>"><?php echo $alist[$i]->getArtifactGroupID; ?></artifact_group>
+		<assigned_to><?php echo $alist[$i]->getAssignedRealName(); ?></assigned_to>
+		<priority id="<?php echo $alist[$i]->getPriority(); ?>"><?php echo $alist[$i]->getPriority(); ?></priority>
+		<status><?php echo $alist[$i]->getStatusName(); ?></status>
+		<resolution><?php echo $alist[$i]->getResolutionName(); ?></resolution>
+		<summary><?php echo $alist[$i]->getSummary(); ?></summary>
+		<detail><?php echo $alist[$i]->getDetails(); ?></detail>
+<?php
+	$result = $alist[$i]->getMessages();
+	$rows = db_numrows($result);
+	if ($rows > 0) {
+?>
+		<follow_ups>
+<?php
+		for ($x=0; $x<$rows; $x++) {
+?>
+			<item>
+				<date><?php echo db_result($result, $x, 'adddate'); ?></date>
+				<sender><?php echo db_result($result, $x, 'user_name'); ?></sender>
+				<text><?php echo db_result($result, $x, 'body'); ?></text>
+			</item>
+<?php
+		}
+?>
+		</follow_ups>
+<?php
+	}
+
+	$file_list =& $alist[$i]->getFiles();
+	$count=count($file_list);
+	if ($count > 0) {
+?>
+		<existingfiles>
+<?php
+		for ($x=0; $x<$count; $x++) {
+?>
+			<file>
+				<id><?php echo $file_list[$x]->getID(); ?></id>
+				<name><?php echo $file_list[$x]->getName(); ?></name>
+				<description><?php echo $file_list[$x]->getDescription(); ?></description>
+				<filesize><?php echo $file_list[$x]->getSize(); ?></filesize>
+				<filetype><?php echo $file_list[$x]->getType(); ?></filetype>
+				<adddate><?php echo $file_list[$x]->getDate(); ?></adddate>
+				<submitted_by><?php echo $file_list[$x]->getSubmittedBy(); ?></submitted_by>
+			</file>
+<?php
+		}
+?>
+		</existingfiles>
+<?php
+	}
+
+	$result = $alist[$i]->getHistory();
+	$rows = db_numrows($result);
+
+	if ($rows > 0) {
+?>
+		<change_log>
+<?php
+		for ($x=0; $x<$rows; $x++) {
+?>
+			<item>
+				<field><?php echo db_result($result, $x, 'field_name'); ?></field>
+				<old_value><?php echo db_result($result, $x, 'old_value'); ?></old_value>
+				<date><?php echo db_result($result, $x, 'entrydate'); ?></date>
+				<by><?php echo db_result($result, $x, 'user_name'); ?></by>
+			</item>
+<?php
+		}
+?>
+		</change_log>
+<?php
+	}
+?>
+	</artifact>
+<?php
+	}
+} else {
+	print("    <error>Group ID Not Set</error>\n");
+}
+?>
+</tracker>

Added: trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.xsd
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.xsd	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/export/sf_tracker_export.xsd	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified">
+	<xsd:element name="adddate" type="xsd:string"/>
+	<xsd:element name="artifact">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="submitted_by"/>
+				<xsd:element ref="submitted_date"/>
+				<xsd:element ref="artifact_type"/>
+				<xsd:element ref="category"/>
+				<xsd:element ref="artifact_group"/>
+				<xsd:element ref="assigned_to"/>
+				<xsd:element ref="priority"/>
+				<xsd:element ref="status"/>
+				<xsd:element ref="resolution"/>
+				<xsd:element ref="summary"/>
+				<xsd:element ref="detail" minOccurs="0"/>
+				<xsd:element ref="followups"/>
+				<xsd:element ref="existingfiles"/>
+				<xsd:element ref="changelog"/>
+			</xsd:sequence>
+			<xsd:attribute name="id" use="required">
+				<xsd:simpleType>
+					<xsd:restriction base="xsd:int"/>
+				</xsd:simpleType>
+			</xsd:attribute>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="artifact_group">
+		<xsd:complexType>
+			<xsd:simpleContent>
+				<xsd:restriction base="xsd:string">
+					<xsd:attribute name="id" use="required">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:int"/>
+						</xsd:simpleType>
+					</xsd:attribute>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="artifact_type">
+		<xsd:complexType>
+			<xsd:simpleContent>
+				<xsd:restriction base="xsd:string">
+					<xsd:attribute name="id" use="required">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:int"/>
+						</xsd:simpleType>
+					</xsd:attribute>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="assigned_to">
+		<xsd:simpleType>
+			<xsd:restriction base="xsd:string"/>
+		</xsd:simpleType>
+	</xsd:element>
+	<xsd:element name="by">
+		<xsd:simpleType>
+			<xsd:restriction base="xsd:string"/>
+		</xsd:simpleType>
+	</xsd:element>
+	<xsd:element name="category">
+		<xsd:complexType>
+			<xsd:simpleContent>
+				<xsd:restriction base="xsd:string">
+					<xsd:attribute name="id" use="required">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:int"/>
+						</xsd:simpleType>
+					</xsd:attribute>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="changelog">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="field" minOccurs="0"/>
+				<xsd:element ref="old_value" minOccurs="0"/>
+				<xsd:element ref="date" minOccurs="0"/>
+				<xsd:element ref="by" minOccurs="0"/>
+				<xsd:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="date" type="xsd:string"/>
+	<xsd:element name="description" type="xsd:string"/>
+	<xsd:element name="detail" type="xsd:string"/>
+	<xsd:element name="existingfiles">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="file" maxOccurs="unbounded"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="field" type="xsd:string"/>
+	<xsd:element name="file">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="id"/>
+				<xsd:element ref="name"/>
+				<xsd:element ref="description"/>
+				<xsd:element ref="location"/>
+				<xsd:element ref="filesize"/>
+				<xsd:element ref="filetype"/>
+				<xsd:element ref="adddate"/>
+				<xsd:element ref="submitted_by"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="filesize" type="xsd:byte"/>
+	<xsd:element name="filetype">
+		<xsd:simpleType>
+			<xsd:restriction base="xsd:string"/>
+		</xsd:simpleType>
+	</xsd:element>
+	<xsd:element name="followups">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="item" maxOccurs="unbounded"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="id">
+		<xsd:simpleType>
+			<xsd:restriction base="xsd:int"/>
+		</xsd:simpleType>
+	</xsd:element>
+	<xsd:element name="item">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="field" minOccurs="0"/>
+				<xsd:element ref="old_value" minOccurs="0"/>
+				<xsd:element ref="date"/>
+				<xsd:element ref="sender" minOccurs="0"/>
+				<xsd:element ref="submitted_by" minOccurs="0"/>
+				<xsd:element ref="text" minOccurs="0"/>
+				<xsd:element ref="by" minOccurs="0"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="location" type="xsd:string"/>
+	<xsd:element name="name">
+		<xsd:simpleType>
+			<xsd:restriction base="xsd:string"/>
+		</xsd:simpleType>
+	</xsd:element>
+	<xsd:element name="old_value" type="xsd:string"/>
+	<xsd:element name="priority">
+		<xsd:complexType>
+			<xsd:simpleContent>
+				<xsd:restriction base="xsd:string">
+					<xsd:attribute name="id" use="required">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:int"/>
+						</xsd:simpleType>
+					</xsd:attribute>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="resolution">
+		<xsd:complexType>
+			<xsd:simpleContent>
+				<xsd:restriction base="xsd:string">
+					<xsd:attribute name="id">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:int"/>
+						</xsd:simpleType>
+					</xsd:attribute>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="sender" type="xsd:string"/>
+	<xsd:element name="status">
+		<xsd:complexType>
+			<xsd:simpleContent>
+				<xsd:restriction base="xsd:string">
+					<xsd:attribute name="id">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:int"/>
+						</xsd:simpleType>
+					</xsd:attribute>
+				</xsd:restriction>
+			</xsd:simpleContent>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="submitted_by">
+		<xsd:simpleType>
+			<xsd:restriction base="xsd:string"/>
+		</xsd:simpleType>
+	</xsd:element>
+	<xsd:element name="submitted_date" type="xsd:string"/>
+	<xsd:element name="summary" type="xsd:string"/>
+	<xsd:element name="text" type="xsd:string"/>
+	<xsd:element name="tracker">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element ref="artifact" maxOccurs="unbounded"/>
+			</xsd:sequence>
+			<xsd:attribute name="version" use="required">
+				<xsd:simpleType>
+					<xsd:restriction base="xsd:number"/>
+				</xsd:simpleType>
+			</xsd:attribute>
+		</xsd:complexType>
+	</xsd:element>
+</xsd:schema>

Added: trunk/gforge_base/evolvisforge/gforge/www/help/tracker.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/help/tracker.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/help/tracker.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,93 @@
+<?php
+/**
+  *
+  * SourceForge Help Facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+
+help_header('Tracker Help - ' . ucwords(str_replace('_',' ',$helpname)));
+?>
+<table width="100%" cellpadding="0" cellspacing="0" border="0">
+<tr>
+	<td>
+<?php
+	switch( $helpname ) {
+		case 'assignee':
+			print('This drop-down box represents the project administrator to which a tracker item is assigned.');
+			break;
+		case 'status':
+			print('This drop-down box represents the current status of a tracker item.<br><br>
+				   You can set the status to \'Pending\' if you are waiting for a response from the tracker item author.  When
+				   the author responds the status is automatically reset to that of \'Open\'.  Otherwise, if the author doesn\'t 
+				   respond with an admin-defined amount of time (default is 14 days) then the item is given a status of \'Deleted\'.');
+			break;
+		case 'category':
+			print('This drop-down box represents the Category of the tracker items which is a particular section of a project.<br><br>
+				   Select \'Any\' for a broader result set.');
+			break;
+		case 'group':
+			print('This drop-down box represents the Group of the tracker items which is a list of project admin-defined options.<br><br>
+				   If you are a project admin you can click the \'(admin)\' link to define your own groups.');
+			break;
+		case 'sort_by':
+			print('The Sort By option allows you to determine how the browse results are sorted.<br><br>  You can sort by
+				  ID, Priority, Summary, Open Date, Close Date, Submitter, or Assignee.  You can also have the 
+				  results sorted in Ascending or Descending order.');
+			break;
+		case 'data_type':
+			print('The Data Type option determines the type of tracker item this is.  Since the tracker rolls into one the 
+				   bug, patch, support, etc... managers you need to be able to determine which one of these an item should belong.
+				   <br><br>This has the added benefit of enabling an admin to turn a support request into a bug.');
+			break;
+		case 'priority':
+			print('The priority option allows a user to define a tracker item priority (ranging from 1-Lowest to 9-Highest).<br><br>
+				   This is especially helpful for bugs and support requests where a user might find a critical problem with a project.');
+			break;
+		case 'resolution':
+			print('The resolution option represents a tracker items resolution if any.');
+			break;
+		case 'summary':
+			print('The summary text-box represents a short tracker item summary.  Useful when browsing through several tracker items.');
+			break;
+		case 'canned_response':
+			print('The canned response drop-down represents a list of project admin-defined canned responses to common support or bug 
+				   submission.<br><br> If you are a project admin you can click the \'(admin)\' link to define your own canned responses');
+			break;
+		case 'comment':
+			print('The comment textarea allows you to attach a comment to a tracker item when a canned response isn\'t appropriate.');
+			break;
+		case 'attach_file':
+			print('When you wish to attach a file to a tracker item you must check this checkbox before submitting changes.');
+			break;
+		case 'monitor':
+			print('You can monitor or un-monitor this item by clicking the "Monitor" button. <br><br><b>Note!</b> this will send you additional email. If you add comments to this item, or submitted, or are assigned this item, you will also get emails for those reasons as well!');
+			break;
+		default:
+			print("UNKNOWN HELP REQUEST: $helpname");
+			break;
+	}
+?>
+	</td>
+</tr>
+<tr>
+	<td align="right">
+		<br><br>
+		<form>
+			<input type="button" value="Close Window" onClick="window.close()">
+		</form>
+	</td>
+</tr>
+</table>
+
+<?
+help_footer();
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/images/favicon.ico
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/favicon.ico	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/favicon.ico	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+            ¨     (       @                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôõôôõåãáåãáâÞÛâÞÛãàÝãàÝêêéêêéúýÿúýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôõôôõåãáåãáâÞÛâÞÛãàÝãàÝêêéêêéúýÿúýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ×ÏÝ×ϯš¯š”tO”tO…T…TGG„K	„K	^'^'Ÿ€]Ÿ€]ƹªÆ¹ªòòôòòôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ×ÏÝ×ϯš¯š”tO”tO…T…TGG„K	„K	^'^'Ÿ€]Ÿ€]ƹªÆ¹ªòòôòòôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾«•¾«•–i5–i5’xY’xYŒ‚wŒ‚wį—į—Ĩ‡Ä¨‡¨~N¨~NŠOŠOz7 z7 }? }? —rF—rFçæåçæåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾«•¾«•–i5–i5’xY’xYŒ‚wŒ‚wį—į—Ĩ‡Ä¨‡¨~N¨~NŠOŠOz7 z7 }? }? —rF—rFçæåçæåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿν¬Î½¬¨T¨Tæß×æß×­¯±­¯±—–˜—–˜àâåàâåÿÿÿÿÿÿÿÿÿÿÿÿëäÜëäܺštºštŒSŒS|9 |9 šp?šp?ðîìðîìÿÿÿÿÿÿÿÿÿÿÿÿν¬Î½¬¨T¨Tæß×æß×­¯±­¯±—–˜—–˜àâåàâåÿÿÿÿÿÿÿÿÿÿÿÿëäÜëäܺštºštŒSŒS|9 |9 šp?šp?ðîìðîìÿÿÿÿÿÿòíéòíéžsBžsBøôïøôïÙÚÝÙÚÝ¡ŸŸ¡ŸŸ¢  ¢  ´³³´³³øøøøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÛÎçÛΖc*–c*y7 y7 «Â«ÿÿÿÿÿÿòíéòíéžsBžsBøôïøôïÙÚÝÙÚÝ¡ŸŸ¡ŸŸ¢  ¢  ´³³´³³øøøøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÛÎçÛΖc*–c*y7 y7 «Â«ÿÿÿÿÿÿÒ¿ªÒ¿ª•d*•d*üüûüüûßÞßßÞßÉÈÈÉÈÈ´²±´²±ÏÍÍÏÍÍßÞÞßÞÞÿÿÿÿÿÿüüüüüüóóóóóóÿÿÿÿÿÿåÚÌåÚÌ…I…IŸs@Ÿs@ýýýýýýÒ¿ªÒ¿ª•d*•d*üüûüüûßÞßßÞßÉÈÈÉÈÈ´²±´²±ÏÍÍÏÍÍßÞÞßÞÞÿÿÿÿÿÿüüüüüüóóóóóóÿÿÿÿÿÿåÚÌåÚÌ…I…IŸs@Ÿs@ýýýýýýÇ®Ç®JJÝØÔÝØÔÿÿÿÿÿÿûüûûüûôôôôôôÿÿÿÿÿÿëêéëêéèçæèçæááàááà°¯®°¯®êêéêêéúýÿúýÿ¹˜p¹˜pZZúùøúùøÇ®Ç®JJÝØÔÝØÔÿÿÿÿÿÿûüûûüûôôôôôôÿÿÿÿÿÿëêéëêéèçæèçæááàááà°¯®°¯®êêéêêéúýÿúýÿ¹˜p¹˜pZZúùøúùøÞνÞν‹V ‹V ¦y¦yëëêëëêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþÛÚÙÛÚÙÈÇÆÈÇÆÄÃÂÄÃÂÍÌËÍÌËúüþúüþϸŸÏ¸Ÿ¦|K¦|KþþþþþþÞνÞν‹V ‹V ¦y¦yëëêëëêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþÛÚÙÛÚÙÈÇÆÈÇÆÄÃÂÄÃÂÍÌËÍÌËúüþúüþϸŸÏ¸Ÿ¦|K¦|Kþþþþþþûúùûúù¬p¬p™k™k¸±«¸±«ãáàãáàûûûûûûÿÿÿÿÿÿÿÿÿÿÿÿûûûûûûàÞßàÞßÛÙÙÛÙÙííïííïÿÿÿÿÿÿ¨„]¨„]Ï·›Ï·›ÿÿÿÿÿÿûúùûúù¬p¬p™k™k¸±«¸±«ãáàãáàûûûûûûÿÿÿÿÿÿÿÿÿÿÿÿûûûûûûàÞßàÞßÛÙÙÛÙÙííïííïÿÿÿÿÿÿ¨„]¨„]Ï·›Ï·›ÿÿÿÿÿÿÿÿÿÿÿÿéæâéæâ³¥—³¥—ËúËúààààààÖÖÖÖÖÖ×ÖÖ×ÖÖìîïìîïúûýúûýôõ÷ôõ÷ôöøôöøáßÞáßÞ­’t­’t´‘k´‘kúøõúøõÿÿÿÿÿÿÿÿÿÿÿÿéæâéæâ³¥—³¥—ËúËúààààààÖÖÖÖÖÖ×ÖÖ×ÖÖìîïìîïúûýúûýôõ÷ôõ÷ôöøôöøáßÞáßÞ­’t­’t´‘k´‘kúøõúøõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòñîòñîãâàãâàøùùøùùÖÔÑÖÔѨŸ–¨Ÿ–ŸŸ¦{¦{·§˜·§˜ÒÀ®ÒÀ®‘b1‘b1¶“k¶“kþýýþýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòñîòñîãâàãâàøùùøùùÖÔÑÖÔѨŸ–¨Ÿ–ŸŸ¦{¦{·§˜·§˜ÒÀ®ÒÀ®‘b1‘b1¶“k¶“kþýýþýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûûûûáßÝáßÝ¿´©¿´©­“{­“{¤a¤a²‘q²‘qÌ´™Ì´™åÙËåÙËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûûûûáßÝáßÝ¿´©¿´©­“{­“{¤a¤a²‘q²‘qÌ´™Ì´™åÙËåÙËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþüûûüûûýüûýüûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþüûûüûûýüûýüûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/c.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/c.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/c.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a	  €     ÿÿÿ!ù   ,    	   Œ©Ëí!˜”Æ‹³Æ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/i.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/i.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/i.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a  €     ÿÿÿ!ù   ,       Œ§š»íŒˆJkfÔŽ?\aŽ—X¦èjy ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/l.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/l.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/l.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a  €     ÿÿÿ!ù   ,       Œ§š»íŒˆJkfÔŽ?Œ âèæ‰¦êš ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/m.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/m.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/m.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a	  €     ÿÿÿ!ù   ,    	   Œ©ËÝ £\ä­Š'hZÈ\T‰žG ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/n.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/n.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/n.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a	  €     ÿÿÿ!ù   ,    	   Œ©ËÝ £\‹UÕ—Ëé„⸠;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/p.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/p.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/p.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a	  €     ÿÿÿ!ù   ,    	   Œ©ËÝ £\ð {MUÞªa–¨xžƒ¦*S  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/t.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/t.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/t.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a  €     ÿÿÿ!ù   ,       Œ§š»íŒˆJkfÔŽ?Œ â8yh^Xš¡îú. ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/images/phorum/trans.gif
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/images/phorum/trans.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/images/phorum/trans.gif	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1 @@
+GIF89a  €  ÿÿÿÿÿÿ!ù    ,       D ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Base.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Base.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Base.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,374 @@
+#/**
+#  *
+#  * Default message catalog (English)
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  *
+#  */
+about_foundries	about_blurb	SourceForge Foundries serve as places for developers to congregate, share expertise and news, get and give advice, and generally help each other develop  better software faster (this is Open Source, after all).<br>&nbsp;<br>If you're interested in volunteering to help support or start a foundry, or have suggestions, ideas, or gripes please <a href="/contact.php" >contact SourceForge</a>.
+about_foundries	foundries_list	Here is a list of all foundries on the system.  Some are more complete than others.  If you see a foundry you may want to contribute to, contact the existing foundry admins for that foundry.
+account	title	Account Preferences
+account_change_email	message	You have requested a change of email address on SourceForge.\nPlease visit the following URL to complete the email change:\n\n<https://$1/account/change_email-complete.php?ch=_$2>\n\n -- the SourceForge staff
+account_change_email	section	Account Preferences
+account_change_email	subject	SourceForge Verification
+account_change_email	title	Change Email Address
+account_change_pw	confirmation		<h2>SourceForge Password Change Confirmation</h2>	<p>	Congratulations. You have changed your password.	</p>
+account_change_pw	section	Account Preferences
+account_change_pw	title	Change Password
+account_editsshkeys	section	Account Preferences
+account_editsshkeys	title	Edit CVS/SSH Shared Keys
+account_first	about_blurb	You are now a registered user on SourceForge, the online development environment for Open Source projects.<P>As a registered user, you can participate fully in the activities on the site. You may now post messages to the project message forums, post bugs for software in SourceForge, sign on as a project developer, or even start your own project.<P>You should take some time to read through the <A href="/docs/site/"><b>Site Documentation</b></A> so that you may take full advantage of SourceForge.<P>Enjoy the site, and please provide us with feedback on ways that we can improve SourceForge.<P>--the SourceForge staff
+account_first	title	Welcome to SourceForge!
+account_login	deleted_account	<p>Your SourceForge account has been removed by SourceForge staff. This may occur for two reasons, either 1) you requested that your account be removed; or 2) some action has been performed using your account which has been seen as objectionable (i.e. you have breached the terms of service for use of your account) and your account has been revoked for administrative reasons. Should you have questions or concerns regarding this matter, please log a<a href="/support/?group_id=1">support request</a>.</p><p>Thank you, <br><br>SourceForge Staff</p>
+account_login	pending_account	<P>Your account is currently pending your email confirmation.		Visiting the link sent to you in this email will activate your account.		<P>If you need this email resent, please click below and a confirmation		email will be sent to the email address you provided in registration.		<P><A href="pending-resend.php?form_user=$1">[Resend Confirmation Email]</A>		<br><hr>		<p>
+account_login	title	SourceForge Site Login
+account_lostpw	message	Someone (presumably you) on the SourceForge site requested a\npassword change through email verification. If this was not you,\nignore this message and nothing will happen.\n\nIf you requested this verification, visit the following URL\nto change your password:\n\n<https://$1/account/lostlogin.php?ch=_$2>\n\n -- the SourceForge staff\n
+account_lostpw	subject	SourceForge Verification
+account_lostpw	title	Lost Your Password?
+account_register	title	SourceForge New Account Registration
+account_unsubscribe	all_mailings	all SourceForge mailings and notifications
+account_unsubscribe	site_mailings	SourceForge site mailings
+account_verify	title	SourceForge Account Verification
+account_verify	verify_blurb	<p>In order to complete your registration, login now. Your account willthen be activated for normal logins.</p>
+conf	content_encoding	iso-8859-1
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	en
+conf	language_id	1
+contact	about_blurb	<p>This is the contact page for <b>SourceForge.net</b> -- if you are having a problem with a project hosted by us please send your questions/info to the support/bug manager for that project. You can access those features by visiting that project's development home page at: sourceforge.net/projects/&lt;project name&gt; and clicking the approrpiate tool.</p><p>If you have a support request, bug report or wish to communicate directly with the SourceForge <A href="staff.php">staff</a>, please take care in using the appropriate means:</p><ul><li>To Request support for your project or account, visit the <a href="/support/?func=addsupport&group_id=1">SourceForge Support Manager</a></li><li>If you've found a bug in SourceForge, please use the <a href="/bugs/?func=addbug&group_id=1">SourceForge Bug Tracker</a></li><li>All press inquiries should be directed to <a href="mailto:eureka at valinux.com">Eureka Endo</a>, Press Relations Manager, VA Linux Systems.</li></ul>
+contact	title	Contact SourceForge
+cvs	section	Project: $1
+cvs	title	CVS
+docman	section	Project: $1
+docman	title	Document Manager
+docman_admin	section	$1
+docman_admin	title	Document Manager: Administration
+docman_admin_docedit	section	Document Manager
+docman_admin_docedit	title	Edit Document
+docman_admin_editdocs	section	Document Manager Administration
+docman_admin_editdocs	title	Edit Docs
+docman_admin_editgroups	section	Document Manager Administration
+docman_admin_editgroups	title	Edit Groups
+docman_admin_groupdelete	section	Document Manager Administration
+docman_admin_groupdelete	title	Delete Document Group
+docman_admin_groupedit	section	Document Manager Administration
+docman_admin_groupedit	title	Rename Document Group
+docman_display_doc	section	Project: $1 
+docman_display_doc	title	Document Manager: Display Document
+docman_new	section	Project: $1 
+docman_new	title	Document Manager: Submit New Documentation
+forum	section	Project: $1
+forum	title	Forums
+forum_admin	section	Project: $1 
+forum_admin	title	Forums: Administration
+forum_admin_addforum	section	Forum Administration
+forum_admin_addforum	title	Add Forum
+forum_admin_changestatus	section	Forum Administration
+forum_admin_changestatus	title	Change Forum Status
+forum_admin_delete	section	Forum Administration
+forum_admin_delete	title	Delete Forum
+forum_forum	section	Project: $1 
+forum_forum	title	Forums: View Forum
+forum_forum_thread	section	Forums
+forum_forum_thread	title	View Thread
+forum_message	section	Forums
+forum_message	title	View Message
+foundry	section	Foundry: $1
+foundry	title	Summary
+foundry_admin	section	Foundry: $1
+foundry_admin	title	Foundry Administration
+foundry_html_admin	section	Foundry Administration
+foundry_html_admin	title	Foundry HTML Admin
+foundry_news	section	Foundry Administration
+foundry_news	title	Foundry News Summary
+frs	file_download	Download
+frs	file_monitor	Monitor
+frs	file_notes	Notes
+frs	file_package	Package
+frs	file_rel_date	Date
+frs	file_version	Version
+frs	latest_file_releases	Latest File Releases
+general	return	[Return to SourceForge]
+general	sitename	SourceForge
+group	developer_info	Developer Info
+group	developers	Developers
+group	long_bugs	Bug Tracking
+group	long_cvs	CVS Repository
+group	long_docman	DocManager: Project Documentation
+group	long_forum	Public Forums
+group	long_foundries	SourceForge Development Foundries
+group	long_ftp	Anonymous FTP Space
+group	long_homepage	Project Home Page
+group	long_mail	Mailing Lists
+group	long_news	Latest News
+group	long_patch	Patch Manager
+group	long_pm	Task Manager
+group	long_support	Tech Support Manager
+group	long_survey	Surveys
+group	project_admins	Project Admins
+group	public_area	Public Areas
+group	short_admin	Admin
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Docs
+group	short_files	Files
+group	short_forum	Forums
+group	short_homepage	Home Page
+group	short_mail	Lists
+group	short_main 	Main
+group	short_memberlist	Developers
+group	short_news	News
+group	short_patch	Patches
+group	short_pm	Tasks
+group	short_summary	Summary
+group	short_support	Support
+group	short_survey	Surveys
+group	short_tracker	Tracker
+home	about_blurb	SourceForge is a <B>free service to <A href="http://www.opensource.org">Open Source</A> developers</B> offering easy access to the best in CVS, mailing lists, bug tracking, message boards/forums, task management, site hosting, permanent file archival, full backups, and total web-based administration.  <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ more ]</font></A><A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A><BR>&nbsp;<P><B>Site Feedback and Participation</B><P>In order to get the most out of SourceForge, you'll need to <A href="/account/register.php">register as a site user</A>. This will allow you to participate fully in all we have to offer. You may of course browse the site without registering, but will not have access to participate fully. <P>&nbsp;<BR><B>Set Up Your Own Project</B><P><A href="/account/register.php">Register as a site user</A>, then <A HREF="/account/login.php">Login</A> and finally, <A HREF="/register/">Register Your Project.</A> Thanks... and enjoy the site.
+home	breaking_down_barriers	Breaking Down the Barriers to Open Source Development
+home	highest_ranked_users	Highest Ranked Users
+home	most_active_this_week	Most Active This Week
+home	sfos	SourceForge OnSite
+home	sourceforge_statistics	SourceForge Statistics
+home	top_project_downloads	Top Project Downloads
+mail	provided_by	<P>Mailing lists provided via a SourceForge version of <A href="http://www.list.org">GNU Mailman</A>.  Thanks to the Mailman and <A href="http://www.python.org">Python</A> crews for excellent software.
+mail	section	Project: $1
+mail	title	Mailing Lists
+mail_admin	section	Mailing Lists
+mail_admin	title	Mailing List Admin
+mail_admin_add_list	section	Mailing List Admin
+mail_admin_add_list	title	Add List
+mail_admin_change_status	section	Mailing List Admin
+mail_admin_change_status	title	Admin / Update Lists
+menu	about_foundries	About Foundries
+menu	about_sourceforge	About SourceForge
+menu	account_maintenance	Account Maintenance
+menu	bookmark_page	Bookmark Page
+menu	change_my_theme	Change My Theme
+menu	code_snippet_library	Code Snippet Library
+menu	compile_farm	Compile Farm
+menu	contact_us	Contact SourceForge
+menu	discussion_forums	Discussion Forums
+menu	documentation	Site Docs
+menu	foundry_admin	Foundry Admin
+menu	foundry_summary	Foundry Summary
+menu	login	Login via SSL
+menu	logout	Logout
+menu	my_personal_page	My Personal Page
+menu	new_project	Register New Project
+menu	new_releases	New Releases
+menu	new_user	New User via SSL
+menu	other_site_mirrors	Other Site Mirrors
+menu	project_admin	Project Admin
+menu	project_help_wanted	Project Help Wanted
+menu	project_summary	Project Summary
+menu	search	Search
+menu	site_status	Site Status
+menu	software_map	Software Map
+menu	top_projects	Top Projects
+my	about_blurb	Your personal page contains lists of bugs and tasks that you are assigned, plus a list of groups that you are a member of.
+my	no_bookmarks	You currently do not have any bookmarks saved
+my	no_monitored_filemodules	<H3>You are not monitoring any files</H3><P>If you monitor files, you will be sent new release notices viaemail, with a link to the new file on our download server.<P>You can monitor files by visiting a project's &quot;Summary Page&quot; and clicking on the check box in the files section.<BR>&nbsp
+my	no_monitored_forums	<H3>You are not monitoring any forums</H3><P>If you monitor forums, you will be sent new posts in the form of an email, with a link to the new message.<P>You can monitor forums by clicking &quot;Monitor Forum&quot; in any given discussion forum.<BR>&nbsp;
+my	no_open_tasks	You have no open tasks assigned to you.
+my	no_projects	You're not a member of any active projects
+my	no_tracker_items_assigned	You have no open tracker items assigned to you.
+my	no_tracker_items_submitted	You have no open tracker items submitted by you.
+my	title	Personal Page For: $1
+my_bookmark_add	section	My Personal Page
+my_bookmark_add	title	Add Bookmark
+my_bookmark_delete	section	My Personal Page
+my_bookmark_delete	title	Delete Bookmark
+my_bookmark_edit	section	My Personal Page
+my_bookmark_edit	title	Edit Bookmark
+my_diary	section	My Personal Page
+my_diary	title	Diary And Notes
+new	title	New Releases
+news	section	Project: $1
+news	title	News
+news_admin	section	News
+news_admin	title	News Admin
+news_main	title	SourceForge News
+news_submit	post_blurb	You can post news about your project if you are an admin on your project. You may also post "help wanted" notes if your project needs help.<P>All posts <B>for your project</B> will appear instantly on your project summary page. Posts that are of special interest to the community will have to be approved by a member of the news team before they will appear on the SourceForge home page.
+news_submit	section	News
+news_submit	title	Submit News for $1
+partners	about_blurb	<P>SourceForge is proud to partner with the following organizations:<P><TABLE width=100%><TR valign="top"><TD><A href="http://www.cosource.com/">$1</A></TD><TD><B><A href="http://www.cosource.com/">Cosource.com</A></B><BR>Cosource.com is a collaborative, reverse-auction web site enabling international consumers and developers of Open Source products to work together to fund development of innovative software solutions.</TD></TR></TABLE>
+people	about_blurb	<P>The SourceForge Project Help Wanted board is for non-commercial, project volunteer openings. Commercial use is prohibited.<P>Project listings remain live for two weeks, or until closed by the poster, whichever comes first. (Project administrators may always re-post expired openings.)<P>Browse through the category menu to find projects looking for your help.<P>If you're a project admin, log in and submit help wanted requests through your project administration page.<P>To suggest new job categories, submit a request via the support manager.<P>
+people	section	Project Help Wanted
+people	title	Projects Needing Help
+people_admin	section	Project Help Wanted
+people_admin	title	Help Wanted Administration
+people_admin_people_cat	section	Help Wanted Administration
+people_admin_people_cat	title	Add Job Categories
+people_admin_people_skills	section	Help Wanted Administration
+people_admin_people_skills	title	Add Job Skills
+people_cat	section	Help Wanted
+people_cat	title	List Jobs By Category
+people_createjob	section	Project Help Wanted
+people_createjob	title	Create A New Job
+people_editjob	section	Project Help Wanted
+people_editjob	title	Edit Job
+people_editprofile	section	Project Help Wanted
+people_editprofile	title	Edit Your Profile
+people_helpwanted_latest	section	Project Help Wanted
+people_helpwanted_latest	title	Last Posts
+people_proj	section	Project Help Wanted
+people_proj	title	Project Help Wanted For $1
+people_viewjob	section	Project Help Wanted
+people_viewjob	title	$1 wanted for $2
+people_viewprofile	section	User Info
+people_viewprofile	title	View Developer Profile
+pm	section	Project: $1 
+pm	title	Task Manager: Subprojects And Tasks
+pm_addtask	section	Task Manager
+pm_addtask	title	Add A Task 
+pm_admin	section	$1
+pm_admin	title	Task Manager: Administration
+pm_admin_change_status	section	Task Manager Administration
+pm_admin_change_status	title	Update Information
+pm_admin_projects	section	Task Manager Administration
+pm_admin_projects	title	Add Subprojects
+pm_browse_custom	section	Task Manager
+pm_browse_custom	title	Browse Custom Tasks
+pm_browse_my	section	Project $1 Task Manager
+pm_browse_my	title	Browse My Tasks
+pm_browse_open	section	Task Manager
+pm_browse_open	title	Browse Open Tasks
+pm_detailtask	section	Task Manager
+pm_detailtask	title	Task Detail
+pm_modtask	section	Task Manager
+pm_modtask	title	Modify Task
+pm_reporting	section	Task Manager
+pm_reporting	title	Task Reporting System
+project_admin	section	Project: $1
+project_admin	title	Administration Summary
+project_admin_database	section	Project $1 - Administration
+project_admin_database	title	Database Information
+project_admin_editgroupinfo	section	Project $1 - Administration
+project_admin_editgroupinfo	title	Edit Public Info
+project_admin_editimages	section	Project $1 - Administration
+project_admin_editimages	title	Edit Multimedia Data
+project_admin_editpackages	section	Project $1 - Administration
+project_admin_editpackages	title	Edit Packages
+project_admin_editreleases	section	Project $1 - Administration
+project_admin_editreleases	title	Edit Releases
+project_admin_history	section	Project $1 - Administration
+project_admin_history	title	History
+project_admin_newrelease	section	Project $1 - Administration
+project_admin_newrelease	title	Create New Release
+project_admin_qrs	section	Project $1 - Administration
+project_admin_qrs	title	Quick Release System
+project_admin_userpermedit	section	Project $1 - Administration
+project_admin_userpermedit	title	Edit Developer Permissions
+project_admin_userperms	section	Project $1 - Administration
+project_admin_userperms	title	User Permissions List
+project_admin_vhost	section	Project $1 - Administration
+project_admin_vhost	title	Virtual Host Management
+project_memberlist	joining	<P>If you would like to contribute to this project by becoming a developer, contact one of the project admins, designated in bold text below.<br><br>
+project_showfiles	section	Project: $1
+project_showfiles	title	File List
+project_shownotes	section	Project: $1
+project_shownotes	title	Release Notes
+projects	section	Project: $1
+projects	title	Summary
+register	title	New Project Registration
+register_complete	section	New Project Registration
+register_complete	title	Registration Complete
+register_projectinfo	section	New Project Registration
+register_projectinfo	title	Project Information
+register_requirements	section	New Project Registration
+register_requirements	title	Services & Requirements
+register_tos	section	New Project Registration
+register_tos	title	Terms Of Service Agreement
+search	title	Search
+sendmessage	about_blurb	In an attempt to reduce spam, we are using this form to send email.<p>Fill it out accurately and completely or the receiver may not be able to respond.<P><FONT COLOR="RED"><B>IF YOU ARE WRITING FOR HELP:</B> Did you read the site documentation? Did you include your <B>user_id</B> and <B>user_name?</B> If you are writing about a project, include your <B>project id</B> (<B>group_id</B>) and <B>Project Name</B>.</FONT>
+sendmessage	title	Send $1 A Message
+snippet	title	Code Snippet Library
+snippet_add_snippet_to_package	section	Code Snippet Library
+snippet_add_snippet_to_package	title	Add Snippet To Package
+snippet_addversion	section	Code Snippet Library
+snippet_addversion	title	Post A New Version
+snippet_browse	section	Code Snippet Library
+snippet_browse	title	Browse Snippets
+snippet_delete	section	Code Snippet Library
+snippet_delete	title	Delete A Snippet
+snippet_detail	section	Code Snippet Library
+snippet_detail	title	View Snippet Detail
+snippet_package	section	Code Snippet Library
+snippet_package	title	Create Snippet Package
+snippet_submit	section	Code Snippet Library
+snippet_submit	title	Submit Snippet
+softwaremap	title	Trove
+staff	about_blurb	<P><h2>SourceForge Staff</h2><P><table border=0 cellspacing=2 cellpadding=2 bgcolor=""><tr valign=top><td><a href="/sendmessage.php?toaddress=pat_maillink_users.sourceforge.net">Patrick McGovern</a></td><td>(pat)</td><td>Patrick McGovern (pat) - Pat "Sounds Good" McGovern is the new Director of <A HREF="http://sourceforge.net/">SourceForge.net</A>.  We're glad to have Pat on board, as he used to run <A HREF="http://www.valinux.com/">valinux.com</A>, so he knows a thing or two about running important web sites.</td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=dlb_maillink_users.sourceforge.net">Dan Bressler</a></td><td>(dlb)</td><td>Dan is the "Product Manager" for SourceForge. We're not sure what that means, only that he likes timelines and handles business development issues.</td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=bigdisk_maillink_users.sourceforge.net">Tim Perdue</a></td><td>(bigdisk)</td><td>Tim is the technical lead on SourceForge and is from Iowa. Yes Iowa. Not Idaho and not Ohio. Iowa. When he's not working you can locate him fairly easy as he has the only BMW Z3 in Iowa.<P>Tim founded <A HREF="http://www.phpbuilder.com/">PHPBuilder.com</A> and <A HREF="http://www.geocrawler.com/">Geocrawler.com</A>.</td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=pfalcon_maillink_users.sourceforge.net">Paul Sokolovsky</a></td><td>(pfalcon)</td><td>Paul is a developer, living in Ukraine. Yep, it's where Chernobyl is located. He *claims* he had nothing to do with what happened.  He describes himself as a "confirmed geek/workaholic type".</td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=zelphyr_maillink_users.sourceforge.net">Darrell Brogdon</a></td><td>(zelphyr)</td><td>Darrell is also on the SourceForge development team. He worked for another company, but they wanted to ditch Open Source and move to ASP for their web applications... Now he works for us.</td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=precision_maillink_users.sourceforge.net">Uriah Welcome</a></td><td>(precision)</td><td>Uriah is a system administrator/developer from the frosty regions of Minnesota.  When he's not shoveling his driveway or defrosting his car you'll find him locked away in a dark room somewhere in front of a computer.</td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=moorman_maillink_users.sourceforge.net">Jacob Moorman</a></td><td>(moorman)</td><td>Jacob (aka roguemtl) is the Quality of Service Manager for SourceForge. He currently handles the bulk of the level two support requests, maintains the site status page, and helps to ensure everyone who logs a support request gets timely, correct service.  He works from the northeastern US.</td></tr><TR><TD COLSPAN="2"><B>Founders:</B></TD></TR><tr valign=top><td><a href="/sendmessage.php?toaddress=fusion94_maillink_users.sourceforge.net">Tony Guntharp</a></td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=dtype_maillink_users.sourceforge.net">Drew Streib</a></td></tr><tr valign=top><td><a href="/sendmessage.php?toaddress=bigdisk_maillink_users.sourceforge.net">Tim Perdue</a></td></TR><tr valign=top><td><a href="/sendmessage.php?toaddress=precision_maillink_users.sourceforge.net">Uriah Welcome</a></td></TR><TR><TD COLSPAN="2">&nbsp;<P><B>Signicant Outside Contributors:</B></TD></TR><tr valign=top><td><a href="/sendmessage.php?toaddress=wallace_maillink_users.sourceforge.net">Wallace Lee</a></td><td>(wallace)</td><td>Wallace has contributed significant tweaks and improvements to the SourceForge core code base. We appreciate his efforts, as do the users who benefit from his contributions.</td></tr></table>
+survey	title	Surveys For $1
+survey_admin	section	Survey Tool
+survey_admin	title	Administration
+survey_admin_add_question	section	Survey Tool Administration
+survey_admin_add_question	title	Add Survey Question
+survey_admin_add_survey	section	Survey Tool Administration
+survey_admin_add_survey	title	Add Survey
+survey_admin_edit_question	section	Survey Tool Administration
+survey_admin_edit_question	title	Edit A Survey Question
+survey_admin_edit_survey	section	Survey Tool Administration
+survey_admin_edit_survey	title	Edit Survey
+survey_admin_show_questions	section	Survey Tool Administration
+survey_admin_show_questions	title	Show Survey Questions
+survey_admin_show_results	section	Survey Tool Administration
+survey_admin_show_results	title	Show Survey Results
+survey_admin_show_results_aggregate	section	Survey Tool Administration
+survey_admin_show_results_aggregate	title	Show A Surveys Results
+survey_admin_show_results_comments	section	Survey Tool Administration
+survey_admin_show_results_comments	title	Show Survey Comments
+survey_admin_show_results_individual	section	Survey Tool Administration
+survey_admin_show_results_individual	title	Show Individual Survey Results
+survey_survey	section	Survey Tool
+survey_survey	title	Display Survey
+survey_survey_resp	section	Survey Tool
+survey_survey_resp	title	Survey Processing / Response
+thanks	about_blurb	<P><h2>SourceForge Acknowledgements</h2>The Developers of SourceForge would like to thank the following people for their support and encouragement:<ul><li>VA Linux Systems<li>Larry Augustin<li>Brian Biles<li>John Hall<li>Steve Westmoreland<li>Chris DiBona<li>Joe Arruda<li>Jeff Ritter<li>Trae McCombs<li>Patrick Wong<li>Neil Doane<li>Rob Walker<li>Robert Flemming<li>Michael Turner<li>Dan Cox<li>Garrett LeSage<li>John Goebel<li>Kit Cosper<li>Eureka Endo<li>Kevin Collins<li>Steve Schaefer<li>Greg Pryzby<li>Adam Frey<li>James Byers<li>Lion Templin</ul>
+themes	section	Account Preferences
+themes	title	View/Change Theme
+top	about_blurb	We track many project usage statistics on SourceForge, and display here the top ranked projects in several categories.
+top	active_all_time	Most Active All Time
+top	active_weekly	Most Active This Week
+top	downloads	Top Downloads
+top	downloads_7_days	Top Downloads (Past 7 Days)
+top	forum_posts	Top Forum Post Counts
+top	pageviews	Top Project Pageviews - Measured by impressions of the SourceForge 'button' logo
+top	title	Top Projects
+top_mostactive	section	Top Projects
+top_mostactive	title	Most Active Projects: $1
+top_toplist	section	Top Projects
+top_toplist	title	Top Project Lists
+tracker	section	Project: $1
+tracker	title	Trackers
+tracker_add	section	$1
+tracker_add	title	Submit Tracker Item
+tracker_admin	section	Tracker
+tracker_admin	title	Administration
+tracker_admin_add_canned	section	Tracker Administration
+tracker_admin_add_canned	title	Add Canned Responses To: $1
+tracker_admin_add_cat	section	Tracker Administration
+tracker_admin_add_cat	title	Add Categories To: $1
+tracker_admin_add_group	section	Tracker Administration
+tracker_admin_add_group	title	Add Groups To: $1
+tracker_admin_update_canned	section	Tracker Administration
+tracker_admin_update_canned	title	Modify Canned Respnses In: $1
+tracker_admin_update_cat	section	Tracker Administration
+tracker_admin_update_cat	title	Modify Category In: $1
+tracker_admin_update_group	section	Tracker Administration
+tracker_admin_update_group	title	Modify A Group In: $1
+tracker_admin_update_type	section	Tracker Administration
+tracker_admin_update_type	title	Update $1
+tracker_admin_update_users	section	Tracker Administration
+tracker_admin_update_users	title	Add/Update Tracker User Permissions
+tracker_browse	section	Project: $1
+tracker_browse	title	Browse $1
+tracker_detail	section	$1
+tracker_detail	title	Tracker Detailed View
+tracker_reporting	section	$1
+tracker_reporting	title	Tracker Reporting
+users	title	User Summary

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Bulgarian.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Bulgarian.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Bulgarian.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,84 @@
+#/**
+#  *
+#  * Bulgarian message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Delyan Toshev
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-14  Delyan Toshev
+#	* Initial translation
+#
+menu	account_maintenance	Ïðîôèë
+menu	bookmark_page	Îòáåëåæè ñòðàíèöàòà
+home	breaking_down_barriers	Äà ïðåìàõíåì ïðå÷êèòå ïðåä ðàçðàáîòâàíåòî íà ñîôòóåð ñ îòâîðåí êîä
+menu	change_my_theme	Âúíøåí âèä
+menu	code_snippet_library	Ñîôòóåðíà áèáëèîòåêà
+menu	compile_farm	Ôàáðèêà çà êîìïèëèðàíå
+menu	contact_us	Âðúçêà ñ íàñ
+group	developers	Ðàçðàáîò÷èöè
+group	developer_info	Ó÷àñòíèöè â ïðîåêòà
+menu	discussion_forums	Äèñêóñèîííè ôîðóìè
+menu	documentation	Äîêóìåíòè
+frs	file_download	Èçòåãëè
+frs	file_monitor	Íàáëþäåíèå
+frs	file_notes	Áåëåæêè
+frs	file_package	Ìîäóë
+frs	file_version	Âåðñèÿ
+group	long_bugs	Ïðîñëåäÿâàíå íà ãðåøêè
+group	long_cvs	CVS õðàíèëèùå
+group	long_docman	Ïðîåêòíà äîêóìåíòàöèÿ
+group	long_forum	Ïóáëè÷íè ôîðóìè
+group	long_ftp	Àíîíèìíî FTP ïðîñòðàíñòâî
+group	long_homepage	Íà÷àëíà ñòðàíèöà íà ïðîåêòà
+group	long_mail	Ñïèñúöè ñ ïîëó÷àòåëè
+group	long_news	Ïîñëåäíè íîâèíè
+group	long_patch	Óïðàâëÿâàíå íà ïîïðàâêèòå
+group	long_pm	Óïðàâëÿâàíå íà çàäà÷èòå
+group	long_support	Óïðàâëÿâàíå íà ïîääðúæêàòà
+group	long_survey	Äîïèòâàíå
+group	short_bugs	Ãðåøêè
+group	short_cvs	CVS
+group	short_docman	Äîêóìåíòè
+group	short_files	Filesgroup	short_forum	Ôîðóìè
+group	short_homepage	Íà÷àëî
+group	short_mail	Ïîëó÷àòåëè
+group	short_main 	Îñíîâíî
+group	short_news	Íîâèíè
+group	short_patch	Ïîïðàâêè
+group	short_pm	Çàäà÷è
+group	short_summary	Ðåçþìå
+group	short_support	Ïîääðúæêà
+group	short_survey	Ïðîó÷âàíèÿ
+home	highest_ranked_users	Íàé-ïîïóëÿðíèòå ïîòðåáèòåëè
+home	about_blurb	  SourceForge å <B>áåçïëàòíà óñëóãà çà ðàçðàáîòâàùèòå ñîôòóåð ñ  <A href="http://www.opensource.org">îòâîðåí êîä</A></B>,  ïðåäëàãàùà ëåñåí äîñòúï äî íàé-äîáðîòî îò CVS, äèñêóñèîííè ôîðóìè,  ïðîñëåäÿâàíå íà ãðåøêè, óïðàâëåíèå íà çàäà÷è,  áåçïëàòíî óåá ïðîñòðàíñòâî, ïîñòîÿííî àðõèâèðàíå íà ôàéëîâåòå,  ïúëíî ðåçåðâíî ïîäñèãóðÿâàíå íà ïðîåêòà,  è íàïúëíî óåá áàçèðàíî àäìèíèñòðèðàíå. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ ïîâå÷å ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Âêëþ÷âàíå è îáðàòíà âðúçêà</B> <P> Çà äà ìîæå äà èçïîëçâàòå íàé-åôåêòèâíî SourceForge, ùå òðÿáâà äà ñå  <A href="/account/register.php">ðåãèñòðèðàòå</A> êàòî ïîòðåáèòåë.  Òîâà ùå âè ïîçâîëè äà ó÷àñòâàòå íàïúëíî âúâ âñè÷êî, êîåòî ïðåäëàãàìå.  Ðàçáèðà ñå, ìîæåòå äà ðàçãëåæäàòå âñè÷êî è áåç ðåãèñòðèðàíå, íî òàêà ùå  ñå ëèøèòå îò âúçìîæíîñòòà çà ïúëíî âêëþ÷âàíå â ðàçëè÷íèòå óñëóãè. <P> &nbsp; <BR> <B>Ñúçäàéòå ñâîé ïðîåêò</B> <P> <A href="/account/register.php">Ðåãèñòðèðàéòå ñå êàòî ïîòðåáèòåë</A>,  ñëåä êîåòî <A HREF="/account/login.php">âëåçòå</A> â ñâîÿò ïðîôèë è íàêðàÿ  <A HREF="/register/">ðåãèñòðèðàéòå âàøèÿò ïðîåêò.</A> <P> Áëàãîäàðèì âè... è ïðèÿòíî ïîëçâàíå íà óñëóãèòå íè.
+frs	latest_file_releases	Ïîñëåäíèòå èçëåçëè ôàéëîâå
+menu	login	Âõîä (SSL çàùèòåíà âðúçêà)
+menu	logout	Èçõîä
+home	most_active_this_week	Íàé-àêòèâíè ïðåç òàçè ñåäìèöà
+menu	my_personal_page	Ëè÷íà ñòðàíèöà
+menu	new_project	Ðåãèñòðèðàíå íà íîâ ïðîåêò
+menu	new_releases	Íîâîèçëåçëè
+menu	new_user	Íîâ ïîòðåáèòåë (SSL çàùèòåíà âðúçêà)
+menu	other_site_mirrors	Îãëåäàëíè êîïèÿ
+menu	project_admin	Àäìèíèñòðèðàíå íà ïðîåêò
+group	project_admins	Àäìèíèñòðàòîðè
+menu	project_help_wanted	Ïðîåêòè òúðñåùè ïîìîù
+menu	project_summary	Îáùà èíôîðìàöèÿ çà ïðîåêòà
+group	public_area	Îáùîäîñòúïíè ìåñòà
+menu	search	Òúðñåíå
+menu	software_map	Êàðòà íà ñîôòóåðà
+home	sourceforge_statistics	SourceForge ñòàòèñòèêà
+menu	top_projects	Òîï ïðîåêòè
+home	top_project_downloads	Íàé-ïîïóëÿðíèòå ïðîåêòè
+conf	content_encoding	windows-1251
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	bg
+conf	language_id	20

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Catalan.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Catalan.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Catalan.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,90 @@
+#/**
+#  *
+#  * Catalan message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Enric Mart­nez
+#  *
+#  */
+# 
+# ChangeLog:
+#
+# 2000-09-23  Enric Mart­nez
+#	* Initial translation
+# 2000-10-16  Evilio del Rio
+#	* Corrections:
+#        Els meus criteris de correcciã s'han basat en els
+#        segìents punts:
+#
+#                . Correciã ortogr fica (catal  central)
+#                . Correciã teminolâgica (programari, etc.)
+#                . Nom©s hi majêscules a la lletra inicial i noms propis.
+#                . D'altres criteris trets de Soft Catal  (utilitzaciã del "vos").
+#
+menu	account_maintenance	Manteniment de compte
+menu	bookmark_page	Página de marcadors
+home	breaking_down_barriers	Trencant les barreres per al desenvolupament de codi obert
+menu	change_my_theme	Canviar el meu tema
+menu	code_snippet_library	Biblioteca de bocinets de codi
+menu	compile_farm	Granja de compilació
+menu	contact_us	Contacteu
+group	developers	Desenvolupadors
+group	developer_info	Informació del desenvolupador
+menu	discussion_forums	 Fòrums de discussiò 
+menu	documentation	Documentació local
+frs	file_download	Descàrrega
+frs	file_monitor	Monitor
+frs	file_notes	Notes
+frs	file_package	Paquet
+frs	file_version	Versió
+group	long_bugs	Seguiment d'errors
+group	long_cvs	Repositori CVS
+group	long_docman	Gestor de documents
+group	long_forum	 Fòrums públics
+group	long_ftp	Espai de FTP anònim
+group	long_homepage	Pàgina d'inici del projecte
+group	long_mail	Llistas de correu
+group	long_news	Últimes notícies
+group	long_patch	Gestor de pegats
+group	long_pm	Gestor de tasques
+group	long_support	Gestor de suport tècnic
+group	long_survey	Enquestes
+group	short_bugs	Errades
+group	short_cvs	CVS
+group	short_docman	Documents
+group	short_files	Filesgroup	short_forum	Fòrums
+group	short_homepage	Pàgina de inici
+group	short_mail	Llistes
+group	short_news	Notícies
+group	short_patch	Pegats
+group	short_pm	Tasques
+group	short_summary	Sumari
+group	short_support	Suport tècnic
+group	short_survey	Enquestes
+home	highest_ranked_users	Usuaris més actius
+home	about_blurb	  SourceForge és un<B>servei gratuït per a desenvolupadors de<A href="http://www.opensource.org">Codi obert</A></B> oferint fàçil accés als millors repositoris CVS, llistes de discussió, seguiment d'errors, taulers de anuncis, fòrums, gestió de tasques, hostatge de llocs web, arxius permanent de fitxers, còpies de seguretat completes i administració totalment basada en web. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ mes ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Retorn i participació</B> <P> Per poder obtenir el màxim de SourceForge, haureu  d'<A href="/account/register.php">enregistrar-vos com a  usuari del lloc</A>. Això us permetrà participar plenament en tot el que tenim per oferir. Podreu, és clar, navegar pel lloc sense enregistrar-vos, però no tindreu l'opció de participar plenament. <P> &nbsp; <BR> <B>Feu el vostre propi projecte</B> <P> <A href="/account/register.php">Enregistreu-vos com a usuari del lloc</A>,  <A HREF="/account/login.php"entreu </A>amb el vostre usuari i finalment, <A HREF="/register/">Doneu d'alta el vostre projecte.</A> <P> Moltes Gràcies... i gaudiu del lloc.
+frs	latest_file_releases	Últimes versions dels arxius
+menu	login	Accés via SSL
+menu	logout	Sortir
+home	most_active_this_week	El més actiu aquesta setmana
+menu	my_personal_page	La meva pàgina personal
+menu	new_project	Enregistrar un projecte nou
+menu	new_releases	Noves sortides
+menu	new_user	Usuari nou via SSL
+menu	other_site_mirrors	Miralls d'altres llocs
+menu	project_admin	Admininstració de projectes
+group	project_admins	Administradors del projecte
+menu	project_help_wanted	Es necessita ajuda per projectes
+menu	project_summary	Sumari de projectes
+group	public_area	Área pública
+menu	search	Cercar
+menu	software_map	Mapa de programari
+home	sourceforge_statistics	Estadístiques de SourceForge
+menu	top_projects	Projectes senyers
+home	top_project_downloads	Projectes més descarregats
+conf	language_code	ca
+conf	language_id	14

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Chinese.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Chinese.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Chinese.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,82 @@
+#/**
+#  *
+#  * Traditional Chinese message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Yu-Jui Lee
+#  *
+#  */
+# ChangeLog:
+#
+# 2000-10-01  Yu-Jui Lee
+#	* Initial translation
+#
+menu	account_maintenance	±b¸¹ºûÅ@
+menu	bookmark_page	®ÑÅÒ
+home	breaking_down_barriers	¬°¶}©ñ·½½Xªºµo®i¶}ÅP¤@±ø©Z³~
+menu	change_my_theme	¥DÃDÅܧó
+menu	code_snippet_library	¤p¤ùÂ_·½½Xµ{¦¡®w
+menu	compile_farm	½sĶ¥D¾÷¸s
+menu	contact_us	Ápµ¸§Ú­Ì
+group	developers	¶}µoªÌ
+group	developer_info	¶}µoªÌ¸ê°T
+menu	discussion_forums	½×¾Â
+menu	documentation	¤å¥ó
+frs	file_download	ÀɮפU¸ü
+frs	file_monitor	ºÊ¬Ý
+frs	file_notes	ªþµù
+frs	file_package	ÀÉ®×¥]»q
+frs	file_version	Àɮת©¥»
+group	long_bugs	¯ä¦ä°lÂÜ
+group	long_cvs	CVSµ{¦¡®w
+group	long_docman	±M®×¤å¥ó
+group	long_forum	¤½¦@½×¾Â
+group	long_ftp	°Î¦WFTPªÅ¶¡
+group	long_homepage	±M®×­º­¶
+group	long_mail	¹q¤l¶l¥ó°Q½×¸s
+group	long_news	³Ì·s®ø®§
+group	long_patch	­×¸ÉºÞ²zªÌ
+group	long_pm	¤u§@ºÞ²zªÌ
+group	long_support	§Þ³N¤ä´©ºÞ²zªÌ
+group	long_survey	½Õ¬d
+group	short_bugs	¯ä¦ä
+group	short_cvs	CVS
+group	short_docman	¤å¥ó
+group	short_files	Filesgroup	short_forum	½×ôÎ
+group	short_homepage	­º­¶
+group	short_mail	¹q¤l¶l¥ó
+group	short_main 	¥D­n
+group	short_news	·s»D
+group	short_patch	­×¸É
+group	short_pm	¤u¥ó
+group	short_summary	ºK­n
+group	short_support	¤ä´©
+group	short_survey	½Õ¬d
+home	highest_ranked_users	³Ì°ªµû»ù¥Î¤á±Æ¦æº]
+home	about_blurb	  SourceForge¬°¤@<B>´£¨Ñ§K¶OªA°Èµ¹ <A href="http://www.opensource.org">¶}©ñ·½½X</A>µo®iªÌªººô¯¸</B> ¥]¬A¤FCVS, ¶l¥ó°Q½×¸s, ¯ä¦ä°lÂܨt²Î, °T®§½×¾Â, ¤u§@ºÞ²z, ºô¯¸ªÅ¶¡, ÀÉ®×Àx¦s, §¹¾ãªºÀɮ׳ƥ÷, ¥B§¹¥þ¥Hweb-based¨ÓºÞ²z. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ more ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>½Ð¥ß§Y¥[¤J¨Ã¤£§[«ü±Ð</B> <P> ¬°¥R¤À§Q¥ÎSourceForge©Ò´£¨ÑªºªA°È, <A href="/account/register.php">½Ð¥ß§Yµù¥U¦¨¬° ¥»¯¸¥Î¤á</A>. ±z±N¯à¥R¤À°Ñ»P¥»¯¸©Ò´£¨Ñªº¦U¶µ¬¡°Ê, ±z­Y©|¥¼µù¥U¦¨¬°¥Î¤á, ¤´¯àÂsÄý¥»¯¸, ¦ýµLÅv¥R¥÷°Ñ»P¥»¯¸¬¡°Ê.  <P> &nbsp; <BR> <B>³]¸m±z¦Û¤vªº±M®×</B> <P> <A href="/account/register.php">µù¥U¦¨¬°¥»¯¸¥Î¤á</A>, ±µµÛ <A HREF="/account/login.php">µn¤J</A> ³Ì«á, <A HREF="/register/">µù¥U±zªº±M®×.</A> <P> ÁÂÁ±z... ¨Ã¯¬¨Ï¥Î¥»¯¸´r§Ö.
+frs	latest_file_releases	³Ì·sÀÉ®×µoªí
+menu	login	¸g¥ÑSSLµn¤J
+menu	logout	µn¥X
+home	most_active_this_week	¥»¶g¬¡°Ê¤O³Ì±j±Æ¦æº]
+menu	my_personal_page	§Úªº­º­¶
+menu	new_project	·s±M®×µn¿ý
+menu	new_releases	·sµoªí³nÅé
+menu	new_user	¸g¥ÑSSL·s¥Î¤áµù¥U
+menu	other_site_mirrors	¨ä¥¦¬M®gºô¯¸
+menu	project_admin	±M®×ºûÅ@
+group	project_admins	±M®×ºÞ²zªÌ
+menu	project_help_wanted	¼x¨D¨ó§U
+menu	project_summary	±M®×ºK­n
+group	public_area	¤½¦@°Ï°ì
+menu	search	·j´M
+menu	software_map	³nÅé¤ÀÃþªí
+home	sourceforge_statistics	SourceForge²Î­p¸ê®Æ
+menu	top_projects	¼öªù±M®×
+home	top_project_downloads	¼öªù±M®×¤U¸ü±Æ¦æº]
+conf	content_encoding	BIG5
+conf	language_code	zh-TW
+conf	language_id	11

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Dutch.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Dutch.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Dutch.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,83 @@
+#/**
+#  *
+#  * Dutch message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-01
+#	* Initial translation, based on CVS revision 1.15 of BaseLanguage.class
+#
+menu	account_maintenance	Account onderhouden
+menu	bookmark_page	Bladwijzer van deze pagina maken
+home	breaking_down_barriers	Breaking Down the Barriers to Open Source Development
+menu	change_my_theme	Mijn thema wijzigen
+menu	code_snippet_library	Code-knipsels bibliotheek
+menu	compile_farm	Compilatie boerderij
+menu	contact_us	Neem contact met ons op
+group	developers	Ontwikkelaars
+group	developer_info	Ontwikkelaar Info
+menu	discussion_forums	Discussie forums
+menu	documentation	Site documentatie
+frs	file_download	Downloaden
+frs	file_monitor	Monitor
+frs	file_notes	Notitites
+frs	file_package	Pakket
+frs	file_version	Versie
+group	long_bugs	Bug Tracking
+group	long_cvs	CVS Repository
+group	long_docman	DocManager: documentatie van project
+group	long_forum	Publieke Forums
+group	long_ftp	Anonieme FTP-ruimte
+group	long_homepage	Homepage van project
+group	long_mail	Mailing Lijsen
+group	long_news	Laatste nieuws
+group	long_patch	Patch Manager
+group	long_pm	Takenmanager
+group	long_support	Technische ondersteuningsmanager
+group	long_survey	Enquêtes
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Documentatie
+group	short_files	Filesgroup	short_forum	Forums
+group	short_homepage	Homepage
+group	short_mail	Lijsten
+group	short_main 	Hoofd
+group	short_news	Nieuws
+group	short_patch	Patches
+group	short_pm	Taken
+group	short_summary	Samenvatting
+group	short_support	Ondersteuning
+group	short_survey	Enquêtes
+home	highest_ranked_users	Gebruikers met de hoogste rang
+home	about_blurb	  		SourceForge is een <B>gratis service voor 		<A href="http://www.opensource.org">Open Source</A> ontwikkelaars</B> die 		gemakkelijke toegang tot het beste in CVS, mailing lijsen, bug tracking, berichtborden/forums, 		task management, site hosting, permanent file archival, full backups, 		en totale web-gebaseerde administratie geeft.  		<A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ meer ]</font></A> 		<A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> 		<BR> 		&nbsp; 		<P> 		<B>Site feedback en hoe mee te doen</B> 		<P> 		Om het meeste uit SourceForge te halen, moet u naar 		<A href="/account/register.php">registreren als een site 		gebruiker</A> gaan. Dit stelt u in staat om volledig mee te doen met alles 		wat we te bieden hebben. U kan natuurlijk de site doorkijken zonder te 		registreren, maar u kan niet volledig meedoen. 		<P> 		&nbsp; 		<BR> 		<B>Uw eigen project opzetten</B> 		<P> 		<A href="/account/register.php">Registreren als een site 		gebruiker</A>, 		dan <A HREF="/account/login.php">Inloggen</A> en uiteindelijk, 		<A HREF="/register/">Nieuw project registreren.</A> 		<P> 		Bendankt... en veel succes met de site.
+frs	latest_file_releases	Laatste bestandsuitgaven
+menu	login	Inloggen via SSL
+menu	logout	Uitloggen
+home	most_active_this_week	Meest actief deze week
+menu	my_personal_page	Mijn persoonlijke pagina
+menu	new_project	Nieuw project registreren
+menu	new_releases	Nieuwe uitgaves
+menu	new_user	Nieuwe gebruiker via SSL
+menu	other_site_mirrors	Andere site mirrors
+menu	project_admin	Projectadministratie
+group	project_admins	Project administrators
+menu	project_help_wanted	Hulp gevraagd bij projecten
+menu	project_summary	Projectsamenvatting
+group	public_area	Publieke gebieden
+menu	search	Zoeken
+menu	software_map	Software kaart
+home	sourceforge_statistics	SourceForge Statistieken
+menu	top_projects	Top Projecten
+home	top_project_downloads	Top projectendownloads
+conf	content_encoding	iso-8859-1
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	nl
+conf	language_id	12

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/English.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/English.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/English.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,11 @@
+#/**
+#  *
+#  * English message catalog (empty)
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  *
+#  */

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Esperanto.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Esperanto.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Esperanto.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,97 @@
+#/**
+#  *
+#  * Esperanto message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Jim Kingdon <kingdon at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-14  Jim Kingdon  <kingdon at users.sourceforge.net>
+#	* Initial translation
+# 2000-10-26  FAGOT Alain  <kameleono at users.sourceforge.net>
+#	* surbaze de jam ekzistanta traduko, gxustigoj laux
+#	Komputada Leksikono (spelling/lexical corrections)
+#
+#  Mozilo, kaj (mi kredas) IE povas uzi la e-a signojn de 
+#  UTF-8.  Netcapo 4.x havas UTF-8, sed sen la e-aj signoj.
+#  Majuskla     Minuskla
+#  Cx: &#264;   cx: &#265;
+#  Gx: &#284;   gx: &#285;
+#  Hx: &#292;   hx: &#293;
+#  Jx: &#308;   jx: &#309;
+#  Sx: &#348;   sx: &#349;
+#  Ux: &#364;   ux: &#365;
+about_foundries	about_blurb	Pri fandejoj
+menu	about_sourceforge	Pri SourceForge
+menu	account_maintenance	Modifu konton
+menu	bookmark_page	Legosignoj
+home	breaking_down_barriers	Forigu obstaklojn por skribi liberajn programojn
+menu	change_my_theme	&#348;an&#285;u aspekton
+menu	code_snippet_library	Biblioteko de programeroj
+menu	compile_farm	Muntejaj komputiloj
+menu	contact_us	Kontaktu nin
+group	developers	Programantoj
+group	developer_info	Programanta informo
+menu	discussion_forums	Forumoj de diskuto
+menu	documentation	Dokumentado
+frs	file_download	El&#349;utu
+frs	file_monitor	Priatenti dosieron
+frs	file_notes	Notoj
+frs	file_package	Paka&#309;o
+frs	file_version	Redakto
+group	long_bugs	Cimilo
+group	long_cvs	CVSejo
+group	long_docman	Dokumentilo
+group	long_forum	Publikaj Forumoj
+group	long_ftp	Anonima FTPejo
+group	long_homepage	Projekta hejmpa&#285;o
+group	long_mail	Dissendolistoj
+group	long_news	Lastaj nova&#309;oj
+group	long_patch	Flikilo
+group	long_pm	Taskilo
+group	long_support	Subtenilo
+group	long_survey	Demandilo
+group	short_bugs	Cimoj
+group	short_cvs	CVS
+group	short_docman	Dokumentoj
+group	short_files	Filesgroup	short_forum	Forumoj
+group	short_homepage	Hejmpa&#285;o
+group	short_mail	Listoj
+group	short_main 	&#264;efa pa&#285;o
+group	short_news	Nova&#309;oj
+group	short_patch	Flikoj
+group	short_pm	Taskoj
+group	short_summary	Resumo
+group	short_support	Subteno
+group	short_survey	Demandilo
+home	highest_ranked_users	Supre Rangitaj uzantoj
+home	about_blurb	  SourceForge estas <B>senpaga servo por  programantoj de <A href="http://www.opensource.org">Liberaj Programoj</A></B>, kiu enhavas facilan uzon de la plej bonaj ecoj en CVS, retpo&#349;taj listoj, cimilo, diskutforumoj, taskilo, reta gastigo, da&#365;ra arkivo de dosieroj, bendarkivado, kaj TTTeja administrado.  <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ pli ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ OD ]</font></A> <BR> &nbsp; <P> <B>SourceForge reenmeto kaj partoprenado</B> <P> Por uzi SourceForge plene, vi bezonas <A href="/account/register.php">registri&#285;i kiel uzanto</A>.  Vi povas rigardi SourceForge sen registri&#285;i sed ne partopreni plene. <P> &nbsp; <BR> <B>Aldonu Projekton</B> <P> <A href="/account/register.php">Registri&#285;i kiel uzanto</A>, poste <A HREF="/account/login.php">Saluti</A> kaj finfine, <A HREF="/register/">Registri&#285;i vian projekton.</A> <P> Dankon... kaj &#285;uu SourceForge.
+frs	latest_file_releases	Lastaj dosieraj redaktoj
+menu	login	Salutu per SSL
+menu	logout	Adia&#365;u
+home	most_active_this_week	Plej aktiva &#265;i tiu semajno
+menu	my_personal_page	Mia propra pa&#285;o
+menu	new_project	Nova projekto
+menu	new_releases	Novaj versioj
+menu	new_user	Nova uzanto per SSL
+menu	other_site_mirrors	Speguloj
+menu	project_admin	Administru projekton
+group	project_admins	Projektaj estraranoj
+menu	project_help_wanted	Projekthelpo dezirata
+menu	project_summary	Projekta resumo
+group	public_area	Publikaj regionoj
+menu	search	Ser&#265;u
+menu	software_map	Mapo de programoj
+home	sourceforge_statistics	Statistika&#309;oj de SourceForge
+menu	top_projects	Plej aktivaj projektoj
+home	top_project_downloads	Plej aktivaj projektaj el&#349;utoj
+conf	content_encoding	UTF-8
+conf	language_code	eo
+conf	language_id	13

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/French.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/French.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/French.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,86 @@
+#/**
+#  *
+#  * French message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Olivier Gerard
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-25  Olivier Gerard
+#	* Initial translation
+# 2000-10-15  Alexandre Aufrere  <nikopol at users.sourceforge.net>
+#	* Translation and correction
+#
+menu	account_maintenance	Gestion du Compte
+menu	bookmark_page	Favoris
+home	breaking_down_barriers	Abaisser les barri&egrave;res du d&eacute;veloppement Open Source
+menu	change_my_theme	Changement du Th&egrave;me
+menu	code_snippet_library	Biblioth&egrave;que de Code
+menu	compile_farm	Ferme de Compilation
+menu	contact_us	Contact
+group	developers	D&eacute;veloppeurs
+group	developer_info	Informations pour D&eacute;veloppeurs
+menu	discussion_forums	Forums de Discussion
+menu	documentation	Documentation
+frs	file_download	T&eacute;l&eacute;chargement
+frs	file_monitor	Surveillance
+frs	file_notes	Remarques
+frs	file_package	Package
+frs	file_version	Version
+group	long_bugs	Gestion des Bugs
+group	long_cvs	R&eacute;f&eacute;rentiel CVS
+group	long_docman	Gestion de la Documentation
+group	long_forum	Forums de Discussion
+group	long_ftp	Espace FTP Anonyme
+group	long_homepage	Page d'Accueil
+group	long_mail	Listes de Diffusion
+group	long_news	Derni&egrave;res nouveaut&eacute;s
+group	long_patch	Gestion des Corrections
+group	long_pm	Gestion de Projet
+group	long_support	Support Technique
+group	long_survey	Sondages
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Documentation
+group	short_files	Filesgroup	short_forum	Forums
+group	short_homepage	Accueil
+group	short_mail	Mailing-listes
+group	short_main 	Ecran Principal
+group	short_news	Nouveaut&eacute;s
+group	short_patch	Patches
+group	short_pm	T&acirc;ches
+group	short_summary	Survol
+group	short_support	Support
+group	short_survey	Sondages
+home	highest_ranked_users	Les D&eacute;veloppeurs les Mieux Class&eacute;s
+home	about_blurb	 SourceForge est un <b>service gratuit pour les d&eacute;veloppeurs <A href="http://www.opensource.org">Open Source</A></b>. SourceForge offre l'acc&egrave;s le plus simple aux meilleurs services CVS, listes de diffusion, gestion des bugs, forums de discussion, gestion des t&acirc;ches, h&eacute;bergement de site, archivage de fichiers, sauvegardes compl&egrave;tes, etc. via une interface d'administration enti&egrave;rement par le web. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ plus ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Participation des d&eacute;veloppeurs</B> <P>  Pour pouvoir utiliser SourceForge au mieux, il est nec&eacute;ssaire de <A href="/account/register.php">s'enregistrer comme un d&eacute;veloppeur officiel</a>.  Cela vous permettra de profiter de tous ce que nous avons &agrave; vous offrir. Vous pouvez bien entendu parcourir  le site sans vous enregistrer, mais vous ne pourrez pas y participer pleinement. <P> &nbsp; <BR>  <B>Cr&eacute;er un nouveau projet</B> <P> <A href="/account/register.php">Enregistrez-vous comme d&eacute;veloppeur</A>, then <A HREF="/account/login.php">Connectez-vous</A> puis, <A HREF="/register/">Enregistrez votre Projet.</A> <P> Merci... et nous esp&eacute;rons que vous aimerez SourceForge!
+frs	latest_file_releases	Derni&egrave;res r&eacute;visions des fichiers
+menu	login	Connexion via SSL
+menu	logout	Sortir
+home	most_active_this_week	Les Plus Actifs cette Semaine
+menu	my_personal_page	Ma Page Personnelle
+menu	new_project	Nouveau Projet
+menu	new_releases	Nouvelles R&eacute;visions
+menu	new_user	Nouvel Utilisateur via SSL
+menu	other_site_mirrors	Mirroirs d'Autres Sites
+menu	project_admin	Admin. du Projet
+group	project_admins	Admins. du Projet
+menu	project_help_wanted	Demande d'Aide
+menu	project_summary	R&eacute;sum&eacute; du Projet
+group	public_area	Zones Publiques
+menu	search	Recherche
+menu	software_map	Rech. Th&eacute;matique
+home	sourceforge_statistics	Statistiques de SourceForge
+menu	top_projects	Meilleurs Projets
+home	top_project_downloads	Projets les plus T&eacute;l&eacute;charg&eacute;s
+conf	content_encoding	iso-8859-1
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	fr
+conf	language_id	7

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/German.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/German.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/German.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,84 @@
+#/**
+#  *
+#  * German message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Matthias Bauer
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-15  Matthias Bauer
+#	* Initial translation
+#
+menu	about_sourceforge	&Uuml;ber SourceForge
+menu	account_maintenance	Accountverwaltung
+menu	bookmark_page	Lesezeichen
+home	breaking_down_barriers	Wir reissen die Mauern zu Open-Source-Entwicklung nieder
+menu	change_my_theme	Theme &auml;ndern
+menu	code_snippet_library	Codeschnipsel-Sammlung
+menu	compile_farm	Compile-Farm
+menu	contact_us	Kontakt
+group	developers	Entwickler
+group	developer_info	Entwicklerinformationen
+menu	discussion_forums	Diskussionsforen
+menu	documentation	Dokumentation
+frs	file_download	Downloaden
+frs	file_monitor	&Uuml;berwachen
+frs	file_notes	Anmerkungen
+frs	file_package	Paket
+frs	file_version	Version
+group	long_bugs	Bugtracking
+group	long_cvs	CVS-Baum
+group	long_docman	DocManager: Projekt-Dokumentation
+group	long_forum	&Ouml;ffentliche Foren
+group	long_ftp	Anonymer FTP-Zugriff
+group	long_homepage	Projekthomepage
+group	long_mail	Mailinglisten
+group	long_news	Letzte Neuigkeiten
+group	long_patch	Patch-Verwaltung
+group	long_pm	Aufgaben-Verwaltung
+group	long_support	Support-Verwaltung
+group	long_survey	Umfragen
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Dokumentation
+group	short_files	Filesgroup	short_forum	Foren
+group	short_homepage	Homepage
+group	short_mail	Mailinglisten
+group	short_news	Neuigkeiten
+group	short_patch	Patches
+group	short_pm	Aufgaben
+group	short_summary	&Uuml;berblick
+group	short_support	Support
+group	short_survey	Umfragen
+home	highest_ranked_users	Am h&ouml;chsten eingestufte Benutzer
+home	about_blurb	  SourceForge ist ein <b>freier Dienst</b> f&uuml;r <a href="http://www.opensource.org">Open Source</a> Entwickler und bietet einfachen Zugang zu dem Besten aus CVS, Mailinglisten, Bug-Tracking, Diskussionsforen, Aufgabenverwaltung, Webhosting, dauerhafte Dateiarchivierung, Backups und vollst&auml;ndige Verwaltung per Web-Interface.  <a href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ mehr ]</font></A> <a href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <br> &nbsp; <p> <b>Feedback und Teilnahme an der Site</b> <p> Um SourceForge bestm&ouml;glich zu nutzen, sollten Sie sich <a href="/account/register.php">als Benutzer anmelden</a>. Mit einem Benutzeraccount k&ouml;nnen Sie am vollen Spektrum der Website teilhaben. Nat&uuml;rlich k&ouml;nnen Sie SourceForge auch ohne Registrierung nutzen, haben dann allerdings nicht auf alle Bereiche vollen Zugriff. <p> &nbsp; <br> <b>Starten Sie Ihr eigenes Projekt</b> <p> <a href="/account/register.php">Melden Sie sich als Benutzer an</a>, <a href="/account/login.php">loggen Sie sich ein</a> und <a href="/register/">registrieren Sie Ihr Projekt</a>! <p> Vielen Dank. Sie machen eine einfache Webseite sehr gl&uuml;cklich. 
+frs	latest_file_releases	Letzte Dateireleases
+menu	login	Einloggen (SSL)
+menu	logout	Ausloggen
+home	most_active_this_week	Aktivste Projekte in dieser Woche
+menu	my_personal_page	Personalisierte Seite
+menu	new_project	Neues Projekt
+menu	new_releases	Neue Releases
+menu	new_user	Neuer Benutzer (SSL)
+menu	other_site_mirrors	Mirrors
+menu	project_admin	Projektadministrator
+group	project_admins	Projektbetreuer
+menu	project_help_wanted	Projekthilfe gesucht
+menu	project_summary	Projekt&uuml;bersicht
+group	public_area	&Ouml;ffentliche Bereiche
+menu	search	Suche
+menu	software_map	Softwarekarte
+home	sourceforge_statistics	SourceForge Statistieken
+menu	top_projects	Top-Projekte
+home	top_project_downloads	Popul&auml;rste Downloads (nach Projekten)
+conf	content_encoding	iso-8859-1
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	de
+conf	language_id	6

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Greek.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Greek.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Greek.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,84 @@
+#/**
+#  *
+#  * Greek message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Simos Xenitellis
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-15  Simos Xenitellis
+#	* Initial translation
+#
+menu	account_maintenance	ÅíçìÝñùóç Ëïãáñéáóìïý
+menu	bookmark_page	Óåëßäá ÁãáðçìÝíùí
+home	breaking_down_barriers	Êáôáëýùíôáò ôïõò öñáãìïýò óôçí ÁíÜðôõîç Åëåýèåñïõ Ëïãéóìéêïý
+menu	change_my_theme	ÁëëáãÞ ôïõ ÈÝìáôüò Ìïõ
+menu	code_snippet_library	ÂéâëéïèÞêç ØçãìÜôùí Êþäéêá
+menu	compile_farm	ÖÜñìá Ìåôáãëþôôéóçò
+menu	contact_us	Åðéêïéíùíßóôå ìáæß ìáò
+group	developers	ÐñïãñáììáôéóôÝò
+group	developer_info	Ðëçñïöïñßåò ÐñïãñáììáôéóôÞ
+menu	discussion_forums	ÂÞìá ÓõæçôÞóåùí
+menu	documentation	Ôåêìçñßùóç ÓõóôÞìáôïò
+frs	file_download	Ìåôáöüñôùóç
+frs	file_monitor	Ðáñáêïëïýèçóç
+frs	file_notes	Óçìåéþóåéò
+frs	file_package	ÐáêÝôï
+frs	file_version	¸êäïóç
+group	long_bugs	Ðáñáêïëïýèçóç ÓöáëìÜôùí
+group	long_cvs	ÁðïèÞêç CVS
+group	long_docman	DocManager: Project Documentation
+group	long_forum	Äçìüóéá ÂÞìáôá
+group	long_ftp	×þñïò Áíþíõìïõ FTP
+group	long_homepage	Áñ÷éêÞ Óåëßäá ¸ñãïõ
+group	long_mail	Ëßóôåò Óõíäñïìçôþí
+group	long_news	Ôåëåõôáßá ÍÝá
+group	long_patch	Äéá÷åéñéóôÞò ÅðéññáìÜôùí
+group	long_pm	Äéá÷åéñéóôÞò Åñãáóéþí
+group	long_support	Äéá÷åéñéóôÞò ÕðïóôÞñéîçò ÐñïãñÜììáôïò
+group	long_survey	¸ñåõíåò
+group	short_bugs	ÓöÜëìáôá
+group	short_cvs	CVS
+group	short_docman	Ôåêìçñßùóç
+group	short_files	Filesgroup	short_forum	ÂÞìáôá
+group	short_homepage	Ðñþôç Óåëßäá
+group	short_mail	Ëßóôåò
+group	short_main 	Êýñéï
+group	short_news	ÍÝá
+group	short_patch	ÅðéññÜìáôá
+group	short_pm	Åñãáóßåò
+group	short_summary	ÐåñéëÞøç
+group	short_support	ÕðïóôÞñéîç
+group	short_survey	¸ñåõíåò
+home	highest_ranked_users	×ñÞóôåò Ìåãáëýôåñçò Áîéïëüãçóçò
+home	about_blurb	  Ôï SourceForge åßíáé ìéá <B>åëåýèåñç õðçñåóßá ãéá <A href="http://www.opensource.org">Open Source</A> ðñïãñáììáôéóôÝò</B> ðïõ ðñïóöÝñåé åýêïëç ðñüóâáóç óôá êáëýôåñá ÷áñáêôçñéóôéêÜ ôïõ CVS, ôùí ëéóôþí óõíäñïìçôþí, ôçò ðáñáêïëïýèçóçò óöáëìÜôùí,  ôùí âçìÜôùí óõæçôÞóåùí, ôçò äéá÷åßñçóçò åñãáóéþí, ôçò åîõðçñÝôçóçò äéêôõáêþí ôüðùí, ôçò ìüíéìçò áñ÷åéïèÝôçóçò áñ÷åßùí,  ôçò äçìéïõñãßáò ðëÞñùí áíôéãñÜöùí áóöáëåßáò êáé ôçò ïëéêÞò äéá÷åßñéóçò ìÝóá áðü ôï WWW. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ more ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>ÁíÜäñáóç Äéêôõáêïý Ôüðïõ êáé Óõììåôï÷Þ</B> <P> Ãéá íá åðùöåëçèåßôå ôá ìÝãéóôá áðü ôï SourceForge, èá ðñÝðåé íá <A href="/account/register.php"> åããñáöåßôå ùò ÷ñÞóôçò óõóôÞìáôïò</A>.  Áõôü èá óáò åðéôñÝøåé íá óõììåôÜó÷åôå ðëÞñùò óå üëá üóá Ý÷ïõìå íá ðñïóöÝñïõìå. ÖõóéêÜ, ìðïñåßôå íá ðåñéçãçèÞôå óå áõôü ôï äéêôõáêü ôüðï ÷ùñßò åããñáöÞ, ùóôüóï äå èá Ý÷åôå ðñüóâáóç íá óõììåôÜó÷åôå ðëÞñùò. <P> &nbsp; <BR> <B>Åêêßíçóç ôïõ Äéêïý óáò ¸ñãïõ</B> <P> <A href="/account/register.php">Åããñáöåßôå ùò ÷ñÞóôçò óõóôÞìáôïò</A>, Ýðåéôá <A HREF="/account/login.php">Óýíäåèåßôå</A> êáé ôÝëïò, <A HREF="/register/">ÅããñÜøåôå ôï ¸ñãï óáò.</A> <P> Åõ÷áñéóôïýìå... êáé íá ðåñÜóåôå êáëÜ óôï äéêôõáêü óáò ôüðï.
+frs	latest_file_releases	Ôåëåõôáßåò Åêäüóåéò Áñ÷åßùí
+menu	login	Óýíäåóç ìÝóù SSL
+menu	logout	Áðïóýíäåóç
+home	most_active_this_week	Ðåñéóóüôåñï Åíåñãü ãéá ÁõôÞí ôçí ÅâäïìÜäá
+menu	my_personal_page	Ç ÐñïóùðéêÞ ìïõ Óåëßäá
+menu	new_project	Êáôá÷þñéóç ÍÝïõ ¸ñãïõ
+menu	new_releases	ÍÝåò Åêäüóåéò
+menu	new_user	ÍÝïò ×ñÞóçò ìÝóù SSL
+menu	other_site_mirrors	¶ëëá ÓõóôÞìáôá Êáèåðôñéóìïý
+menu	project_admin	Äéá÷åéñéóôÞò ¸ñãïõ
+group	project_admins	Äéá÷åéñéóôÝò ¸ñãïõ
+menu	project_help_wanted	Æçôåßôå ÂïÞèåéá ¸ñãïõ
+menu	project_summary	Ðåñßëçøç ¸ñãïõ
+group	public_area	Äçìüóéåò Ðåñéï÷Ýò
+menu	search	ÁíáæÞôçóç
+menu	software_map	×Üñôçò Ëïãéóìéêïý
+home	sourceforge_statistics	ÓôáôéóôéêÜ SourceForge
+menu	top_projects	Êïñõöáßá ¸ñãá
+home	top_project_downloads	Êïñõöáßåò Ìåôáöïñôþóåéò ¸ñãùí
+conf	content_encoding	iso-8859-7
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	el
+conf	language_id	19

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Hebrew.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Hebrew.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Hebrew.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,78 @@
+#/**
+#  *
+#  * Hebrew message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Sagi Bashari <sagi at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-24  Sagi Bashari  <sagi at users.sourceforge.net>
+#	* Initial translation
+#
+menu	account_maintenance	ïåáùç ú÷åæçú
+menu	bookmark_page	íéôãòåî
+home	breaking_down_barriers	éùôåç ãå÷ çåúéôì íåñçîä úà íéøáåù
+menu	change_my_theme	øúàä äàøî úà äðù
+menu	code_snippet_library	ãå÷ éòè÷ úééøôñ
+menu	compile_farm	äéöéìôîå÷ úååç
+menu	contact_us	øù÷ øåö
+group	developers	íéçúôî
+group	developer_info	çúôîä éèøô
+menu	discussion_forums	íéîåøåô
+menu	documentation	íéðåù íéëîñî
+frs	file_download	äãøåä
+frs	file_monitor	çéâùî
+frs	file_notes	úåøòä
+frs	file_package	úåìéáç
+frs	file_version	úåàñøâ
+group	long_bugs	úåì÷ú øçà á÷òî
+group	long_cvs	CVS øâàî
+group	long_docman	íéëîñî ìäðî
+group	long_forum	íéçåúô íéîåøåô
+group	long_ftp	éîéðåðà éôéèôà úåøù
+group	long_homepage	è÷éåøôä øúà
+group	long_mail	øååéã úåîéùø
+group	long_news	úåðåøçà úåùãç
+group	long_patch	íéðå÷éú ìäðî
+group	long_pm	úåîéùî ìäðî
+group	long_support	úéðëè äëéîú ìäðî
+group	long_survey	úåøé÷ñ
+group	short_bugs	úåì÷ú
+group	short_cvs	CVS
+group	short_docman	íéëîñî
+group	short_files	Filesgroup	short_forum	íéîåøåô
+group	short_homepage	úéá øúà
+group	short_mail	úåîéùø
+group	short_news	úåùãç
+group	short_patch	íéðå÷éú
+group	short_pm	úåîéùî
+group	short_summary	íéèøô
+group	short_support	äëéîú
+group	short_survey	úåøé÷ñ
+home	highest_ranked_users	íéìéòô éëä íéùîúùîä
+home	about_blurb	  <P ALIGN="right"> <BR>.éùôåç øå÷î ãå÷ éçúôîì úåøù àåä SourceForge <BR> ,íéîåøåô ,íéâàá øçà á÷òî ,øååéã úåîéùø ,CVS ì äèåùôå äáåè äùéâ íé÷ôñî åðçðà <BR>.áååäî ìåäéðì äùéâå ,íéàìî íééåáéâ ,òåá÷ íéöá÷ øâàî ,íéøúà úðñçà ,úåîéùî éìäðî <BR><A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ úåáåùúå úåìàù ]</font></A> <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ ãåò ]</font></A> </P>  &nbsp; <P ALIGN="RIGHT"> <B>úåôúúùäå áåùî</B> <P ALIGN="RIGHT"> êøúöú äúà SourceForge î øúåéá áåèä úà ìá÷ì ìéáùá <BR>.íéòéöî åðçðàù äî ìëì äàìî äùéâ êì àéáé äæ <A href="/account/register.php">.øúàá ùîúùîë íùøäì</A> <BR>.äàìî äùéâ êì äéäú àì ìáà ,íùøéäì éìá øúàá ùåìâì ïáåîë ìåëé äúà  <P ALIGN="RIGHT" >  &nbsp; <BR> <B>êìù è÷éåøôä úà íåùø</B> <P ALIGN="RIGHT"> <A HREF="/register/">.êìù è÷éåøôä úà íåùø</A> óåñáìå  ,<A HREF="/account/login.php">ñðëú</A> æàå <A href="/account/register.php">øúàá ùîúùéîë íùøä</A> <BR> <P ALIGN="RIGHT"> .øúàä êúééäùî äðäúå ..äãåú </P> 
+frs	latest_file_releases	úåðåøçà äðëåú úåàñøâ
+menu	login	çèáåàî úøù êøã äñéðë
+menu	logout	äàéöé
+home	most_active_this_week	òåáùä íéìéòô éëä
+menu	my_personal_page	éùéà ãåîò
+menu	new_project	ùãç è÷éåøô íåùø
+menu	new_releases	úåùãç úåàñøâ
+menu	project_admin	è÷éåøô ìäðî
+group	project_admins	íéè÷éåøô éìäðî
+menu	project_help_wanted	íéè÷éåøôì íéùåøã
+menu	project_summary	è÷éåøô úåöîú
+menu	search	ùåôéç
+menu	software_map	úåðëåú úôî
+home	sourceforge_statistics	SourceForge úå÷éèñéèñ
+home	top_project_downloads	íéìéòô éëä íéè÷éåøôä
+conf	content_encoding	iso-8859-8
+conf	default_font	xxzx-random-font\" size=\"1
+conf	language_id	3

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Indonesian.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Indonesian.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Indonesian.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,84 @@
+#/**
+#  *
+#  * Indonesian message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Antonio Wawolangi <scientist at catholic.org>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-17  Antonio Wawolangi  <scientist at catholic.org>
+#	* Initial translation
+#
+menu	account_maintenance	Pemeliharaan Account
+menu	bookmark_page	Halaman Bookmark
+home	breaking_down_barriers	Menumpas Halangan Dalam Pengembangan Open Source
+menu	change_my_theme	Rubah Theme
+menu	code_snippet_library	Pustaka Code Snippet
+menu	compile_farm	Peternakan Kompilasi
+menu	contact_us	Kontak Kami
+group	developers	Developer
+group	developer_info	Info Developer
+menu	discussion_forums	Forum-forum Diskusi
+menu	documentation	Dokumentasi Situs
+frs	file_download	Download
+frs	file_monitor	Monitor
+frs	file_notes	Catatan
+frs	file_package	Paket
+frs	file_version	Versi
+group	long_bugs	Bug Tracking
+group	long_cvs	Gudang CVS
+group	long_docman	DocManager: Dokumentasi Proyek
+group	long_forum	Forum Publik
+group	long_ftp	Tempat Anonymous FTP
+group	long_homepage	Home Page Proyek
+group	long_mail	Milis
+group	long_news	Berita Terbaru
+group	long_patch	Manajer Patch
+group	long_pm	Manajer Tugas
+group	long_support	Manajer Tech Support
+group	long_survey	Survey
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Dokumentasi
+group	short_files	Filesgroup	short_forum	Forum
+group	short_homepage	Home Page
+group	short_mail	Daftar
+group	short_main 	Utama
+group	short_news	Berita
+group	short_patch	Patches
+group	short_pm	Tugas
+group	short_summary	Ringkasan
+group	short_support	Support
+group	short_survey	Survey
+home	highest_ranked_users	Pengguna Peringkat Tertinggi
+home	about_blurb	  SourceForge adalah <B>layanan gratis untuk developer <A href="http://opensource.or.id">Open Source</A></B> yang menawarkan akses mudah ke gudang CVS terbaik, milis, pencarian bug, papan pesan/forum-forum, manajemen tugas, hosting situs, pengarsipan file permanen, backup lengkap, dan semua diatur lewat web.  <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ selengkapnya ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Site Feedback and Partisipasi</B> <P> Untuk dapat menggunakan SourceForge secara maksimal, anda perlu  <A href="/account/register.php"> mendaftarkan diri</A> sebagai pengguna situs.   Ini berarti memperbolehkan anda untuk berpartisipasi penuh dalam semua yang kami tawarkan.  Walaupun tanpa pendaftaran anda dapat menggunakan SourceForge, akan tetapi  tanpa mendaftarkan diri anda tidak dapat berpartisipasi secara penuh. <P> &nbsp; <BR> <B>Mendirikan Proyek Pribadi Anda</B> <P> <A href="/account/register.php">Pendaftaran sebagai pengguna situs</A>, then <A HREF="/account/login.php">Login</A> dan terakhir, <A HREF="/register/">Mendaftarkan Proyek Anda.</A> <P> Terima Kasih... dan selamat bergabung dengan SourceForge.
+frs	latest_file_releases	File Keluaran Terbaru
+menu	login	Login lewat SSL
+menu	logout	Logout
+home	most_active_this_week	Paling Aktif Minggu Ini
+menu	my_personal_page	Halaman Pribadi
+menu	new_project	Pendaftaran Proyek Baru
+menu	new_releases	Keluaran Baru
+menu	new_user	Pengguna Baru dengan SSL
+menu	other_site_mirrors	Mirror Situs
+menu	project_admin	Administrasi Proyek
+group	project_admins	Adminstrator Proyek
+menu	project_help_wanted	Proyek-proyek Perlu Bantuan
+menu	project_summary	Ringkasan Proyek
+group	public_area	Area Publik
+menu	search	Cari
+menu	software_map	Peta Software
+home	sourceforge_statistics	Statistik SourceForge
+menu	top_projects	Proyek-proyek Top
+home	top_project_downloads	Proyek Top Downloads
+conf	content_encoding	iso-8859-1
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	id
+conf	language_id	21

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Italian.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Italian.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Italian.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,82 @@
+#/**
+#  *
+#  * Italian message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Dakkar
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-23  Dakkar
+#	* Initial translation
+#
+menu	account_maintenance	Gestione account
+menu	bookmark_page	Segna pagina
+home	breaking_down_barriers	Abbattere le barriere allo sviluppo Open Source
+menu	change_my_theme	Cambia il tema
+menu	code_snippet_library	Raccolta frammenti di codice
+menu	compile_farm	Compile Farm
+menu	contact_us	Contattaci
+group	developers	Sviluppatori
+group	developer_info	Informazioni sugli Sviluppatori
+menu	discussion_forums	Aree di Discussione
+menu	documentation	Documentazione
+frs	file_download	Scarica
+frs	file_monitor	Controlla
+frs	file_notes	Note
+frs	file_package	Pacchetto
+frs	file_version	Versione
+group	long_bugs	Gestione Bug
+group	long_cvs	Repository CVS
+group	long_docman	Gestione Documentazione
+group	long_forum	Aree di Discussione pubbliche
+group	long_ftp	Spazio FTP anonimo
+group	long_homepage	Home Page del progetto
+group	long_mail	Mailing List
+group	long_news	Ultime notizie
+group	long_patch	Gestione Patch
+group	long_pm	Gestione attivit&agrave;
+group	long_support	Gestione supporto tecnico
+group	long_survey	Sondaggi
+group	short_bugs	Bug
+group	short_cvs	CVS
+group	short_docman	Doc.
+group	short_files	Filesgroup	short_forum	Discussioni
+group	short_homepage	Home Page
+group	short_mail	ML
+group	short_main 	Principale
+group	short_news	Notizie
+group	short_patch	Patch
+group	short_pm	Attivit&agrave;
+group	short_summary	Sommario
+group	short_support	Supporto
+group	short_survey	Sondaggi
+home	highest_ranked_users	I Migliori
+home	about_blurb	 SourceForge &egrave; un <B>servizio gratuito per gli sviluppatori <A href="http://www.opensource.org">Open Source</A></B> che offre un facile accesso ai migliori strumenti per  CVS, mailing list, gestione bug, aree di discussione, gestione attivit&agrave;, pubblicazione su web, archiviazione permanente dei file, backup completi, e amministrazione totalmente via web. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ per saperne di pi&ugrave; ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Partecipate!</B> <P> Per ottenere il massimo da SourceForge, dovete <A href="/account/register.php">registrarvi come utente </A>. Questo vi permetter&agrave; di partecipare appieno a quello che abbiamo da offrirvi. Ovviamente potete visitare il sito senza registrarvi, ma non avrete la possibilit&agrave; di partecipare. <P>  &nbsp; <BR> <B>Avviate il vostro progetto</B> <P> <A href="/account/register.php">Registratevi come utenti</A>, quindi <A HREF="/account/login.php">accedete</A> e finalmente <A HREF="/register/">registrate il vostro progetto.</A>  <P> Grazie... e divertitevi.
+frs	latest_file_releases	Ultime Release
+menu	login	Accesso via SSL
+menu	logout	Fine sessione
+home	most_active_this_week	I pi&ugrave; attivi della settimana
+menu	my_personal_page	La mia pagina personale
+menu	new_project	Registra un nuovo progetto
+menu	new_releases	Nuove Release
+menu	new_user	Nuovo utente
+menu	other_site_mirrors	Mirror di altri siti
+menu	project_admin	Amministrazione Progetto
+group	project_admins	Amministratori di Progetto
+menu	project_help_wanted	Progetti in cerca di aiuto
+menu	project_summary	Sommario del Progetto
+group	public_area	Aree Pubbliche
+menu	search	Ricerca
+menu	software_map	Mappa Programmi
+home	sourceforge_statistics	Statistiche SourceForge
+menu	top_projects	Classifica Progetti
+home	top_project_downloads	Progetti pi&ugrave; scaricati
+conf	content_encoding	iso-8859-1
+conf	language_id	8

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Japanese.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Japanese.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Japanese.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,87 @@
+#/**
+#  *
+#  * Japanese message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Atsushi Kamoshida
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-24  Atsushi Kamoshida
+#	* Initial translation
+# 2000-10-28  Hirotaka Mizutani
+#	* Update
+#
+about_foundries	about_blurb	¥Õ¥¡¥ó¥É¥ê¡¼¤Ë¤Ä¤¤¤Æ
+menu	about_sourceforge	SourceForge¤Ë¤Ä¤¤¤Æ
+menu	account_maintenance	¥¢¥«¥¦¥ó¥È´ÉÍý
+menu	bookmark_page	¥Ö¥Ã¥¯¥Þ¡¼¥¯
+home	breaking_down_barriers	Breaking Down the Barriers to Open Source Development
+menu	change_my_theme	¥Æ¡¼¥Þ¤ÎÊѹ¹
+menu	code_snippet_library	Code Snippet Library
+menu	compile_farm	¥³¥ó¥Ñ¥¤¥ë´Ä¶­
+menu	contact_us	Ï¢ÍíÀè
+group	developers	³«È¯¼Ô
+group	developer_info	³«È¯¼Ô¾ðÊó
+menu	discussion_forums	¥Ç¥£¥¹¥«¥Ã¥·¥ç¥ó¥Õ¥©¡¼¥é¥à
+menu	documentation	¥µ¥¤¥È¥É¥­¥å¥á¥ó¥È
+frs	file_download	¥À¥¦¥ó¥í¡¼¥É
+frs	file_monitor	´Æ»ë
+frs	file_notes	Ãí°Õ
+frs	file_package	¥Ñ¥Ã¥±¡¼¥¸
+frs	file_version	¥Ð¡¼¥¸¥ç¥ó
+group	long_bugs	¥Ð¥°ÄÉÀ×
+group	long_cvs	CVS¥ê¥Ý¥¸¥È¥ê
+group	long_docman	¥É¥­¥å¥á¥ó¥È¥Þ¥Í¡¼¥¸¥ã
+group	long_forum	°ìÈ̸þ¤±¥Õ¥©¡¼¥é¥à
+group	long_ftp	ƿ̾ FTP ¥¹¥Ú¡¼¥¹
+group	long_homepage	¥×¥í¥¸¥§¥¯¥È¥Û¡¼¥à¥Ú¡¼¥¸
+group	long_mail	¥á¡¼¥ê¥ó¥°¥ê¥¹¥È
+group	long_news	ºÇ¿·¥Ë¥å¡¼¥¹
+group	long_patch	¥Ñ¥Ã¥Á¥Þ¥Í¡¼¥¸¥ã
+group	long_pm	¥¿¥¹¥¯¥Þ¥Í¡¼¥¸¥ã
+group	long_support	µ»½Ñ¥µ¥Ý¡¼¥È¥Þ¥Í¡¼¥¸¥ã
+group	long_survey	Ä´ºº
+group	short_bugs	¥Ð¥°
+group	short_cvs	CVS
+group	short_docman	¥É¥­¥å¥á¥ó¥È
+group	short_files	Filesgroup	short_forum	¥Õ¥©¡¼¥é¥à
+group	short_homepage	¥Û¡¼¥à¥Ú¡¼¥¸
+group	short_mail	¥ê¥¹¥È
+group	short_main 	¥á¥¤¥ó
+group	short_news	¥Ë¥å¡¼¥¹
+group	short_patch	¥Ñ¥Ã¥Á
+group	short_pm	¥¿¥¹¥¯
+group	short_summary	¥µ¥Þ¥ê
+group	short_support	¥µ¥Ý¡¼¥È
+group	short_survey	Ä´ºº
+home	highest_ranked_users	¥æ¡¼¥¶ÊÌ¥é¥ó¥­¥ó¥°
+home	about_blurb	 SourceForge¤È¤Ï<a href="http://www.opensource.org/">¥ª¡¼¥×¥ó¥½¡¼¥¹</A>³« ȯ¼Ô¤ËCVS¡¢¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¡¢¥Ð¥°ÄÉÀס¢·Ç¼¨ÈÄ¡¦¥Õ¥©¡¼¥é¥à¡¢¥¿¥¹¥¯´ÉÍý¡¢ ¥Û¥¹¥È¥Û¥¹¥Æ¥£¥ó¥°¡¢±Êµ×Ū¤Ê¥Õ¥¡¥¤¥ë¤ÎÊÝ´É¡¢´°Á´¤Ê¥Ð¥Ã¥¯¥¢¥Ã¥×¤µ¤é¤ËWeb¥Ù¡¼¥¹ ¤ÎÁí¹çŪ¤Ê´ÉÍý¤Ø¤ÎÍưפǺǹâ¤ÊÍøÍѤòÄ󶡤¹¤ë̵ÎÁ¤Î¥µ¡¼¥Ó¥¹¤Ç¤¹¡£ <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ ¾ÜºÙ ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>¥µ¥¤¥È¤Ø¤Î°Õ¸«¤È»²²Ã</B> <P> SourceForge¤òºÇÂç¸Â³èÍѤ¹¤ë¤Ë¤Ï<a href="http://sourceforge.net/account/register.php">¥æ¡¼¥¶ÅÐÏ¿</a>¤¹¤ëɬ Íפ¬¤¢¤ê¤Þ¤¹¡£¤½¤¦¤¹¤ë¤³¤È¤Ë¤è¤ê¤ï¤ì¤ï¤ì¤¬Ä󶡤¹¤ë¤¹¤Ù¤Æ¤Î¥µ¡¼¥Ó¥¹¤Ë»²²Ã ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤â¤Á¤í¤óÅÐÏ¿¤·¤Ê¤¯¤È¤â¥µ¥¤¥È¤ò±ÜÍ÷¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤¹ ¤¬¡¢ÍøÍѤËÀ©¸Â¤¬¤¢¤ê¤Þ¤¹¡£ <P> &nbsp; <BR> <B>¼«Ê¬¤Î¥×¥í¥¸¥§¥¯¥È¤òºî¤ë</B> <P> ¤Þ¤º<a href="http://sourceforge.net/account/register.php">¥æ¡¼¥¶ÅÐÏ¿ </a>¤·¡¢<a href="http://sourceforge.net/account/login.php">¥í¥°¥¤¥ó </a>¤·¤Þ¤¹¡£¤½¤·¤Æ<a href="http://sourceforge.net/register/">¥×¥í¥¸¥§¥¯ ¥È¤òÅÐÏ¿</a>¤·¤Þ¤¹¡£ <P> ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£¤½¤·¤Æ¤³¤Î¥µ¥¤¥È¤Ç¤¼¤Ò³Ú¤·¤ó¤Ç¤¯¤À¤µ¤¤¡£
+frs	latest_file_releases	ºÇ¿·¤Î File ¥ê¥ê¡¼¥¹
+menu	login	SSL·Ðͳ¤Ç¥í¥°¥¤¥ó
+menu	logout	¥í¥°¥¢¥¦¥È
+home	most_active_this_week	ºÇ¶á°ì½µ´Ö¤Ç³èȯ¤Ê¥×¥í¥¸¥§¥¯¥È
+menu	my_personal_page	¼«Ê¬¤Î¥Ú¡¼¥¸
+menu	new_project	¿·µ¬¥×¥í¥¸¥§¥¯¥È¤ÎÅÐÏ¿
+menu	new_releases	¿·µ¬¥ê¥ê¡¼¥¹
+menu	new_user	SSL·Ðͳ¤Ç¿·µ¬¥æ¡¼¥¶ºîÀ®
+menu	other_site_mirrors	¾¤Î¥ß¥é¡¼¥µ¥¤¥È
+menu	project_admin	¥×¥í¥¸¥§¥¯¥È´ÉÍý
+group	project_admins	¥×¥í¥¸¥§¥¯¥È´ÉÍý¼Ô
+menu	project_help_wanted	¥×¥í¥¸¥§¥¯¥È¶¨ÎϼÔÊ罸
+menu	project_summary	¥×¥í¥¸¥§¥¯¥È¥µ¥Þ¥ê
+group	public_area	¸ø³«¥¨¥ê¥¢
+menu	search	¸¡º÷
+menu	software_map	¥½¥Õ¥È¥¦¥§¥¢¥Þ¥Ã¥×
+home	sourceforge_statistics	SourceForgeÅý·×
+menu	top_projects	¥È¥Ã¥×¥×¥í¥¸¥§¥¯¥È
+home	top_project_downloads	¥×¥í¥¸¥§¥¯¥È¥À¥¦¥ó¥í¡¼¥É¿ô
+conf	content_encoding	EUC-JP
+conf	language_code	ja
+conf	language_id	2

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Korean.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Korean.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Korean.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,89 @@
+#/**
+#  *
+#  * Korean message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Kim SeungBaeck <kongsi at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2001-01-15  Kim SeungBaeck  <kongsi at users.sourceforge.net>
+#	* Initial translation
+#
+about_foundries	about_blurb	â¼³ÀÚ¿¡ ´ëÇÏ¿©
+menu	about_sourceforge	SourceForge¿¡ ´ëÇÏ¿©
+menu	account_maintenance	Á¢¼Ó À¯Áö
+menu	bookmark_page	Ã¥°¥ÇÇ
+home	breaking_down_barriers	¿­¸°¼Ò½º °³¹ß·Î À庮À» Çã¹°¾ú½À´Ï´Ù.
+menu	change_my_theme	Å׸¶ º¯°æ
+menu	code_snippet_library	°£´ÜÇÑ ¶óÀ̺귯¸®ÄÚµåÈ­
+menu	compile_farm	ÆíÁýÀÚ ¾ç¼º
+menu	contact_us	SourceForge¿Í ±³Á¦
+group	developers	°³¹ßÀÚ
+group	developer_info	°³¹ßÀÚ Á¤º¸
+menu	discussion_forums	Åä·Ðȸ
+menu	documentation	»çÀÌÆ® ¹®¼­
+frs	file_download	¹Þ±â
+frs	file_monitor	°¨½Ã
+frs	file_notes	ÁÖ¼®
+frs	file_package	²Ù·¯¹Ì
+frs	file_rel_date	³¯Â¥
+frs	file_version	ÆǹøÈ£
+group	long_bugs	¹ú·¹ÀâÀÌ
+group	long_cvs	CVS ÀúÀå¼Ò
+group	long_docman	¹®¼­°ü¸®ÀÚ: ÀϰŸ® ¹®¼­È­
+group	long_forum	¿­¸° Åä·ÐÀå
+group	long_foundries	SourceForge °³¹ß °ø°£
+group	long_ftp	À͸í FTP °ø°£
+group	long_homepage	ȨÆäÀÌÁö
+group	long_mail	¸ÞÀϸµ ¸®½ºÆ®
+group	long_news	ÃÖ±Ù ¼Ò½Ä
+group	long_patch	ÆÐÄ¡ °ü¸®ÀÚ
+group	long_pm	ÀÛ¾÷ °ü¸®ÀÚ
+group	long_support	±â¼úÁö¿ø °ü¸®ÀÚ
+group	long_survey	ÅõÇ¥
+group	short_bugs	¹ú·¹
+group	short_cvs	CVS
+group	short_docman	¹®¼­
+group	short_files	Filesgroup	short_forum	Åä·ÐÀå
+group	short_homepage	ȨÆäÀÌÁö
+group	short_mail	¸ñ·Ï
+group	short_main 	¸ÞÀÎ
+group	short_memberlist	°³¹ßÀÚµé
+group	short_news	»õ¼Ò½Ä
+group	short_patch	ÆÐÄ¡
+group	short_pm	ÀÛ¾÷
+group	short_summary	¿ä¾à
+group	short_support	Áö¿ø
+group	short_survey	ÅõÇ¥
+home	highest_ranked_users	°¡Àå ¸¹Àº Âü¿©ÀÚ ±×·ì
+home	about_blurb	  SourceForge ´Â <B> <A href="http://www.opensource.org">¿­¸° ¼Ò½º</A> °³¹ßÀÚ</B>¿¡°Ô ½±°Ô Á¢±ÙÇÒ¼ö ÀÖ´Â CVS,  ¸ÞÀϸµ¸®½ºÆ®, ¹ú·¹ÀâÀÌ, °Ô½ÃÆÇ/Åä·ÐÀå, ÀÛ¾÷°ü¸®, È£½ºÆÃ,¿µ±¸ÀûÀÎ È­ÀÏ ÀúÀå, ¹é¾÷µî  À¥±â¹Ý °ü¸®µîÀ» ¹«·á·Î Áö¿ø ÇÕ´Ï´Ù.  <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ ´õ ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ ÀæÀºÁú´ä ]</font></A> <BR> &nbsp; <P> <B>»çÀÌÆ®ÀÇ ÀÇ°ß¿Í Âü¿©</B> <P> SourceForgeÀÇ Áú¼­¸¦ À§Çؼ­, ´ç½ÅÀÌ ¿øÇÏÇÏ½Ã¸é  ¸ÕÀú <A href="/account/register.php">»ç¿ëÀÚ·Î µî·Ï ÇϽʽÿÀ</A>.  ÀÌ°ÍÀ¸·Î ´ç½ÅÀº ¿ì¸®¿Í ÇÔ²²ÇÏ°Ô µÉ°ÍÀ̸ç, ¿ì¸®°¡ ÇÒ ¼ö ÀÖ´Â ¸ðµç Áö¿ø ÇÒ°ÍÀÔ´Ï´Ù. ´ç½ÅÀº µî·ÏÇÏÁö¾Ê°íµµ º¼¼ö ÀÖÀ¸³ª, ¸ðµÎ »ç¿ë ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. <P> &nbsp; <BR> <B>´ç½Å¸¸ÀÇ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µå¼¼¿ä</B> <P> <A href="/account/register.php">»çÀÌÆ®ÀÇ »ç¿ëÀÚ·Î µî·ÏÇϽðí</A>,  <A HREF="/account/login.php">Á¢¼Ó</A>ÇϽøé, <A HREF="/register/">´ç½ÅÀÇ ÇÁ·ÎÁ§Æ®¸¦ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù.</A> °¨»çÇÕ´Ï´Ù... Áñ°Å¿î ½Ã°£ µÇ½Ê½Ã¿À.
+frs	latest_file_releases	¸¶Áö¸· È­ÀÏ ¹ßÇ¥
+menu	login	SSLÀ» »ç¿ëÇÑ Á¢¼Ó
+menu	logout	Á¢¼ÓÇØÁ¦
+home	most_active_this_week	±ÝÁÖ °¡ÀåÈ°¹ßÇÑ ÇÁ·ÎÁ§Æ®
+menu	my_personal_page	°³ÀÎ ÆäÀÌÁö
+menu	new_project	»õ ÀϰŸ® µî·Ï
+menu	new_releases	»õ·Î¿î ¹èÆ÷ÆÇ
+menu	new_user	SSLÀ» »ç¿ëÇÑ »õ »ç¿ëÀÚ
+menu	other_site_mirrors	´Ù¸¥ ¹Ì·¯ »çÀÌÆ®
+menu	project_admin	ÇÁ·ÎÁ§Æ® °ü¸®ÀÚ
+group	project_admins	ÀϰŸ® °ü¸®ÀÚ
+menu	project_help_wanted	µµ¿òÀ» ¿øÇÏ´Â ÇÁ·ÎÁ§Æ®
+menu	project_summary	ÀϰŸ® ¿ä¾à
+group	public_area	¿­¸°°ø°£
+menu	search	°Ë»ö
+menu	software_map	ÀÀ¿ëÇÁ·Î±×·¥ ¸ñ·Ï
+home	sourceforge_statistics	SourceForge Åë°è
+menu	top_projects	»óÀ§ ÇÁ·ÎÁ§Æ®
+home	top_project_downloads	°¡Àå ¸¹ÀÌ ¹ÞÀº ±×·ì
+conf	content_encoding	EUC-KR
+conf	default_font	gulim,verdana,arial,helvetica,sans-serif
+conf	language_code	ko
+conf	language_id	22

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Norwegian.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Norwegian.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Norwegian.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,82 @@
+#/**
+#  *
+#  * Norwegian message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Ragnvald Larsen <ragnvald at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-26  Ragnvald Larsen  <ragnvald at users.sourceforge.net>
+#	* Initial translation. Norsk  bokmaal oversettelse.
+#
+menu	account_maintenance	Vedlikehold av brukerinformasjon
+menu	bookmark_page	Bokmerke
+home	breaking_down_barriers	Gj&oslash;r det lettere &aring; utvikle Open Source programvare
+menu	change_my_theme	Nytt webtema
+menu	code_snippet_library	Kodebibliotek
+menu	compile_farm	Komplieringsverksted
+menu	contact_us	Kontakt oss
+group	developers	Utvikler
+group	developer_info	Utviklerinformasjon
+menu	discussion_forums	Diskusjonsfora
+menu	documentation	Dokumentasjon
+frs	file_download	Last ned
+frs	file_monitor	Overv&aring;k
+frs	file_notes	Notater
+frs	file_package	Pakke
+frs	file_version	Versjon
+group	long_bugs	Feilretting
+group	long_cvs	CVS-repository
+group	long_docman	Administrere prosjektdokumentsjon
+group	long_forum	&Aring;pne fora
+group	long_ftp	Anonym FTP-tilgang
+group	long_homepage	Prosjektside
+group	long_mail	Epostlister
+group	long_news	Siste nyheter
+group	long_patch	Administrere retting
+group	long_pm	Prosjektstyring
+group	long_support	Administrere brukerst&oslash;tte
+group	long_survey	Sp&oslash;rreunders&oslash;kelser
+group	short_bugs	Feil
+group	short_cvs	CVS
+group	short_docman	Dokumentasjon
+group	short_files	Filesgroup	short_forum	Fora
+group	short_homepage	Hjemmeside
+group	short_mail	Epostlister
+group	short_main 	Topp
+group	short_news	Nyheter
+group	short_patch	Rettinger
+group	short_pm	Oppgaver
+group	short_summary	Overblikk
+group	short_support	Brukerst&oslash;tte
+group	short_survey	Sp&oslash;rreunders&oslash;kelser
+home	highest_ranked_users	H&oslash;yest rangerte brukere
+home	about_blurb	  SourceForge er en <B>fri tjeneste som tilbys utviklere av <A href="http://www.opensource.org">Open Source</A>-programvare</B>. Her f&aring;r du enkel tilgang til det beste innen CVS, epostlister, feilkontroll, meldingsforum, prosjektstyring, webhosting, filarkiver, backup-l&oslash;sninger og web-basert administrering. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ mer ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Tilbakemelding og deltakelse</B> <P> For &aring; f&aring; mest igjen fra Sourceforge m&aring; du <A href="/account/register.php">registrere deg som bruker hos oss</A>. Da kan du ta del i alt vi kan tilby. Du kan selvsagt bla deg gjennom sidene uten &aring; v&aelig;re registrert, men du vil ikke kunne delta p&aring; linje med registrerte brukere. <P> &nbsp; <BR> <B>Sett opp dine egne prosjekter</B> <P> <A href="/account/register.php">Registrer deg som bruker</A>, then <A HREF="/account/login.php">Login</A> til slutt, <A HREF="/register/">Registrer ditt eget prosjekt.</A> <P> Takk... og velkommen som bruker
+frs	latest_file_releases	Nyeste filutgivelser
+menu	login	Logg inn via SSL
+menu	logout	Logg av
+home	most_active_this_week	Mest aktive denne uken
+menu	my_personal_page	Min side
+menu	new_project	Meld inn et nytt prosjekt
+menu	new_releases	Nye utgaver
+menu	new_user	Ny bruker via SSL
+menu	other_site_mirrors	Speil
+menu	project_admin	Prosjektadministrator
+group	project_admins	Prosjektadministratorer
+menu	project_help_wanted	Prosjekthjelp s&oslash;kes
+menu	project_summary	Prosjektoversikt
+group	public_area	Fellesområde
+menu	search	S&oslash;k
+menu	software_map	Programvareoversikt
+home	sourceforge_statistics	SourceForge statistikk
+menu	top_projects	Topp-prosjekter
+home	top_project_downloads	Flest nedlastinger
+conf	content_encoding	iso-8859-1
+conf	language_id	9

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Polish.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Polish.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Polish.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,87 @@
+#/**
+#  *
+#  * Polish message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Max Gilead <gilead at linart.pl>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-06  Max Gilead  <gilead at linart.pl>
+#	* Initial translation
+# 2000-10-16  Max Gilead  <gilead at linart.pl>
+#	* Better translation, added new strings
+#
+about_foundries	about_blurb	O dzia³ach
+menu	about_sourceforge	About SourceForge
+menu	account_maintenance	Zarz±dzanie kontem
+menu	bookmark_page	Zrób zak³adkê
+home	breaking_down_barriers	Prze³amujemy bariery w rozwoju oprogramowania Open Source
+menu	change_my_theme	Zmieñ wygl±d
+menu	code_snippet_library	Teczka wycinków kodu
+menu	compile_farm	Kompilatory
+menu	contact_us	Kontakt z nami
+group	developers	Programi¶ci
+group	developer_info	Informacja o programi¶cie
+menu	discussion_forums	Forum dyskusyjne
+menu	documentation	Dokumentacja serwera
+frs	file_download	Download
+frs	file_monitor	Monitor
+frs	file_notes	Notatki
+frs	file_package	Pakiet
+frs	file_version	Wersja
+group	long_bugs	¶ledzenie pluskiew
+group	long_cvs	Repozytorium CVS
+group	long_docman	DocManager: dokumentacja projektu
+group	long_forum	Forum publiczne
+group	long_ftp	Anonimowy FTP
+group	long_homepage	Strona domowa projektu
+group	long_mail	Listy dyskusyjne
+group	long_news	Naj¶wie¿sze wie¶ci
+group	long_patch	Centrum ³at
+group	long_pm	Centrum zadañ
+group	long_support	Centrum pomocy technicznej
+group	long_survey	Sonda¿e
+group	short_bugs	Pluskwy
+group	short_cvs	CVS
+group	short_docman	Dokumentacja
+group	short_files	Filesgroup	short_forum	Forum
+group	short_homepage	Strona domowa
+group	short_mail	Listy dyskusyjne
+group	short_main 	G³ówna
+group	short_news	Nowo¶ci
+group	short_patch	£aty
+group	short_pm	Zadania
+group	short_summary	Podsumowanie
+group	short_support	Wsparcie
+group	short_survey	Sonda¿e
+home	highest_ranked_users	Najwy¿ej oceniani u¿ytkownicy
+home	about_blurb	  SourceForge to <B>wolny serwis dla programistów  <A href="http://www.opensource.org">Open Source</A></B> oferuj±cy ³atwy dostêp to najlepszego CVS, list dyskusyjnych, ¶ledzenia b³êdów, grup i forum dyskusyjnych, zarz±dzania zadaniami, hostingu stron, sta³ego archiwizowania plików, pe³nego backupu; zarz±dzni ca³kowicie z poziomu WWW. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ wiêcej ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Opinie i wspó³praca nad serwisem</B> <P> Aby w pe³ni skorzystaæ z SourceForge, powiniene¶ <A href="/account/register.php">zarejestrowaæ siê jako u¿ytkownik serwisu</A>. Pozwoli Ci to korzystaæ ze wszystkiego, co mamy do zaoferowania. Oczywi¶cie mo¿esz korzystaæ z serwisu tak¿e bez rejestracji, jednak pewne opcje bêd± niedostêpne. <P> &nbsp; <BR> <B>Za³ó¿ Swój W³asny Projekt</B> <P> <A href="/account/register.php">Zarejestruj siê jako u¿ytkownik serwisu</A>, nastêpnie <A HREF="/account/login.php">zaloguj siê</A> i <A HREF="/register/">Za³ó¿ swój w³asny projekt.</A> <P> Dziêkujemy. Przyjemnego korzystania z serwisu.
+frs	latest_file_releases	Najnowsze pliki
+menu	login	Zaloguj przez SSL
+menu	logout	Wyloguj
+home	most_active_this_week	Najbardziej aktywny w tym tygodniu
+menu	my_personal_page	Moja strona osobista
+menu	new_project	Zarejestruj nowy projekt
+menu	new_releases	Nowo¶ci
+menu	new_user	Nowy u¿ytkownik przez SSL
+menu	other_site_mirrors	Inne mirrory
+menu	project_admin	Admin projektu
+group	project_admins	Admini projektu
+menu	project_help_wanted	Potrzeba pomoc do projektu
+menu	project_summary	Podsumowanie projektu
+group	public_area	Obszar publiczny
+menu	search	Szukaj
+menu	software_map	Mapa projektów
+home	sourceforge_statistics	Statystyki SourceForge
+menu	top_projects	Najlepsze projekty
+home	top_project_downloads	Najczê¶ciej pobierane projekty
+conf	content_encoding	iso-8859-2
+conf	language_code	pl
+conf	language_id	15

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Portuguese.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Portuguese.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Portuguese.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,90 @@
+#/**
+#  *
+#  * Portuguese message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Doomed <doomed at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2001-02-25  Doomed  <doomed at users.sourceforge.net>
+#	* Initial translation
+# 2001-02-25  Nuno Amaral  <namaral at users.sourceforge.net>
+#	* Contributed some strings
+#
+about_foundries	about_blurb	Sobre as Foundries
+menu	about_sourceforge	Sobre a SourceForge
+menu	account_maintenance	Manutenção da Conta
+menu	bookmark_page	Página de Bookmarks
+home	breaking_down_barriers	Quebrando as Barreiras contra o Desenvolvimento do Open Source
+menu	change_my_theme	Mudar Tema
+menu	code_snippet_library	Biblioteca de Código
+menu	compile_farm	Colecção de Compiladores
+menu	contact_us	Contacte a SourceForge
+group	developers	Programadores
+group	developer_info	Informação s/ Programador
+menu	discussion_forums	Fóruns de Discussão
+menu	documentation	Documentação do Site
+frs	file_download	Download
+frs	file_monitor	Monitor
+frs	file_notes	Observações
+frs	file_package	Pacotes
+frs	file_rel_date	Data
+frs	file_version	Versão
+group	long_bugs	Procura de Bugs
+group	long_cvs	Arquivo do CVS
+group	long_docman	Gestor da Documentação do Projecto
+group	long_forum	Fóruns Públicos
+group	long_foundries	Foundries de Desenvolvimento da SourceForge
+group	long_ftp	Espaço p/ FTP Anónimo
+group	long_homepage	Home Page do Projecto
+group	long_mail	Mailing Lists
+group	long_news	Notícias Mais Recentes
+group	long_patch	Gestor dos Patches
+group	long_pm	Gestor de Tarefas
+group	long_support	Gestor do Suporte Técnico
+group	long_survey	Inquéritos
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Documentação
+group	short_files	Filesgroup	short_forum	Fóruns
+group	short_homepage	Página de Entrada
+group	short_mail	Listas
+group	short_main 	Principal
+group	short_memberlist	Programadores
+group	short_news	Notícias
+group	short_patch	Patches
+group	short_pm	Tarefas
+group	short_summary	Resumo
+group	short_support	Suporte
+group	short_survey	Inquéritos
+home	highest_ranked_users	Utilizadores mais Destacados
+home	about_blurb	  A SourceForge é um <B>serviço gratuito para os programadores em <A href="http://www.opensource.org">Open Source</A></B> que oferece fácil acesso ao que melhor se faz em CVS, Mailing Lists, Procura de bugs, Fóruns, Administração de Tarefas, Alojamento de Sites, Arquivo permanente de Ficheiros, Backups completos e ainda Administração dos Projectos totalmente baseada numa interface web. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ mais informação ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Contacto e Participação no Site</B> <P> De forma a obter o máximo da SourceForge, vai precisar de se <A href="/account/register.php">registar como utilizador do site</A>. Isto permitirá que participe em todos os serviços que temos disponíveis. Pode obviamente visitar o site sem se registar mas não terá acesso a uma participação completa. <P> &nbsp;  <BR> <B>Crie o Seu Próprio Projecto</B> <P> <A href="/account/register.php">Registe-se como utilizador do site</A>, faça o respectivo <A HREF="/account/login.php">Login</A> e por fim, <A HREF="/register/">Registe o Seu Projecto.</A>  <P> Obrigado... e tire bom partido do site.
+frs	latest_file_releases	Lançamentos Mais Recentes
+menu	login	Login por SSL
+menu	logout	Logout
+home	most_active_this_week	O Mais Activo nesta Semana
+menu	my_personal_page	Página Pessoal
+menu	new_project	Criar um Projecto Novo
+menu	new_releases	Novos Lançamentos
+menu	new_user	Utilizador Novo por SSL
+menu	other_site_mirrors	Outros Mirrors
+menu	project_admin	Administração do Projecto
+group	project_admins	Administradores do Projecto
+menu	project_help_wanted	Projectos que Precisam de Ajuda
+menu	project_summary	Resumo do Projecto
+group	public_area	Áreas Públicas
+menu	search	Procurar
+menu	software_map	Listagem do Software
+home	sourceforge_statistics	Estatísticas da SourceForge
+menu	top_projects	Projectos Principais
+home	top_project_downloads	Projectos com mais Downloads
+conf	content_encoding	iso-8859-1
+conf	language_code	pt
+conf	language_id	18

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/PortugueseBrazillian.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/PortugueseBrazillian.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/PortugueseBrazillian.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,89 @@
+#/**
+#  *
+#  * Portuguese Brazillian message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id: PortugueseBrazillian.tab,v 1.2 2001/06/14 17:51:56 pfalcon Exp $
+#  * @author Vilson Cristiano G¤rtner <vgartner at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-??  Vilson Cristiano G¤rtner  <vgartner at users.sourceforge.net>
+#	* Initial translation
+# 2001-03-26  Vilson Cristiano G¤rtner  <vgartner at users.sourceforge.net>
+#	* Updates
+#
+about_foundries	about_blurb	Sobre as Foundries
+menu	about_sourceforge	Sobre o SourceForge
+menu	account_maintenance	Manutenção da Conta
+menu	bookmark_page	Adicionar aos Favoritos
+home	breaking_down_barriers	Quebrando as Barreiras para o Desenvolvimento em Código Aberto
+menu	change_my_theme	Mudar Meu Tema
+menu	code_snippet_library	Biblioteca de Código
+menu	compile_farm	Compilação de Programas
+menu	contact_us	Entre em Contato
+group	developers	Desenvolvedores
+group	developer_info	Info Desenvolvedor
+menu	discussion_forums	Fórums de Discussão
+menu	documentation	Documentação do Site
+frs	file_download	Download
+frs	file_monitor	Monitorar
+frs	file_notes	Notas
+frs	file_package	Pacote
+frs	file_rel_date	Data
+frs	file_version	Versão
+group	long_bugs	Mapeamento de Bugs
+group	long_cvs	Repositório CVS
+group	long_docman	DocManager: Documentação do Projeto
+group	long_forum	Fórums Públicos
+group	long_foundries	Foundries de Desenvolvimento do SourceForge
+group	long_ftp	Espaço de FTP Anônimo
+group	long_homepage	Home Page do Projeto
+group	long_mail	Mailing Lists
+group	long_news	Últimas Notícias
+group	long_patch	Gerenciador de Alterações
+group	long_pm	Gerenciador de Tarefas
+group	long_support	Gerenciador de Suporte
+group	long_survey	Pesquisas
+group	short_bugs	Bugs
+group	short_cvs	CVS
+group	short_docman	Documentação
+group	short_files	Filesgroup	short_forum	Fórums
+group	short_homepage	Home Page
+group	short_mail	Listas
+group	short_main 	Principal
+group	short_memberlist	Membros
+group	short_news	Notícias
+group	short_patch	Alterações
+group	short_pm	Tarefas
+group	short_summary	Sumário
+group	short_support	Suporte
+group	short_survey	Pesquisas
+home	highest_ranked_users	Usuários Mais Pontuados
+home	about_blurb	  SourceForge é um <B>serviço gratuido para desenvolvedores em <A href="http://www.opensource.org">Código Aberto</A> </B> oferecendo fácil acesso ao que há de melhor em CVS, listas, controle de bugs, quadro de mensagens/fórums, gerenciador de tarefas, hospedagem, arquivamento permanente de arquivos, backups completos, e administração totalmente baseado na web.  <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ mais ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>Conteúdo do Site e Participação</B> <P> Para tirar o máximo proveito do SourceForge, você deve se  <A href="/account/register.php">registrar como um usuário do site</A>.  Isso permitirá que você participe plenamente em tudo o que temos a oferecer.  É claro que você pode ver o conteúdo do site sem se registrar, mas não terá accesso para participar plenamente. <P> &nbsp; <BR> <B>Registre seu próprio Projeto</B> <P> <A href="/account/register.php">Registre-se como um usuário do site</A>, em seguida efetue <A HREF="/account/login.php">Login</A> e finalmente, <A HREF="/register/">Registre seu Projeto.</A> <P> Obrigado... e aproveite o site.
+frs	latest_file_releases	Últimos Arquivos Enviados
+menu	login	Login via SSL
+menu	logout	Logout
+home	most_active_this_week	Mais Ativo da Semana
+menu	my_personal_page	Minha Página Pessoal
+menu	new_project	Registrar Novo Projeto
+menu	new_releases	Novas Atualizações
+menu	new_user	Novo Usuário via SSL
+menu	other_site_mirrors	Outros Mirrors
+menu	project_admin	Administração do Projeto
+group	project_admins	Administradores
+menu	project_help_wanted	Projetos que Precisam de Ajuda
+menu	project_summary	Sumário do Projeto
+group	public_area	Áreas Públicas
+menu	search	Procurar
+menu	software_map	Mapa dos Softwares
+home	sourceforge_statistics	Estatísticas do SourceForge
+menu	top_projects	Principais Projetos
+home	top_project_downloads	Projetos Mais Baixados
+conf	language_code	pt
+conf	language_id	16

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Russian.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Russian.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Russian.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,90 @@
+#/**
+#  *
+#  * Russian message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Paul Sokolovsky <pfalcon at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-08  Paul Sokolovsky  <pfalcon at users.sourceforge.net>
+#	* Initial translation
+#
+about_foundries	about_blurb	Î öåõàõ SourceForge
+menu	about_sourceforge	Î SourceForge
+menu	account_maintenance	Ìîè íàñòðîéêè
+menu	bookmark_page	Ïîìåòèòü òåê. ñòðàíèöó çàêëàäêîé
+home	breaking_down_barriers	Ïðåîäîëåâàÿ áàðüåðû íà ïóòè ðàçðàáîòêè ñ îòêðûòûì èñõîäíûì êîäîì
+menu	change_my_theme	Èçìåíèòü web-òåìó
+menu	code_snippet_library	Áèáèîòåêà Code Snippet'îâ
+menu	compile_farm	Ôàáðèêà êîìïèëÿöèè
+menu	contact_us	Îáðàòíàÿ ñâÿçü
+group	developers	Ðàçðàáîò÷èêè
+group	developer_info	Ó÷àñòíèêè ïðîåêòà
+menu	discussion_forums	Äèñêóññèîííûå ôîðóìû
+menu	documentation	Äîêóìåíòàöèÿ ñàéòà
+frs	file_download	Ñêà÷àòü
+frs	file_monitor	Ñëåäèòü
+frs	file_notes	Èíôîðìàöèÿ
+frs	file_package	Ìîäóëü
+frs	file_version	Âåðñèÿ
+group	long_bugs	Ìåíåäæåð îøèáîê
+group	long_cvs	CVS ðåïîçèòîðèé
+group	long_docman	Ìåíåäæåð äîêóìåíòàöèè
+group	long_forum	Îáùåäîñòóïíûå ôîðóìû
+group	long_ftp	Àíîíèìíûé FTP ïðîåêòà
+group	long_homepage	Äîìàøíÿÿ ñòðàíèöà ïðîåêòà
+group	long_mail	Ñïèñêè ðàññûëêè
+group	long_news	Íîâîñòè
+group	long_patch	Ìåíåäæåð ïàò÷åé (èñïðàâëåíèé)
+group	long_pm	Çàäà÷è ïðîåêòà
+group	long_support	Ìåíåäæåð òåõ. ïîääåðæêè
+group	long_survey	Îïðîñû
+group	short_admin	Àäìèí
+group	short_bugs	Îøèáêè
+group	short_cvs	CVS
+group	short_docman	Äîêóìåíòàöèÿ
+group	short_files	Ôàéëû
+group	short_forum	Ôîðóìû
+group	short_homepage	Äîì.ñòðàíèöà
+group	short_mail	Ñï.ðàññûëêè
+group	short_main 	Main
+group	short_memberlist	Ðàçðàáîò÷èêè
+group	short_news	Íîâîñòè
+group	short_patch	수֏
+group	short_pm	Çàäà÷è
+group	short_summary	Ðåçþìå
+group	short_support	Ïîääåðæêà
+group	short_survey	Îïðîñû
+group	short_tracker	Óíèâ.Òðåêåð
+home	highest_ranked_users	Ïîëüçîâàòåëè ñ âûñîêèì ðåéòèíãîì
+home	about_blurb	  SourceForge - <B>ñâîáîäíûé è áåñïëàòíûé ñåðâèñ äëÿ ðàçðàáîò÷èêîâ, ðàáîòàþùèõ ïî ïðèíöèïó Îòêðûòîãî Èñõîäíîãî Êîäà/Íàïîëíåíèÿ (<A href="http://www.opensource.org">Open Source</A>)</B> è ïðåäëàãàþùèé áûñòðûé è ëåãêèé äîñòóï ê òàêèì ñåðâèñàì, êàê CVS (ñèñòåìà óïðàâëåíèÿ âåðñèÿìè ôàéëîâ), ñïècêè ðàññûëêè, ñèñòåìà ðåãèñòðàöèè îøèáîê, äîñêè ñîîáùåíèé è ôîðóìû, ìåíåäæåð ïðîåêòîâ, web-õîñòèíã, ïîñòîÿííîå ôàéëîâîå õðàíèëèùå, àâòîìàòè÷åñêîå ðåçåðâíîå êîïèðîâàíèå - âñå âìåñòå óïðàâëÿåìîå ÷åðåç Web.<br> <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[&nbsp;Ïîäðîáíåå&nbsp;(ïî-àíãëèéñêè)&nbsp;]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[&nbsp;FAQ&nbsp;]</font></A> <BR> &nbsp; <P> <B>Èñïîëüçîâàíèå ñåðâèñîâ è ó÷àñòèå â ïðîåêòàõ</B> <P> Äëÿ òîãî, ÷òîáû ïîëó÷èòü äîñòóï êî âñåìó ìíîãîîáðàçèþ ñåðâèñîâ, ïðåäëàãàåìûõ íà SourceForge, âàì íóæíî  <A href="/account/register.php">çàðåãèñòðèðîâàòüñÿ â êà÷åñòâå ïîëüçîâàòåëÿ ñàéòà</A>. Êîíå÷íî æå, âû ìîæåòå ïóòåøåñòâîâàòü ïî ñàéòó áåç ðåãèñòðàöèè, íî âû íå áóäåòå èìåòü äîñòóï êî ìíîãèì âîçìîæíîñòÿì. <P> &nbsp; <BR> <B>Ñîçäàíèå ñîáñòâåííîãî ïðîåêòà</B> <P> <A href="/account/register.php">Çàðåãèñòðèðóéòåñü êàê ïîëüçîâàòåëü ñàéòà</A>, <A HREF="/account/login.php">âîéäèòå â ñèñòåìó</A> è íàêîíåö, <A HREF="/register/">çàðåãèñòðèðóéòå âàø ïðîåêò</A>. <P> Ñïàñèáî çà âûáîð SourceForge... È ìû æåëàåì âàì ïðèÿòíîãî è ïîëåçíîãî âðåìÿïðîâîæäåíèÿ!
+frs	latest_file_releases	Ïîñëåäíèå ôàéë-ðåëèçû
+menu	login	Ëîãèí (÷/ç çàùèùåííîå ñîåäèíåíèå)
+menu	logout	Âûõîä
+home	most_active_this_week	Íàèáîëåå àêòèâíûå çà ýòó íåäåëþ
+menu	my_personal_page	Ìîÿ ïåðñîíàëüíàÿ ñòðàíèöà
+menu	new_project	Çàðåãèñòðèðîâàòü ïðîåêò
+menu	new_releases	Ïîñëåäíèå ðåëèçû
+menu	new_user	Íîâûé ïîëüçîâàòåëü
+menu	other_site_mirrors	Çåðêàëà äðóãèõ ñàéòîâ
+menu	project_admin	Àäìèíèñòðèðîâàíèå ïðîåêòà
+group	project_admins	Àäìèíèñòðàòîðû
+menu	project_help_wanted	Ïðîåêòû, íóæäàþùèåñÿ â ïîìîùè
+menu	project_summary	Áàçà ïðîåêòà
+group	public_area	Ñåðâèñû ïðîåêòà
+menu	search	Ïîèñê
+menu	site_status	Ñòàòóñ Ñàéòà
+menu	software_map	Êàðòà ïðîåêòîâ
+home	sourceforge_statistics	Ñòàòèñòèêà SourceForge
+menu	top_projects	Òîï-ïðîåêòû
+home	top_project_downloads	Íàèáîëåå çàãðóæàåìûå ïðîåêòû
+conf	content_encoding	windows-1251
+conf	language_code	ru
+conf	language_id	17

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/SimplifiedChinese.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/SimplifiedChinese.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/SimplifiedChinese.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,95 @@
+#/**
+#  *
+#  * Simplified Chinese message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Hunte Swee <hunte at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-11-11  Hunte Swee <hunte at users.sourceforge.net>
+#	* Translated from the Chinese.class(Big5)
+# 2001-02-20  Hunte Swee <hunte at users.sourceforge.net>
+#	* Change the font to BaseLanguage default
+#	* Change the language code from zh-CN to zh-cn
+#	* Add some new variables that BaseLanguage added
+#
+about_foundries	about_blurb	¹ØÓÚ Foundries
+menu	about_sourceforge	¹ØÓÚ SourceForge
+menu	account_maintenance	ÕʺÅά»¤
+menu	bookmark_page	ÊéÇ©
+home	breaking_down_barriers	Ϊ¿ª·ÅÔ´ÂëµÄ·¢Õ¹¿ª±ÙÒ»Ìõ̹;
+menu	change_my_theme	¸ü»»Íâ¹Û
+menu	code_snippet_library	´úÂëƬ¶Ï
+menu	compile_farm	±àÒ빤³§
+menu	contact_us	ÁªÏµÎÒÃÇ
+group	developers	¿ª·¢Õß
+group	developer_info	¿ª·¢ÕßÐÅÏ¢
+menu	discussion_forums	ÂÛ̳
+menu	documentation	Îĵµ
+frs	file_download	ÏÂÔØ
+frs	file_monitor	¸ú×Ù
+frs	file_notes	±¸×¢
+frs	file_package	Èí¼þ°ü
+frs	file_rel_date	ÈÕÆÚ
+frs	file_version	°æ±¾
+group	long_bugs	BUG¸ú×Ù
+group	long_cvs	CVS²Ö¿â
+group	long_docman	ÏîÄ¿Îĵµ
+group	long_forum	¹«¹²ÂÛ̳
+group	long_ftp	ÄäÃûFTP
+group	long_homepage	ÏîÄ¿Ê×Ò³
+group	long_mail	ÓʼþÁбí
+group	long_news	×îÐÂÏûÏ¢
+group	long_patch	²¹¶¡¹ÜÀí
+group	long_pm	ÈÎÎñ¹ÜÀí
+group	long_support	¼¼ÊõÖ§³Ö
+group	long_survey	µ÷²é
+group	short_admin	¹ÜÀí
+group	short_bugs	BUG
+group	short_cvs	CVS
+group	short_docman	Îĵµ
+group	short_files	Filesgroup	short_forum	ÂÛ̳
+group	short_homepage	Ê×Ò³
+group	short_mail	µç×ÓÓʼþ
+group	short_main 	Ö÷Òª
+group	short_memberlist	¿ª·¢Õß
+group	short_news	ÐÂÎÅ
+group	short_patch	²¹¶¡
+group	short_pm	ÈÎÎñ
+group	short_summary	ÕªÒª
+group	short_support	Ö§³Ö
+group	short_survey	µ÷²é
+group	short_tracker	¸ú×Ù
+home	highest_ranked_users	Óû§ÆÀ¼ÛÅÅÐаñ
+home	about_blurb	 SourceForgeΪ<b><a href="http://www.opensource.org">¿ª·ÅÔ´´úÂëÈí¼þ</a>¿ª·¢ÕßÌṩȫ·½ÃæµÄÃâ·Ñ·þÎñ</b>£¬°üÀ¨CVS²Ö¿â, ÓʼþÁбí, BUG¸ú×Ù, ÔÚÏßÂÛ̳, ÈÎÎñ¹ÜÀí, ÍøÕ¾¿Õ¼ä, ÏîÄ¿´æ´¢¼°ÍêÕûµÄ±¸·Ý, ²¢ÇÒÍêÈ«ÊÇͨ¹ýWEB·½Ê½À´¹ÜÀíµÄ¡£ <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ ¸ü¶à ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ ³£¼ûÎÊÌâ ]</font></A> <BR> &nbsp; <P> <B>ÇëÁ¢¼´¼ÓÈ룬²¢Ìá³öÄúµÄ±¦¹óÒâ¼û</B> <P> ΪÁ˳ä·ÖÀûÓÃSourceForgeËùÌṩµÄ·þÎñ, <A href="/account/register.php">ÇëÁ¢¼´×¢²á³ÉΪ ±¾Õ¾Óû§</A>£¬ÕâÑùÄú¾Í¿ÉÒÔ²ÎÓë±¾Õ¾µÄ¸÷Ïî»î¶¯¡£ÈôÄúÉв»ÊÇ×¢²áÓû§, ÈÔÄÜä¯ÀÀ±¾Õ¾, µ«ÎÞȨ²ÎÓë±¾Õ¾µÄ»î¶¯¡£ <P> &nbsp; <BR> <B>¿ªÊ¼Äú×Ô¼ºµÄÏîÄ¿</B> <P> <A href="/account/register.php">ÏÈ×¢²á³ÉΪ±¾Õ¾Óû§</A>, È»ºó<A HREF="/account/login.php">µÇ¼</A>×îºó<A HREF="/register/">¿ªÊ¼ÄúµÄÏîÄ¿¡£</A> <P> лл²ÎÓ룬Çë³ä·ÖÏíÊܱ¾Õ¾ÌṩµÄ·þÎñ°É£¡
+frs	latest_file_releases	×îз¢²¼ÏîÄ¿
+menu	login	ͨ¹ýSSLµÇ¼
+menu	logout	Í˳öµÇ¼
+home	most_active_this_week	±¾ÖܻÁ¦×îÇ¿ÅÅÐаñ
+menu	my_personal_page	ÎÒµÄÊ×Ò³
+menu	new_project	µÇ¼ÇÐÂÏîÄ¿
+menu	new_releases	з¢²¼Èí¼þ
+menu	new_user	ÐÂÓû§Í¨¹ýSSL×¢²á
+menu	other_site_mirrors	ÆäËüÍøÕ¾¾µÏñ
+menu	project_admin	ÏîĿά»¤
+group	project_admins	ÏîÄ¿¹ÜÀíÔ±
+menu	project_help_wanted	Ñ°ÇóЭÖú
+menu	project_summary	ÏîÄ¿ÕªÒª
+group	public_area	¹«¹²ÇøÓò
+menu	search	²éÕÒ
+menu	site_status	Õ¾µã״̬
+menu	software_map	Èí¼þ·ÖÀà±í
+home	sourceforge_statistics	SourceForgeͳ¼Æ×ÊÁÏ
+menu	top_projects	ÈȵãÏîÄ¿
+home	top_project_downloads	ÏîÄ¿ÏÂÔØÅÅÐаñ
+conf	content_encoding	gb2312
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	zh-cn
+conf	language_id	23

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Spanish.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Spanish.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Spanish.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,80 @@
+#/**
+#  *
+#  * Spanish message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Enric Mart­nez <exter at users.sourceforge.net> 
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-23  Enric Mart­nez  <exter at users.sourceforge.net>
+#	* Initial translation
+#
+menu	account_maintenance	Mantenimiento de Cuenta
+menu	bookmark_page	Marcar Página
+home	breaking_down_barriers	Derribando las Barreras al Desarrollo de Código Abierto
+menu	change_my_theme	Cambiar Mi Tema
+menu	code_snippet_library	Biblioteca de Recortes de Código
+menu	compile_farm	Granja de Compilación
+menu	contact_us	Contáctenos
+group	developers	Desarrolladores
+group	developer_info	Info sobre el Desarrollador
+menu	discussion_forums	 Foros de Discusión 
+menu	documentation	Documentación Local
+frs	file_download	Descarga
+frs	file_monitor	Monitor
+frs	file_notes	Notas
+frs	file_package	Paquete
+frs	file_version	Versión
+group	long_bugs	Seguimiento de Errores
+group	long_cvs	Repositorio CVS
+group	long_docman	Admin. de Documentación
+group	long_forum	 Foros Públicos
+group	long_ftp	Espacio de FTP Anónimo
+group	long_homepage	Página de Inicio de Proyecto
+group	long_mail	Listas de Correo
+group	long_news	Últimas Noticias
+group	long_patch	Admin. de Parches
+group	long_pm	Admin. de Tareas
+group	long_support	Admin. de Soporte Técnico
+group	long_survey	Servicios
+group	short_bugs	Fallos
+group	short_cvs	CVS
+group	short_docman	Documentos
+group	short_files	Filesgroup	short_forum	Foros
+group	short_homepage	Página de Inicio
+group	short_mail	Listas
+group	short_news	Noticias
+group	short_patch	Parches
+group	short_pm	Tareas
+group	short_summary	Resumen
+group	short_support	Soporte Técnico
+group	short_survey	Servicios
+home	highest_ranked_users	Usuarios de Más Activos
+home	about_blurb	  SourceForge es un <B>servicio gratuito para desarrolladores de <A href="http://www.opensource.org">Código Abierto</A></B> ofreciendo fácil acceso a los mejores repositorios CVS, listas de discusión, seguimiento de errores, tablones de anuncios/foros, gestión de tarifas, hospedaje de sitios web, archivado permanente de ficheros, copias de seguridad completas y administración totalmente basada en web. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ más ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ PF ]</font></A> <BR> &nbsp; <P> <B>Retorno (feedback) al Sitio de Participación</B> <P> Para poder obtener el máximo de SourceForge, habrá de <A href="/account/register.php">registrarse como  usuario del sitio</A>. Esto le permitirá participar plenamente en todo lo que tenemos para ofrecerle. Podrá, por supuesto, navegar por el sitio sin registrarse, pero no tendrá la opción de participar plenamente. <P> &nbsp; <BR> <B>Monte Su Propio Proyecto</B> <P> <A href="/account/register.php">Regístrese como usuario del sitio</A>, acceda, <A HREF="/account/login.php">Acceso</A> y finalmente, <A HREF="/register/">Registre Su Proyecto.</A> <P> Muchas Gracias... y disfrute del sitio.
+frs	latest_file_releases	Últimas Versiones de Archivos
+menu	login	Acceso vía SSL
+menu	logout	Salir
+home	most_active_this_week	El Más Activo esta Semana
+menu	my_personal_page	Mi Página Personal
+menu	new_project	Registrar Proyecto Nuevo
+menu	new_releases	Nuevas Salidas
+menu	new_user	Nuevo Usuario vía SSL
+menu	project_admin	Admininstración de Proyectos
+group	project_admins	Admins de Proyecto
+menu	project_help_wanted	Petición de Ayuda para Proyecto
+menu	project_summary	Sumario de Proyectos
+group	public_area	Áreas Públicas
+menu	search	Buscar
+menu	software_map	Mapa de Software
+home	sourceforge_statistics	Estadísticas de SourceForge
+menu	top_projects	Proyectos Estrella
+home	top_project_downloads	Proyectos más descargados
+conf	language_code	es
+conf	language_id	4

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Swedish.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Swedish.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Swedish.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,88 @@
+#/**
+#  *
+#  * Swedish message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Christian Rose <menthos at users.sourceforge.net>
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-10-17  Christian Rose  <menthos at users.sourceforge.net>
+#	* Initial translation
+# 2001-03-23  Christian Rose  <menthos at users.sourceforge.net>
+#	* Updates
+#
+about_foundries	about_blurb	Om Foundries
+menu	about_sourceforge	Om SourceForge
+menu	account_maintenance	Kontounderh&aring;ll
+menu	bookmark_page	L&auml;gg till bokm&auml;rke
+home	breaking_down_barriers	Bryter ner gr&auml;nserna f&ouml;r open source-utveckling
+menu	change_my_theme	Byt mitt tema
+menu	code_snippet_library	Kodbibliotek
+menu	compile_farm	Kompileringsverkstad
+menu	contact_us	Kontakta oss
+group	developers	Utvecklare
+group	developer_info	Utvecklarinformation
+menu	discussion_forums	Diskussionsforum
+menu	documentation	Webbplatsdokumentation
+frs	file_download	H&auml;mta
+frs	file_monitor	Bevaka
+frs	file_notes	Anteckningar
+frs	file_package	Paket
+frs	file_version	Version
+group	long_bugs	Felr&auml;ttning
+group	long_cvs	CVS-f&ouml;rvar
+group	long_docman	DocManager: Projektdokumentation
+group	long_forum	&Ouml;ppna forum
+group	long_ftp	Anonymt FTP-utrymme
+group	long_homepage	Projekthemsida
+group	long_mail	S&auml;ndlistor
+group	long_news	Senaste nyheterna
+group	long_patch	Administrera felr&auml;ttelser
+group	long_pm	Projektstyrning
+group	long_support	Administrera anv&auml;ndarsupport
+group	long_survey	Unders&ouml;kningar
+group	short_bugs	Buggar
+group	short_cvs	CVS
+group	short_docman	Dokumentation
+group	short_files	Filesgroup	short_forum	Forum
+group	short_homepage	Hemsida
+group	short_mail	Listor
+group	short_main 	Huvudsida
+group	short_news	Nyheter
+group	short_patch	Felr&auml;ttningar
+group	short_pm	Uppgifter
+group	short_summary	Sammanfattning
+group	short_support	Support
+group	short_survey	Unders&ouml;kningar
+home	highest_ranked_users	H&ouml;gst rankade anv&auml;ndare
+home	about_blurb	 		SourceForge &auml;r en <B>fri tj&auml;nst f&ouml;r 		<A href="http://www.opensource.org">open source</A>-utvecklare 		</B>som erbjuder enkel tillg&aring;ng till det b&auml;sta i 		CVS, s&auml;ndlistor, felhantering, meddelandeforum, 		uppgiftshantering, webbplatsutrymme, permanent filarkivering, 		fullst&auml;ndiga backuper, och en helt webbaserad 		administration. 		<A href="/docman/display_doc.php?docid=753&group_id=1"> 		<font size="-1">[ mer ]</font></A> 		<A href="/docman/display_doc.php?docid=756&group_id=1"> 		<font size="-1">[ fr&aring;gor och svar ]</font></A><BR>&nbsp; 		<P> 		<B>Deltagande och synpunkter p&aring; webbplatsen</B> 		<P> 		F&ouml;r att f&aring; ut det mesta av SourceForge m&aring;ste 		du <A href="/account/register.php">registrera dig som en 		webbplatsanv&auml;ndare</A>. 		Det g&ouml;r att du kan deltaga i allt vi har att erbjuda. Du 		kan naturligtvis surfa p&aring; webbplatsen utan att att 		registrera dig, men du kommer d&aring; inte att kunna deltaga 		i allt. 		<P> 		&nbsp; 		<BR> 		<B>Skapa ditt eget projekt</B> 		<P> 		<A href="/account/register.php">Registrera dig som en 		webbplatsanv&auml;ndare</A>, <A HREF="/account/login.php"> 		logga sedan in</A> och till sist <A HREF="/register/"> 		registrerar du ditt projekt.</A> 		<P> 		Tack... och ha det s&aring; trevligt p&aring; webbplatsen.
+frs	latest_file_releases	Senaste filutg&aring;vorna
+menu	login	Logga in via SSL
+menu	logout	Logga ut
+home	most_active_this_week	Mest aktiva denna vecka
+menu	my_personal_page	Min personliga sida
+menu	new_project	Registrera nytt projekt
+menu	new_releases	Nya utg&aring;vor
+menu	new_user	Ny anv&auml;ndare via SSL
+menu	other_site_mirrors	Andra webbplatsspeglar
+menu	project_admin	Projektadministrat&ouml;r
+group	project_admins	Projektadministrat&ouml;rer
+menu	project_help_wanted	Projekthj&auml;lp s&ouml;kes
+menu	project_summary	Projektsammanfattning
+group	public_area	&Ouml;ppet utrymme
+menu	search	S&ouml;k
+menu	software_map	Programvaru&ouml;versikt
+home	sourceforge_statistics	SourceForge-statistik
+menu	top_projects	Topprojekt
+home	top_project_downloads	Projekt med flest h&auml;mtningar
+conf	content_encoding	iso-8859-1
+conf	default_font	verdana,arial,helvetica,sans-serif
+conf	language_code	sv
+conf	language_id	10

Added: trunk/gforge_base/evolvisforge/gforge/www/include/languages/Thai.tab
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/include/languages/Thai.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/include/languages/Thai.tab	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,89 @@
+#/**
+#  *
+#  * Thai message catalog
+#  *
+#  * SourceForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  * http://sourceforge.net
+#  *
+#  * @version   $Id$
+#  * @author Korakot Chaovavanich
+#  *
+#  */
+#
+# ChangeLog:
+#
+# 2000-09-25  Korakot Chaovavanich
+#	* Initial translation:
+#	National Electronic and Computer Technology Center.
+#	ŸçŸR Á™ôúòúiæ™, 25 Ÿó¿÷ô÷¿ 2543
+#	éý¿÷ÍÁž×¿×å÷èîæÁ埞çî¿æŸëÍÂåòîâ?æúÁÞîçÍÂìÉ™ôÞæ
+#
+#	According to Information Technology Vocabulary version of Royal Acadamy
+#	îæÞôâ éó?žÍÁž×¿×å÷èëôçë¿Ážé c˜ó˜çô™˜ói+æÞ÷ëô¿
+#	Sorry that I can't translate all of them... There seems no standard translation
+#	for Software Development Vocab. Some thai may even prefer English than translation.
+#
+menu	account_maintenance	´ÙáźѭªÕ¼Ùéãªé
+menu	bookmark_page	ãÊè·Õè¤Ñè¹Ë¹éÒ
+home	breaking_down_barriers	·ÐÅÒÂÍØ»ÊÃäÊÙè¡ÒþѲ¹ÒẺâÍà¾è¹«ÍÃìÊ
+menu	change_my_theme	à»ÅÕè¹ Theme
+menu	code_snippet_library	¤Åѧâ»Ãá¡ÃÁàÅç¡
+menu	contact_us	µÔ´µè;ǡàÃÒ
+group	developers	¼Ùé¾Ñ²¹Ò
+group	developer_info	¢éÍÁÙżÙé¾Ñ²¹Ò
+menu	discussion_forums	¡Ãдҹʹ·¹Ò
+menu	documentation	àÍ¡ÊÒäÙèÁ×Í䫵ì
+frs	file_download	´ÒÇâËÅ´
+frs	file_monitor	à½éÒÊѧࡵ
+frs	file_notes	ºÑ¹·Ö¡¢éͤÇÒÁ
+frs	file_package	á¾ç¡à¡¨
+frs	file_version	ÃØè¹
+group	long_bugs	µÔ´µÒÁºÑê¡
+group	long_cvs	·ÕèÃÇÁ CVS
+group	long_docman	¨Ñ´¡ÒÃàÍ¡ÊÒÃ: ¤ÙèÁ×Íâ»Ãਡµì
+group	long_forum	¡ÃдҹÊÒ¸ÒóÐ
+group	long_ftp	¾×é¹·Õè FTP ¹ÔùÒÁ
+group	long_homepage	âÎÁྨâ¤Ã§¡ÒÃ
+group	long_mail	¨´ËÁÒ¡ÅØèÁ
+group	long_news	¢èÒÇÅèÒÊØ´
+group	long_patch	¨Ñ´¡ÒÃá¾µªì
+group	long_pm	¨Ñ´¡ÒÃÀÒáԨ
+group	long_support	ºÃÔ¡Ò÷ҧ෤¹Ô¡
+group	long_survey	ẺÊÓÃǨ
+group	short_bugs	ºÑê¡
+group	short_docman	àÍ¡ÊÒÃ
+group	short_files	Filesgroup	short_forum	ʹ·¹Ò
+group	short_homepage	âÎÁྨ
+group	short_mail	¨´ËÁÒÂ
+group	short_news	¢èÒÇ
+group	short_patch	á¾µªì
+group	short_pm	ÀÒáԨ
+group	short_summary	ÊÃØ»
+group	short_support	ºÃÔ¡ÒÃ
+group	short_survey	ÊÓÃǨ
+home	highest_ranked_users	¤¹¤Ðá¹¹ÊÙ§ÊØ´
+home	about_blurb	  SourceForge à»ç¹ <B>ºÃÔ¡ÒÿÃÕá¡è¹Ñ¡¾Ñ²¹Ò <A href="http://opensource.thai.net">âÍà¾è¹«ÍÃìÊ</A></B> â´ÂÁÕºÃÔ¡Ò÷ÕèÊдǡáÅдշÕèÊØ´ ·Ñé§ Ãкº CVS, ¨´ËÁÒ¡ÅØèÁ, ÃкºµÔ´µÒÁºÑê¡, ¡Ãдҹʹ·¹Ò, Ãкº¨Ñ´¡ÒÃÀÒáԨ, ãËéà¹×éÍ·ÕèàÇçºä«µì,  Ãкº¨Ñ´à¡çºä¿Åì¶ÒÇÃ, ÁÕ¡ÒÃÊÓÃͧä¿Åì·Ñé§ËÁ´, ÃÇÁ·Ñé§ãËéºÃÔËÒÃÃкºµèÒ§ æ ä´é¼èÒ¹àÇ纷Ñé§ËÁ´. <A href="/docman/display_doc.php?docid=753&group_id=1"><font size="-1">[ more ]</font></A> <A href="/docman/display_doc.php?docid=756&group_id=1"><font size="-1">[ FAQ ]</font></A> <BR> &nbsp; <P> <B>¡ÒÃÁÕÊèǹÃèÇÁ áÅлé͹¡ÅѺ¡Ñºä«µì</B> <P> à¾×èÍãËéä´éÃѺ»ÃÐ⪹ì¨Ò¡ SourceForge ÊÙ§ÊØ´, ¤Ø³¨Óà»ç¹µéͧ <A href="/account/register.php">ŧ·ÐàºÕ¹à»ç¹ÊÁҪԡ䫵ì</A>. ¤Ø³¨Ðä´éÃѺ͹حҵãËéà¢éÒÁÕÊèǹÃèÇÁàµçÁ·Õèã¹·Ø¡ÊÔ觷ÕèàÃÒÁÕºÃÔ¡ÒÃ. ¤Ø³ÊÒÁÒöà¢éÒªÁ䫵ìä»àÃ×èÍ æ â´ÂäÁè¨Óà»ç¹µéͧŧ·ÐàºÕ¹ áµè¤Ø³ÍÒ¨äÁèÊÒÁÒöà¢éÒãªéºÃÔ¡ÒúҧÍÂèÒ§ä´é¤Ãº·Ñé§ËÁ´. <P> &nbsp; <BR> <B>µÑé§â»Ãਡµì¢Í§¤Ø³àͧ</B> <P> <A href="/account/register.php">ŧ·ÐàºÕ¹à»ç¹ÊÁҪԡ䫵ì</A>, áÅéÇ <A HREF="/account/login.php">ŧºÑ¹·Ö¡à¢éÒ</A> áÅÐÊØ´·éÒ¡ç <A HREF="/register/">µÑé§â»ÃਡµìãËÁè¢Í§¤Ø³àͧ</A>. <P> ¢Íº¤Ø³¤ÃѺ... ¢ÍãËéʹء¡ÑººÃÔ¡ÒâͧàÃÒ.
+frs	latest_file_releases	ä¿ÅìÍÍ¡ãËÁèÅèÒÊØ´
+menu	login	ŧºÑ¹·Ö¡à¢éÒ´éÇ SSL
+menu	logout	ŧºÑ¹·Ö¡ÍÍ¡
+home	most_active_this_week	µ×è¹µÑÇÊÙ§ÊØ´ã¹ÊÑ»´ÒËì
+menu	my_personal_page	˹éÒÊèǹµÑÇ
+menu	new_project	µÑé§â»ÃਡµìãËÁè
+menu	new_releases	ªØ´ÍÍ¡ãËÁè
+menu	new_user	ÊÁѤÃÊÁÒªÔ¡ãËÁè
+menu	other_site_mirrors	Mirror ·ÕèÍ×è¹ æ
+menu	project_admin	ºÃÔËÒÃâ»Ãਡµì
+group	project_admins	¼Ùé´ÙáÅâ»Ãਡµì
+menu	project_help_wanted	µéͧ¡Ò乪èÇÂ
+menu	project_summary	ÊÃØ»â»Ãਡµì
+group	public_area	¾×é¹·ÕèÊÒ¸ÒóÐ
+menu	search	¤é¹ËÒ
+menu	software_map	á¼¹·Õè«Í¿µìáÇÃì
+home	sourceforge_statistics	Ê¶ÔµÔ SourceForge
+menu	top_projects	â»ÃਡµìÊØ´ÂÍ´
+home	top_project_downloads	â»Ãਡµì´ÒÇâËÅ´ÊÙ§ÊØ´
+conf	content_encoding	tis-620
+conf	default_font	MS Sans Serif,Thonburi,sans-serif
+conf	language_code	th
+conf	language_id	5

Added: trunk/gforge_base/evolvisforge/gforge/www/kernel_traffic.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/kernel_traffic.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/kernel_traffic.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,83 @@
+<?php
+/**
+  *
+  * The Kernel Traffic page
+  *
+  * This page displays the retrieved Kernel Traffic page within a
+  * SourceForge look-and-feel.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: kernel_traffic.php,v 1.4 2001/05/22 21:39:31 pfalcon Exp $
+  * @author: Darrell Brogdon <dbrogdon at valinux.com>
+  *
+  */
+
+
+require_once('pre.php');
+require_once('www/news/news_utils.php');
+require_once('features_boxes.php');
+require_once('cache.php');
+
+/**
+ * getKernelTraffic() - Pull the downloaded contents of Kernel Traffic from the database
+ *
+ * This function mostly exists so we can cache the results.
+ */
+function getKernelTraffic()
+{
+	$sql = "SELECT kt_data FROM kernel_traffic";
+	$res = db_query($sql);
+	return db_result($res,0,0);
+}
+
+//set up the group_id
+$group_id='18435';
+
+//set up a foundry object for reference all over the place
+$foundry=&group_get_object($group_id);
+
+$HTML->header(array('title'=>'Kernel Traffic','group'=>$group_id));
+
+echo'	<TABLE cellspacing="0" cellpadding="10" border="0" width="100%">
+		<TR>
+			<TD valign="top" align="left">
+';
+
+echo '			<table><tr><td>';		// Needed to make the formatting show properly
+
+echo cache_display('kerneltraffic','getKernelTraffic()',(24*3600));
+?>
+
+<hr>
+<b>Legal And Historical Notice</b><br>
+<br>
+All KT and KC issues are Copyright their respective authors and released under the GPL.<br>
+<br>
+Linux &reg; is a registered trademark of Linus Torvalds<br>
+<br>
+Kernel Traffic is copyright &copy; Zack Brown<br>
+<br>
+Kernel Cousins are copyright &copy; their respective authors.<br>
+<br>
+Kernel Traffic and the Cousins are distributed under the terms of the GNU General Public Licence, version 2, or (at your discretion) any later version.<br>
+<br>
+Kernel Traffic and the Cousins will always be indebted to Mark Constable, of http://www.renta.net/, who hosted all of the Kernel Traffic and Kernel Cousin pages at http://www.opensrc.org from January through September 1999. The Open Source movement never had a truer friend.<br>
+<br>
+
+<?php
+
+echo '</TD><TD VALIGN="TOP" WIDTH="30%">';
+
+// Display the sponsor info if any
+echo $foundry->getSponsorHTML1();
+
+// Display the Stat's features boxes on the right
+echo cache_display('foundry'.$group_id.'_features_boxes','foundry_features_boxes()',(24*3600));
+
+echo '</TD></TR></TABLE>';
+
+$HTML->footer(array());
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/my/intelagreement.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/my/intelagreement.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/my/intelagreement.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,197 @@
+<?php
+/**
+  *
+  * SourceForge User's Personal Page
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: intelagreement.php,v 1.16 2001/05/22 18:54:24 pfalcon Exp $
+  *
+  */
+
+
+require_once('pre.php');
+
+if (user_isloggedin()) {
+
+	if ($ACCEPT) {
+		//first delete any prior request
+		db_query("DELETE FROM intel_agreement WHERE user_id='". user_getid() ."'");
+
+		//insert their new request with an is_approved flag=false
+		$sql="INSERT INTO intel_agreement (user_id,message,is_approved) ".
+			"VALUES ('". user_getid() ."','". htmlspecialchars($message) ."','0')";
+		$result=db_query($sql);
+		if (!$result || db_affected_rows($result) < 1) {
+			$feedback .= ' ERROR inserting data ';
+			echo db_error();
+		} else {
+			site_user_header(array('title'=>'Agreement'));
+			echo '<P>
+				<H2>Received</H2>
+				<P>
+				Your request has been received. You will 
+				receive an email when it is accepted or rejected';
+			site_user_footer(array());
+			exit;
+		}
+	} else if ($REJECT) {
+		header ("Location: /my/");
+	}
+
+	site_user_header(array('title'=>'Agreement'));
+	html_feedback_top($feedback);
+
+	echo '<P>';
+?>
+<H2>OPEN-SOURCE CLICKWRAP IPLA</H2>
+<P>
+Intel would like to invite you to participate in Intel's efforts to prepare
+software targeted for the Linux operating system running on the Intel(R) Itanium(tm)
+processor by providing you access to software created by Intel and its licensors and
+related documentation and materials (the "Intel Software") and Intel supplied
+equipment ("Intel Equipment") under the following terms and conditions:
+<P>
+1. To the extent that you are using software that is not supplied by Intel and/or
+its licensors such as the Linux operating system and the GCC compiler, this Agreement
+has no effect on your rights and your use of that software is subject to the applicable
+license such as the Gnu General Public License or other applicable license.
+<P>
+2. This license to use the Intel Software and Intel Equipment is being provided to you
+royalty-free, in consideration of your adherence to the other terms and conditions of
+this license. You may distribute software that you create ("Your Software") using this
+equipment through any distribution scheme you wish to use, including distributing Your
+Software under an open source license agreement such as the Gnu General Public License
+or distributing binaries of Your Software for a fee and subject to a different license.
+<P>
+3. You may modify portions of the Intel Software provided by Intel as sample source code
+and incorporate such sample source or modified portions thereof into your programs and
+may distribute Your Software incorporating sample source code or modifications thereof
+under any license agreement of your choosing. You may not reverse engineer, decompile,
+license or disassemble portions of any Intel Software provided in object code form.
+<P>
+4. Since the Intel Equipment that you are using is pre-release hardware and incorporates
+pre-release software and is configured to permit multiple people to test code on the
+equipment, this equipment will not generate reliable benchmarking data. I understand
+that no reliable benchmarking data can be generated on the Intel Equipment. Therefore,
+you agree that you will not disclose publicly or share with any third party any
+benchmarks generated using the Intel Equpment and/or Intel Software.
+<P>
+5. The Intel Software provided in binary form contains confidential information of Intel
+regarding technical aspects of the Itanium processor. You must use the same degree of
+care to protect this confidential information of Intel that you use to protect your own
+confidential information, but no less than a reasonable degree of care. You must
+restrict access to the Intel Software provided in binary form to your employees who have
+executed written agreements with you obligating them to protect confidential information
+as required under this paragraph. The obligations of this paragraph do not apply to any
+information that is or becomes published by Intel without restriction, or otherwise
+becomes rightfully available to the public other than by breach of confidentiality
+obligation to Intel.
+<P>
+6. THE SOFTWARE AND EQUIPMENT IS PROVIDED BY INTEL AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL INTEL 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 THE SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+<P>
+7. You may provide to Intel additional feedback regarding the Intel Software and/or the
+Intel Equipment, including suggested enhancements or modifications to the Software or
+related materials. To the extent that you provide feedback to Intel, you agree that Intel
+shall have no use or confidentiality restrictions on such feedback.
+<P>
+8. Intel retains all ownership of the Intel Software. No other rights or licenses are given
+to you, except as expressly provided in this license. Upon termination, you agree to destroy
+all copies of the Intel Software in your possession other than Intel Software that you
+incorporated into Your Software as permitted under paragraph 2.
+<P>
+9. You shall comply with all US Export Regulations governing the Intel Software and Intel
+Equipment. You shall not sell or otherwise transfer the Intel Software or any confidential
+information of Intel to any person or any entity listed on a denial order published by the
+US Government. You understand that this requirement is imposed for all transactions,
+including sales, servicing, and training. You hereby certify that you are not involved in
+nuclear, missile, chemical and/or biological weapons activities in violation of US Export
+Regulations.
+<P>
+10. U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED RIGHTS."
+Use, duplication, or disclosure by the Government is subject to restrictions as set forth in
+FAR52.227-14 and DFAR252.227-7013 et seq. or its successor. Use of the Materials by the
+Government constitutes acknowledgment of Intel's proprietary rights in them.
+<P>
+11. USER SUBMISSIONS: Any material, information or other communication you transmit or post
+to this Site will be considered non-confidential and non-proprietary ("Communications").
+Intel will have no obligations with respect to the Communications. Intel and its designees
+will be free to copy, disclose, distribute, incorporate and otherwise use the Communications
+and all data, images, sounds, text, and other things embodied therein for any and all commercial
+or non-commercial purposes. You are prohibited from posting or transmitting to or from this
+Site any unlawful, threatening, libelous, defamatory, obscene, pornographic, or other material
+that would violate any law.
+<P>
+12. USER CHAT ROOMS: Intel may, but is not obligated to, monitor or review any areas on the
+Site where users transmit or post Communications or communicate solely with each other,
+including but not limited to chat rooms, bulletin boards or other user forums, and the content
+of any such Communications. Intel, however, will have no liability related to the content of
+any such Communications, whether or not arising under the laws of copyright, libel, privacy,
+obscenity, or otherwise.
+<P>
+13. USE OF PERSONALLY IDENTIFIABLE INFORMATION: Information submitted to Intel through forms
+on the website is governed according to Intel's Electronic Personal Information Privacy Policy
+(http://www.intel.com/sites/corporate/privacy.htm.)
+<P>
+14. LINKS TO OTHER MATERIALS: The linked sites are not under the control of Intel and Intel is
+not responsible for the content of any linked site or any link contained in a linked site.
+Intel reserves the right to terminate any link or linking program at any time. Intel does not
+endorse companies or products to which it links and reserves the right to note as such on its
+web pages. If you decide to access any of the third party sites linked to this Site, you do
+this entirely at your own risk.
+<P>
+15. APPLICABLE LAWS: This site is controlled by Intel from its offices within the United
+States of America. Intel makes no representation that Materials in the site are appropriate or
+available for use in other locations, and access to them from territories where their content
+is illegal is prohibited. Those who choose to access this site from other locations do so on
+their own initiative and are responsible for compliance with applicable local laws. You may not
+use or export the Materials in violation of U.S. export laws and regulations. Any claim relating
+to the Materials shall be governed by the internal substantive laws of the State of Delaware.
+<P>
+16. GENERAL: Intel may revise these Terms at any time by updating this posting. You should
+visit this page from time to time to review the then-current Terms because they are binding on
+you. Certain provisions of these Terms may be superseded by expressly designated legal notices
+or terms located on particular pages at this Site.
+<P>
+17. This license forms the entire agreement between you and Intel with respect to the subject
+matter hereof, and may only be amended in writing by authorized representatives of both parties.
+The failure of either party to enforce any rights resulting from breach will not be deemed a
+waiver. This license shall be governed by, subject to, and construed according to the laws of
+the United States and the State of Delaware, excluding its conflicts of laws provisions. If the
+Software is used outside the United States of America, you agree that all disputes regarding
+this license and the Software shall be referred to the United States District Court for Delaware
+or, if there is no federal jurisdiction, to the applicable state court in Delaware.
+<P>
+18. You are not required to accept this agreement, since you have not signed it. However, nothing
+else grants you permission to use the Intel Software or Intel Equipment. Therefore, by using the
+Intel Equipment or Intel Software, you indicate your acceptance of this agreement to do so, and
+all its terms and conditions for using the Intel Software and Intel Equipment.
+<P>
+<?php
+	echo '
+		<FORM ACTION="'. $PHP_SELF .'" METHOD="POST">
+		<B>Enter A Brief description of the work you would like to do on the Itanium(tm) processor prototype machines:</B><BR>
+		<TEXTAREA NAME="message" ROWS="20" COLS="60" WRAP="SOFT"></TEXTAREA>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="ACCEPT" VALUE="Yes - I Agree"> &nbsp; 
+		<INPUT TYPE="SUBMIT" NAME="REJECT" VALUE="No - I Don\'t Agree">
+		</FORM>';
+
+	site_user_footer(array());
+
+} else {
+
+	exit_not_logged_in();
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/news/admin/news_admin_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/news/admin/news_admin_utils.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/news/admin/news_admin_utils.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,114 @@
+<?php
+/**
+  *
+  * SourceForge News Facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+function show_news_approve_form($sql_pending, $sql_rejected, $sql_approved) {
+
+        /*
+       		Show list of waiting news items
+       	*/
+
+       	// function to show single news item
+       	// factored out because called 3 time below
+       	function show_news_item($result,$i,$approved,$selectable) {
+
+	        global $PHP_SELF;
+
+       		echo '<tr bgcolor="'.html_get_alt_row_color($i).'"><td>';
+       		if ($selectable) {
+       			echo '<input type="checkbox" '
+       			     .'name="news_id[]" value="'
+       			     .db_result($result, $i, 'id').'">';
+       		}
+       		echo date('Y-m-d', db_result($result,$i,'date')).'</td>
+       		<td>';
+       		echo '
+       		<a href="'.$PHP_SELF.'?approve=1&id='.db_result($result,$i,'id').'">'.db_result($result,$i,'summary').'</A>
+       		</td>
+
+       		<td>
+       		<a href="/projects/'
+       		.db_result($result,$i,'unix_group_name').'/">'
+       		.db_result($result,$i,'group_name')
+       		.' ('.db_result($result,$i,'unix_group_name').')'
+       		.'</a>
+       		</td>
+       		</tr>'
+       		;
+       	}
+
+       	$title_arr=array();
+       	$title_arr[]='Date';
+       	$title_arr[]='Title';
+       	$title_arr[]='Project';
+
+       	$result=db_query($sql_pending);
+       	$rows=db_numrows($result);
+
+       	echo '<form ACTION="'. $PHP_SELF .'" METHOD="POST">';
+       	echo '<input type="hidden" name="mass_reject" value="1">';
+       	echo '<input type="hidden" name="post_changes" value="y">';
+
+       	if ($rows < 1) {
+       		echo '
+       			<H4>No Queued Items Found</H4>';
+       	} else {
+       		echo '<H4>These items need to be approved (total: '.$rows.')</H4>';
+       		echo html_build_list_table_top($title_arr);
+       		for ($i=0; $i<$rows; $i++) {
+       			show_news_item($result,$i,false,true);
+       		}
+       		echo '</table>';
+       		echo '<br><input type="submit" name="submit" value="Reject Selected">';
+       	}
+       	echo '</form>';
+
+       	/*
+       		Show list of rejected news items for this week
+       	*/
+
+       	$result=db_query($sql_rejected);
+       	$rows=db_numrows($result);
+       	if ($rows < 1) {
+       		echo '
+       			<H4>No rejected items found for this week</H4>';
+       	} else {
+       		echo '<H4>These items were rejected this past week (total: '.$rows.')</H4>';
+       		echo html_build_list_table_top($title_arr);
+       		for ($i=0; $i<$rows; $i++) {
+       			show_news_item($result,$i,false,false);
+       		}
+       		echo '</table>';
+       	}
+
+       	/*
+       		Show list of approved news items for this week
+       	*/
+
+       	$result=db_query($sql_approved);
+       	$rows=db_numrows($result);
+       	if ($rows < 1) {
+       		echo '
+       			<H4>No approved items found for this week</H4>';
+       	} else {
+       		echo '<H4>These items were approved this past week (total: '.$rows.')</H4>';
+       		echo html_build_list_table_top($title_arr);
+       		for ($i=0; $i<$rows; $i++) {
+       			show_news_item($result,$i,true,false);
+       		}
+       		echo '</table>';
+       	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/project/admin/database.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/project/admin/database.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/project/admin/database.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,241 @@
+<?php
+/**
+  *
+  * Project Admin page to manage group's databases
+  *
+  * This page allows to request, change password of, and delete database.
+  * Group may have single database of each type that provided (e.g., mysql,
+  * pgsql, etc).
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('common/include/vars.php');
+require_once('www/project/admin/project_admin_utils.php');
+
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+
+$group =& group_get_object($group_id);
+exit_assert_object($group, 'Group');
+
+if ($createdb) {
+
+	//mysql takes issue with database names that have dashes in them - so strip the dashes, replace with ""
+	//e.g. free-mysql becomes freemysql (it's a workaround) 
+	//if there is a dash in the groupname
+	$dbname = str_replace("-", "", $group->getUnixName());
+	
+	//check there is no name double up - if there is - add an incrementing to the number to the end
+
+	$dbname = prdb_namespace_seek($dbname);
+	$randompw = random_pwgen();
+
+	$res = db_query("
+		INSERT INTO prdb_dbs(group_id,dbname,dbusername,dbuserpass,requestdate,dbtype,created_by,state) 
+		VALUES($group_id,'$dbname','$dbname','$randompw','".time()."',$newdbtypeid,".$LUSER->getID().",2)
+	");
+
+	if (!$res || db_affected_rows($res) < 1) {
+		$feedback .= 'Cannot add database entry: '.db_error();
+	} else {
+	
+		$feedback .= "Database scheduled for creation.";
+		group_add_history('Created database '.$dbname.' type '.$row_db['dbsoftware'].' ','',$group_id);
+	
+	}
+
+}
+
+if ($updatedbrec) {
+
+	if ($pw == $pwconfirm) {
+
+		//sync new password, and flag it as 'pending (an) update'
+
+		$res = db_query("
+			UPDATE prdb_dbs 
+			SET dbuserpass = '$pw', 
+				state = '4'
+			WHERE dbid = '$dbid' 
+			AND group_id = '$group_id'
+		"); 
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$feedback .= "Update failure - ".db_error()."";
+		} else {
+			$res = db_query("
+				SELECT * 
+				FROM prdb_types 
+				WHERE dbtypeid='$newdbtypeid'
+			");
+			$row_db = db_fetch_array($res);
+			group_add_history('Updated database - (type: '.$row_db['dbsoftware'].')','',$group_id);
+		}
+	} else {
+
+		$feedback .= "Operation failed.  Password and Password Confirm are not the same";
+
+	}
+
+}
+
+if ($deletedbconfirm) {
+
+	//schedule for deletion
+
+	$res = db_query("
+		UPDATE prdb_dbs 
+		SET state=3 
+		WHERE dbid='$dbid'
+		AND group_id='$group_id'
+	");
+
+	if (!$res || db_affected_rows($res) < 1) {
+		$feedback .= 'Cannot delete database: '.db_error();
+	} else {
+		$feedback .= "Database scheduled for deletion";
+	}
+
+}
+
+project_admin_header(array('title'=>'Editing Database Info','group'=>$group_id,'pagename'=>'project_admin_database','sectionvals'=>array(group_getname($group_id))));
+
+if ($deletedb == 1) {
+
+	print "<hr><b><center>Click to confirm deletion [ <a href=\"".$PHP_SELF."?deletedbconfirm=1&group_id=".$group_id."&dbid=$dbid\">CONFIRM DELETE</a> ] </center></b> <hr>";
+
+}
+
+$res_db = db_query("
+	SELECT * 
+	FROM prdb_types 
+	WHERE dbsoftware NOT IN (
+		SELECT dbsoftware 
+		FROM prdb_dbs,prdb_types 
+		WHERE dbtypeid=dbtype 
+		AND group_id='$group_id'
+		AND state IN (1,2,4)
+	)
+");
+
+if (db_numrows($res_db) > 0) {
+
+	print '
+
+		<p>
+
+		<b><u>Add New Database</u></b>
+		<p>
+		<i>Clicking on "create" will schedule the creation of the database, and email the
+		details to the project administrators.</i>
+
+		<p>
+		<b>Database Type:</b>
+		<p>
+
+		<FORM action="'.$PHP_SELF.'" method="post">
+		<INPUT type="hidden" name="createdb" value="1">
+		<INPUT type="hidden" name="group_id" value="'.$group_id.'">
+
+		<select name="newdbtypeid">
+
+	';
+
+	while ($res_row = db_fetch_array($res_db)) {
+
+		print "<option value=\"".$res_row['dbtypeid']."\">".$res_row['dbsoftware']."</option>"; 
+	}
+
+	print '
+
+		</select>
+
+		&nbsp; <INPUT type="submit" name="Create" value="Create">
+
+		</p>
+		</form>
+	';	
+
+} else {
+?>
+
+Documentation: <a href="https://sourceforge.net/docman/display_doc.php?docid=3052&group_id=1">Basic MySQL database access</a><p>
+Maximum number of databases of all types have been allocated. <p>
+
+<?php
+}
+
+$res_db = db_query("
+	SELECT * 
+	FROM prdb_dbs,prdb_states,prdb_types 
+	WHERE group_id='$group_id' 
+	AND stateid=state 
+	AND dbtype=dbtypeid
+");
+
+if (db_numrows($res_db) > 0) {
+
+	$title=array();
+	$title[]='DB Type';
+	$title[]='State';
+	$title[]='New Password';
+	$title[]='Confirm New';
+	$title[]='Operations';
+
+	echo html_build_list_table_top($title);
+
+	while ($row_db = db_fetch_array($res_db)) {
+
+		print '
+			<tr bgcolor="'.html_get_alt_row_color($i++).'">
+
+			<td>'.$row_db['dbsoftware'].'</td>
+			<td>'.$row_db['statename'].'</td>
+			';
+
+		//if database is active or pending update allow the record to be deleted or password changed
+		
+		if (($row_db['state'] == 1) || ($row_db['state'] == 4) || ($row_db['state'] == 2)) {
+
+			print '<form name="dbupdate" method="POST" action="'.$PHP_SELF.'?group_id='.$group_id.'">
+				     <input type="hidden" name="dbid" value="'.$row_db['dbid'].'">
+				     <input type="hidden" name="updatedbrec" value="1">
+				     <td><input type="text" name="pw" size="8" maxlength="16"> </td>
+				     <td><input type="text" name="pwconfirm" size="8" maxlength="16"> </td>
+				     <td>
+				       <input type="submit" name="submit" value="Update">
+				     </td>
+				  </form> 
+			';
+
+		} else {
+			print '
+				<td>&nbsp;</td>
+				<td>&nbsp;</td>
+				<td>&nbsp;</td>
+			';
+		}
+		
+		print '</tr>';
+
+	}
+
+
+	print '</table>';
+
+} else {
+
+	print '<b><u>Current Databases</u></b><p>There are no databases currently allocated to this group.';
+
+}
+
+project_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/project/admin/rmuser.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/project/admin/rmuser.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/project/admin/rmuser.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,87 @@
+<?php
+/**
+  *
+  * Group Admin page to confirm removal of user from group
+  *
+  * This page is called from Project/Foundry Admins when admin requests
+  * removal of a developer. This page checks whether it is possible
+  * to remove one, if no, shows decription why not, else presents
+  * admin with the confirmation form. Results of this form are submitted
+  * back to calling Project/Foundry Admin page (i.e. very removal is
+  * performed there). Since Project/Foundry Admins use slightly different
+  * parameter passing interface, there's a bit of dirty magic here.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require_once('pre.php');
+require_once('www/project/admin/project_admin_utils.php');
+
+session_require(array('group'=>$group_id));
+
+$group =& group_get_object($group_id);
+exit_assert_object($group, 'Group');
+
+// Do some text substitutions below
+if ($group->getType()==2) {
+	$type = 'foundry';
+	// foundries hate explicit group_id
+	$passed_group_id = '';
+} else {
+	$type = 'project';
+	$passed_group_id = '<input type="hidden" name="group_id" value="'.$group_id.'">';
+}
+
+// Need to check if user being removed is admin
+$rm_user =& user_get_object($rm_id);
+exit_assert_object($rm_user, 'User');
+$perm = $group->getPermission($rm_user);
+
+if ($perm->isAdmin()) {
+	exit_error(
+		'Operation Not Permitted',
+		'You cannot remove '.$type.' admin.'
+	);
+}
+
+
+project_admin_header(array('title'=>"Project Admin: ".group_getname($group_id),'group'=>$group_id));
+
+?>
+
+<h3>Removing Developer from <?php echo ucfirst($type); ?></h3>
+<p>
+You are about to remove developer from the <?php echo $type; ?>. Please
+confirm your action:
+</p>
+
+<table>
+<tr><td>
+
+<form action="<?php echo $return_to; ?>" method="POST">
+<input type="hidden" name="func" value="rmuser">
+<?php echo $passed_group_id; ?>
+<input type="hidden" name="rm_id" value="<?php echo $rm_id; ?>">
+<input type="submit" value="Remove">
+</form>
+
+</td><td>
+
+<form action="<?php echo $return_to; ?>" method="GET">
+<?php echo $passed_group_id; ?>
+<input type="submit" value="Cancel">
+</form>
+
+</td></tr>
+</table>
+
+<?php
+
+project_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/project/admin/userpermedit.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/project/admin/userpermedit.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/project/admin/userpermedit.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,369 @@
+<?php
+/**
+  *
+  * Project Admin page to edit permissions for the specific group member
+  *
+  * This page is linked from userperms.php and from forms to add users
+  * to group (located on Project/Foundry Admin main pages).
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');	
+require_once('www/project/admin/project_admin_utils.php');
+require_once('common/tracker/ArtifactType.class');
+
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+
+// Builds role selection box with given selected item
+function member_role_box($name, $checked) {
+	global $member_roles;
+	if (!$member_roles) {
+		$sql="SELECT category_id,name FROM people_job_category";
+		$member_roles=db_query($sql);
+	}
+	return html_build_select_box($member_roles,$name,$checked,true,'Undefined');
+}
+
+// Since there're lot of permissions, and each of them has complex
+// HTML rendition (SELECT boxes, etc.), this function is used to reduce
+// the background noise.
+function render_row($name, $val, $i) {
+	print '
+	<tr bgcolor="'.html_get_alt_row_color($i).'">
+	<td>'.$name.'</td>
+	<td>'.$val.'</td></tr>
+	';
+}
+
+$group =& group_get_object($group_id);
+exit_assert_object($group, 'Group');
+
+// ########################### form submission, make updates
+
+// Netscape allows to submit single-field form by pressing
+// Return in the field. In this case, it won't set value for
+// submit button
+if ($submit || $form_unix_name) {
+
+
+	if ($GLOBALS['func']=='adduser') {
+
+		/*
+			We came here from Add User page, need to add user
+			and fall thru to show permissions for one
+		*/
+
+		$u =& user_get_object_by_name($form_unix_name);
+		if (!$u || !is_object($u)){
+			exit_error(
+				'Invalid user',
+				'User does not exist.'
+			);
+		}
+
+		if (!$group->addUser($u->getUnixName())) {
+			exit_error('Error', $u->getErrorMessage());
+		} else {
+			$feedback = ' User Added Successfully<br>';
+		}
+
+		$user_id = $u->getID();
+
+	} elseif ($addtotracker) {
+
+		$u =& user_get_object($user_id);
+		exit_assert_object($u, 'User');
+
+		//
+		//  if "add all" option, get list of ArtifactTypes
+		//  that this user is not already a member of
+		//
+		if ($add_all) {
+			$sql="SELECT group_artifact_id 
+			FROM artifact_group_list
+			WHERE group_id='$group_id' 
+			AND NOT EXISTS (SELECT user_id 
+			FROM artifact_perm
+			WHERE artifact_perm.group_artifact_id=artifact_group_list.group_artifact_id 
+			AND user_id='".$u->getID()."')";
+
+			$addtoids = util_result_column_to_array(db_query($sql));
+		}
+
+		//
+		//	Now take the array of ids and add this user to them
+		//
+		$count = count($addtoids);
+
+		for ($i=0; $i<$count; $i++) {
+			$ath = new ArtifactType($group,$addtoids[$i]);
+
+			$ath->addUser($u->getID());
+			if ($ath->isError()) {
+				$feedback .= $addtoids[$i] .': '. $ath->getErrorMessage();
+				$was_error = true;
+			}
+		}
+
+	} else {
+
+		/*
+			Else, we are updating user's permissions
+		*/
+
+		$u =& user_get_object($user_id);
+		exit_assert_object($u, 'User');
+
+		// XXX: remove when CVS roles will be activated!
+		$cvs_flags = 1;
+
+		//call to control function in the $Group object
+		if ($group->updateUser($user_id,
+			$admin_flags, $bug_flags, $forum_flags,
+			$project_flags, $patch_flags, $support_flags,
+			$doc_flags, $cvs_flags, $release_flags,
+			$member_role, $artifact_flags)) {
+
+			group_add_history ('Changed Permissions for',$u->getUnixName(),$group_id);
+
+
+			//  
+			//  Delete the checked ids
+			//
+
+			//	keep an assoc array of artifacts this user 
+			//	was removed from, so we don't then try to update
+			//	those artifact type perms in the next step
+			$del_arr=array();
+
+			$count=count($deletefrom);
+			for ($i=0; $i<$count; $i++) {
+				$del_arr["$deletefrom[$i]"]=true;
+				$ath = new ArtifactType($group,$deletefrom[$i]);
+				$ath->deleteUser($user_id);
+				if ($ath->isError()) {
+					$feedback .= $deletefrom[$i] .': '. $ath->getErrorMessage();
+					$was_error=true;
+				}
+			}
+
+			//
+			//  Handle the 2-D array of group_artifact_id/permission level
+			//
+			$count=count($updateperms);
+
+			for ($i=0; $i<$count; $i++) {
+				//
+				//	quick check of that assoc array to prevent 
+				//	updating of perms that don't exist anymore
+				//
+				if (!$del_arr["$updateperms[$i][0]"]) {
+					$ath = new ArtifactType($group,$updateperms[$i][0]);
+					$ath->updateUser($user_id,$updateperms[$i][1]);
+					if ($ath->isError()) {
+						$feedback .= $updateperms[$i][0] .': '. $ath->getErrorMessage();
+						$was_error=true;
+					} 
+				}
+			}
+			
+			//if no errors occurred, show just one feedback message
+			//instead of the coredump of messages;
+			if (!$was_error) {
+				$feedback = ' Permissions Updated<br>';
+			}
+		} else {
+			$feedback .= $group->getErrorMessage();
+		}
+
+	}
+
+} else {
+	//
+	//  Set up this user's object
+	//
+	$u =& user_get_object($user_id);
+	if (!$u || !is_object($u)) {
+		exit_error('Error', 'Error creating user object');
+	} else if ($u->isError()) {
+		exit_error('Error', $u->getErrorMessage());
+	}
+}
+
+project_admin_header(array('title'=>'Project Developer Permissions','group'=>$group_id,'pagename'=>'project_admin_userpermedit','sectionvals'=>array(group_getname($group_id))));
+
+// Show description of roles/permissions
+echo permissions_blurb();
+
+$res_dev = db_query("
+	SELECT * 
+	FROM user_group 
+	WHERE group_id='$group_id'
+	AND user_id='$user_id'
+");
+
+if (!$res_dev || db_numrows($res_dev) < 1) {
+	echo '<H2>Developer Not Found In This Group</H2>';
+	echo db_error();
+} else {
+	echo '
+	<P>
+	<FORM action="'.$PHP_SELF.'?group_id='.$group_id.'&user_id='. $user_id .'" method="post">';
+
+	$row_dev = db_fetch_array($res_dev);
+
+	$arr=array();
+	$arr[]='Property';
+	$arr[]='Value';
+
+	echo html_build_list_table_top($arr);
+
+	render_row(
+		'Project role',
+		member_role_box('member_role',$row_dev['member_role']),
+		$i++
+	);
+
+	render_row(
+		'Project Admin',
+		html_build_checkbox('admin_flags', 'A', stristr($row_dev['admin_flags'],'A')),
+		$i++
+	);
+
+	render_row(
+		'Release Technician',
+		html_build_checkbox('release_flags', '1', $row_dev['release_flags']==1),
+		$i++
+	);
+
+/*
+	render_row(
+		'CVS Access',
+		html_build_select_box_from_arrays(
+			array(0,1,2),
+			array('Read-only','Write','Admin'),
+			'cvs_flags',$row_dev['cvs_flags'],false
+		),
+		$i++
+	);
+*/
+
+	render_row(
+		'Tracker Manager',
+		html_build_select_box_from_arrays(
+			array(0,2),
+			array('-','Admin'),
+			'artifact_flags',$row_dev['artifact_flags'],false
+		),
+		$i++
+	);
+
+	$tracker_ids   = array(0,1,2,3);
+	$tracker_texts = array('-','Technician','Admin & Tech','Admin');
+
+	render_row(
+		'Project/Task Manager',
+		html_build_select_box_from_arrays(
+			$tracker_ids,
+			$tracker_texts,
+			'project_flags',$row_dev['project_flags'],false
+		),
+		$i++
+	);
+
+	render_row(
+		'Forums',
+		html_build_select_box_from_arrays(
+			array(0,2),
+			array('-','Moderator'),
+			'forum_flags',$row_dev['forum_flags'],false
+		),
+		$i++
+	);
+
+	render_row(
+		'Documentation Manager',
+		html_build_select_box_from_arrays(
+			array(0,1),
+			array('-','Editor'),
+			'doc_flags',$row_dev['doc_flags'],false
+		),
+		$i++
+	);
+
+	//
+	//	Get the list of permissions that this user has 
+	//	for ArtifactTypes in this Group
+	//
+	$res = db_query("SELECT * FROM artifactperm_artgrouplist_vw 
+		WHERE user_id='$user_id' 
+		AND group_id='$group_id'");
+
+	$rows=db_numrows($res);
+
+	// Iterate over all trackers of the group
+	for ($i=0; $i<$rows; $i++) {
+		print '
+		<INPUT TYPE="HIDDEN" NAME="updateperms['.$i.'][0]" VALUE="'. db_result($res,$i,'group_artifact_id').'">
+		<TR BGCOLOR="'. html_get_alt_row_color($i) .'">
+
+		<TD>'. db_result($res,$i,'name') .'</TD>
+
+		<TD><FONT size="-1"><SELECT name="updateperms['.$i.'][1]">
+		<OPTION value="0"'.((db_result($res,$i,'perm_level')==0)?' selected':'').'>-
+		<OPTION value="1"'.((db_result($res,$i,'perm_level')==1)?' selected':'').'>Technician
+		<OPTION value="2"'.((db_result($res,$i,'perm_level')==2)?' selected':'').'>Tech & Admin
+		<OPTION value="3"'.((db_result($res,$i,'perm_level')==3)?' selected':'').'>Admin Only
+		</SELECT></FONT>  <INPUT TYPE="CHECKBOX" NAME="deletefrom[]" VALUE="'. db_result($res,$i,'group_artifact_id').'"> Remove</TD>
+
+		</TR>';
+	}
+
+	?>
+
+	<TR><TD COLSPAN=2><p align="center">
+		<INPUT type="submit" name="submit" value="Update Developer Permissions">
+		<INPUT type="reset" value="Reset Changes">
+		</FORM>
+	</TD></TR>
+
+	</TABLE>
+
+	<P> 
+	<h3>Add User To These Trackers:</H3>
+	<P>
+	You can pick and choose which trackers this user has any privileges in, 
+	or simply add the user to all trackers by checking "Add To All".
+	<P> 
+	<CENTER>
+	<FORM action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&user_id='.$user_id ?>" method="post">
+	<INPUT TYPE="HIDDEN" NAME="addtotracker" VALUE="y">
+	<?php
+	$sql="SELECT group_artifact_id,name 
+		FROM artifact_group_list
+		WHERE group_id='$group_id' 
+		AND NOT EXISTS (SELECT user_id 
+		FROM artifact_perm
+		WHERE artifact_perm.group_artifact_id=artifact_group_list.group_artifact_id 
+		AND user_id='$user_id')";
+
+	$res=db_query($sql);
+	echo db_error();
+	echo html_build_multiple_select_box ($res,'addtoids[]',array(),8,false);
+	echo '<P>
+	<INPUT type="submit" name="submit" value="Add To Tracker">&nbsp;<INPUT type="checkbox" name="add_all"> Add To All
+	</FORM>
+	</CENTER>';
+
+}
+
+project_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/project/admin/vhost.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/project/admin/vhost.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/project/admin/vhost.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,149 @@
+<?php
+/**
+  *
+  * Project Admin page to manage group's VHOST entries
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('common/include/vars.php');
+require_once('www/project/admin/project_admin_utils.php');
+
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+
+$group = &group_get_object($group_id);
+
+if (!$group || !is_object($group)) {
+        exit_error('Error','Error creating group object');
+} else if ($group->isError()) {
+        exit_error('ERROR',$group->getErrorMessage());
+}
+
+if ($createvhost) {
+
+	$homedir = account_group_homedir($group->getUnixName());
+	$docdir = $homedir.'/htdocs/';
+	$cgidir = $homedir.'/cgi-bin/';
+
+	if (valid_hostname($vhost_name)) {
+
+		$res = db_query("
+			INSERT INTO prweb_vhost(vhost_name, docdir, cgidir, group_id) 
+			values ('$vhost_name','$docdir','$cgidir',".$group->getID().")
+		"); 
+
+		if (!$res || db_affected_rows($res) < 1) {
+			$feedback .= "Cannot insert VHOST entry: ".db_error();
+		} else {
+			$feedback .= "Virtual Host scheduled for creation.";
+			$group->addHistory('Added vhost '.$vhost_name.' ','');
+		}
+
+	} else {
+
+		$feedback .= "Not a valid hostname - $vhost_name"; 
+
+	}
+}
+
+
+if ($deletevhost) {
+
+	//schedule for deletion
+
+	$res =	db_query("
+		SELECT * 
+		FROM prweb_vhost 
+		WHERE vhostid='$vhostid'
+	");
+
+	$row_vh = db_fetch_array($res);
+
+	$res = db_query("
+		DELETE FROM prweb_vhost 
+		WHERE vhostid='$vhostid' 
+		AND group_id='$group_id'
+	");
+
+	if (!$res || db_affected_rows($res) < 1) {
+		$feedback .= "Could not delete VHOST entry:".db_error();
+	} else {
+		$feedback .= "VHOST deleted";	
+		$group->addHistory('Virtual Host '.$row_vh['vhost_name'].' Removed','');
+
+	}
+
+}
+
+project_admin_header(array('title'=>'Editing Virtual Host Info','group'=>$group->getID(),'pagename'=>'project_admin_vhost','sectionvals'=>array(group_getname($group_id))));
+
+?>
+
+<p>
+
+<b><u>Add New Virtual Host</u></b>
+<p>
+To add a new virtual host - simply point a <b>CNAME</b> for <i>yourhost.org</i> at
+<b>usw-pr-vhost.sourceforge.net</b>.  SourceForge does not currently host mail (i.e. cannot be an MX)
+or DNS</b>.  
+<p>
+Clicking on "create" will schedule the creation of the Virtual Host.  This will be
+synced to the project webservers - such that <i>yourhost.org</i> will display the 
+material at <i><?php echo $group->getUnixName(); ?>.sourceforge.net</i>.
+
+<p>
+
+<form name="new_vhost" action="<?php echo $PHP_SELF.'?group_id='.$group->getID().'&createvhost=1'; ?>" method="post"> 
+<table border = 0>
+<tr>
+	<td> New Virtual Host <i>(e.g. vhost.org)</i> </td>
+	<td> <input type="text" size="15" maxlength="255" name="vhost_name"> </td>
+	<td> <input type="submit" value="Create"> </td>
+</tr>
+</table>
+</form>
+
+<?php
+
+$res_db = db_query("
+	SELECT *
+	FROM prweb_vhost 
+	WHERE group_id='".$group->getID()."'
+");
+	
+if (db_numrows($res_db) > 0) {
+
+        print '<table width="50%"><tr><td>';
+
+       	$title=array();
+       	$title[]='Virtual Host';
+       	$title[]='Operations';
+	echo html_build_list_table_top($title);
+
+	while ($row_db = db_fetch_array($res_db)) {
+
+		print '	<tr>
+			<td>'.$row_db['vhost_name'].'</td>
+			<td>[ <b><a href="'.$PHP_SELF.'?group_id='.$group->getID().'&vhostid='.$row_db['vhostid'].'&deletevhost=1">Delete</a> </b>]
+			</tr>	
+		';
+			 
+	}
+	print ' </table>';
+
+        print '</td></tr></table>';
+
+} else {
+	echo '<p>No VHOSTs defined</p>';
+}
+
+project_admin_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/register/projectinfo.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/register/projectinfo.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/register/projectinfo.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,294 @@
+<?php
+/**
+  *
+  * Project Registration: Project Information.
+  *
+  * This page is used to request data required for project registration:
+  *	 o Project Public Name
+  *	 o Project Registartion Purpose
+  *	 o Project License
+  *	 o Project Public Description
+  *	 o Project Unix Name
+  * All these data are more or less strictly validated.
+  *
+  * This is last page in registartion sequence. Its successful subsmission
+  * leads to creation of new group with Pending status, suitable for approval.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('common/include/vars.php');
+
+session_require(array('isloggedin'=>'1'));
+
+if ($submit) {
+	$full_name = trim($full_name);
+	$purpose = trim($purpose);
+	$license_other = trim($license_other);
+	$description = trim($description);
+	$unix_name = strtolower($unix_name);
+
+	/*
+		Fierce validation
+	*/
+
+	if (strlen($full_name)<3) {
+		$feedback .= "Invalid Full Name";
+	} else if (!account_groupnamevalid($unix_name)) {
+		$feedback .= "Invalid Unix Name";
+	} else if (db_numrows(db_query("SELECT group_id FROM groups WHERE unix_group_name='$unix_name'")) > 0) {
+		$feedback .= "Unix group name already taken";
+	} else if (strlen($purpose)<20) {
+		$feedback .= "Please describe your
+			Registration Purpose in a more comprehensive manner";
+	} else if (strlen($description)<10) {
+		$feedback .= "Please use more comprehensive Project Description";
+	} else if (!$license) {
+		$feedback .= "You have not chosen a license";
+	} else if ($license!="other" && $license_other) {
+		$feedback .= "Conflicting licenses choice";
+	} else if ($license=="other" && strlen($license_other)<50) {
+		$feedback .= "Please give more comprehensive licensing description";
+	} else {
+		$group = new Group();
+		$u =& session_get_user();
+		$res = $group->create(
+			$u,
+			$full_name,
+			$unix_name,
+			$description,
+			$license,
+			$license_other,
+			$purpose
+		);
+
+		if (!$res) {
+			$feedback .= $group->getErrorMessage();
+		} else {
+			$HTML->header(array('title'=>'Registration Complete','pagename'=>'register_complete'));
+
+			?>
+
+			<p>Your project has been submitted to the SourceForge admininstrators.
+			Within 72 hours, you will receive decision notification and further
+			instructions.
+			</p>
+			<p>
+			Thank you for choosing SourceForge.
+			</p>
+
+			<?php
+
+			$HTML->footer(array());
+			exit();
+		}
+
+	}
+} else if ($i_disagree) {
+	session_redirect("/");
+}
+
+site_header(array('title'=>'Project Information','pagename'=>'register_projectinfo'));
+?>
+
+<p>
+To apply for project registration, you should fill in basic information
+about it. Please read descriptions below carefully and provide complete
+and comprehensive data. All fields below are mandatory.
+</p>
+
+<form action="<?php echo $PHP_SELF; ?>" method="POST">
+
+<H3>1. Project Full Name</H3>
+
+
+<p>
+You should start with specifying the name of your project.
+The "Full Name" is descriptive, and has no arbitrary restrictions (except
+a 40 character limit).
+</p>
+
+
+Full Name:
+<BR>
+<INPUT size="40" maxlength="40" type=text name="full_name" value="<?php echo $full_name; ?>">
+
+<H3>2. Project Purpose and Summarization</H3>
+<P>
+<B></B>
+<P>
+<b>
+Please provide detailed, accurate description of your project and
+what SourceForge resources and in which way you plan to use. This
+description will be the basis for the approval or rejection of
+your project's hosting on SourceForge, and later, to ensure that
+you are using the services in the intended way. This description
+will not be used as a public description of your project. It must
+be written in English.
+</b>
+<P>
+<font size="-1">
+<TEXTAREA name="purpose" wrap="virtual" cols="70" rows="10">
+<?php echo $purpose; ?>
+</TEXTAREA>
+</font>
+
+<h3>3. License</h3>
+
+<P><B><I>If you are applying for a website-only project, please
+select "website-only" from the choices below and proceed.</I></B>
+
+<P>SourceForge was created to advance Open Source software development.
+To keep things simple, we are relying on the outstanding work
+of the <A href="http://www.opensource.org">Open Source Initiative</A>
+for our licensing choices.
+
+<P>We realize, however that there may be other licenses out there
+that may better fit your needs. If you wish to use a license that is
+not OSI Certified, please let us know why you wish to use another
+license.
+
+<P>Choosing a license is a serious decision. Please take some time
+to read the text (and our explanations) of several licenses before
+making a choice about your project.
+
+<P>You may change the license for your project at a
+later date, so long as you have a legal capability to do so, your file
+release clearly relates this change, and your filemap categorization is
+updated appropriately. <i>Please note that license changes are not
+retroactive (i.e. do not apply to products already released under
+OpenSource license).</i>
+
+<P>SourceForge is not responsible for legal discrepencies regarding
+your license.
+
+<P><B>Licenses</B>
+
+<UL>
+<LI><A href="http://www.opensource.org/licenses/gpl-license.html" target="_blank">GNU General Public License (GPL)</A>
+<LI><A href="http://www.opensource.org/licenses/lgpl-license.html" target="_blank">GNU Library Public License (LGPL)</A>
+<LI><A href="http://www.opensource.org/licenses/bsd-license.html" target="_blank">BSD License</A>
+<LI><A href="http://www.opensource.org/licenses/mit-license.html" target="_blank">MIT License</A>
+<LI><A href="http://www.opensource.org/licenses/artistic-license.html" target="_blank">Artistic License</A>
+<LI><A href="http://www.opensource.org/licenses/mozilla1.0.html" target="_blank">Mozilla Public License 1.0 (MPL)</A>
+<LI><A href="http://www.opensource.org/licenses/qtpl.html" target="_blank">Q Public License (QPL)</A>
+<LI><A href="http://www.opensource.org/licenses/ibmpl.html" target="_blank">IBM Public License 1.0</A>
+<LI><A href="http://www.opensource.org/licenses/mitrepl.html" target="_blank">MITRE Collaborative Virtual Workspace License (CVW License)</A>
+<LI><A href="http://www.opensource.org/licenses/ricohpl.html" target="_blank">Ricoh Source Code Public License 1.0</A>
+<LI><A href="http://www.opensource.org/licenses/pythonpl.html" target="_blank">Python License</A>
+<LI><A href="http://www.opensource.org/licenses/zlib-license.html" target="_blank">zlib/libpng License</A>
+<LI><A href="http://www.opensource.org/licenses/apachepl.html" target="_blank">Apache Software License</A>
+<LI><A href="http://www.opensource.org/licenses/vovidapl.html" target="_blank">Vovida Software License 1.0</A>
+<LI><A href="http://www.opensource.org/licenses/sisslpl.html" target="_blank">Sun Internet Standards Source License (SISSL)</A>
+<LI><A href="http://www.opensource.org/licenses/intel-open-source-license.html" target="_blank">Intel Open Source License</A>
+<LI><A href="http://www.opensource.org/licenses/mozilla1.1.html" target="_blank">Mozilla Public License 1.1 (MPL 1.1)</A>
+<LI><A href="http://www.opensource.org/licenses/jabberpl.html" target="_blank">Jabber Open Source License</A>
+<LI><A href="http://www.opensource.org/licenses/nokia.html" target="_blank">Nokia Open Source License</A>
+<LI><A href="http://www.opensource.org/licenses/sleepycat.html" target="_blank">Sleepycat License</A>
+<LI><A href="http://www.opensource.org/licenses/nethack.html" target="_blank">Nethack General Public License</A>
+<LI><A href="http://oss.software.ibm.com/developerworks/opensource/license-cpl.html" target="_blank">IBM Common Public License</A>
+<LI><A href="http://www.opensource.apple.com/apsl/" target="_blank">Apple Public Source License</A>
+<LI><A href="http://www.sourceforge.net/register/publicdomain.txt" target="_blank">Public Domain</A>
+<LI>Website Only
+<LI>Other/Proprietary License
+
+</UL>
+
+<P><B>License for This Project</B>
+
+<B>Your License:</B><BR>
+<?php
+
+// create SELECT based on $LICENSE array in common/include/vars.php
+//
+	echo '<SELECT NAME="license">';
+	echo '<OPTION value="">(select)'."\n";
+	while (list($k,$v) = each($LICENSE)) {
+		print "<OPTION value=\"$k\"";
+		if ($license == $k) {
+			print " SELECTED";
+		}
+		print ">$v\n";
+	}
+	echo '</SELECT>';
+
+?>
+<P>
+If you selected "other", please provide an explanation along
+with a description of your license. Realize that other licenses may
+not be approved. Also, it may take additional time to make a decision
+for such project, since we will need to check that license is compatible
+with the OpenSource definition.
+<BR>
+<TEXTAREA name="license_other" wrap=virtual cols=60 rows=5>
+<?php echo $license_other; ?>
+</TEXTAREA>
+<P>
+
+
+<h3>4. Project Public Description</h3>
+<p>
+This is the description of your project which will be shown on
+the Project Summary page, in search results, etc. It should not
+be as comprehensive and formal as Project Purpose description
+(step 2), so feel free to use concise and catchy wording. Maximum
+length is 255 chars.
+</p>
+<font size="-1">
+<TEXTAREA name="description" wrap="virtual" cols="70" rows="5">
+<?php echo $description; ?>
+</TEXTAREA>
+</font>
+
+<H3>5. Project Unix Name</H3>
+<p>
+In addition to full project name, you will need to choose short,
+"Unix" name for your project.
+</p>
+
+<P> The "Unix Name" has several restrictions because it is
+used in so many places around the site. They are:
+
+<UL>
+<LI>Cannot match the unix name of any other project
+<LI>Must be between 3 and 15 characters in length
+<LI>Must be in lower case
+<LI>Can only contain characters, numbers, and dashes
+<LI>Must be a valid unix username
+<LI>Cannot match one of our reserved domains
+<LI>Unix name will never change for this project
+</UL>
+
+<P>Your unix name is important, however, because it will be used for
+many things, including:
+
+<UL>
+<LI>A web site at <tt>unixname.<?php echo $GLOBALS['sys_default_domain']; ?></tt>
+<LI>A CVS Repository root of <tt>/cvsroot/unixname</tt> at <tt>cvs.unixname.<?php echo $GLOBALS['sys_default_domain']; ?></tt>
+<LI>Shell access to <tt>unixname.<?php echo $GLOBALS['sys_default_domain']; ?></tt>
+<LI>Search engines throughout the site
+</UL>
+
+<P>Unix Name:
+<BR>
+<input type=text maxlength="15" SIZE="15" name="unix_name" value="<?php echo $unix_name; ?>">
+
+<div align="center">
+<input type=submit name="submit" value="I AGREE"> <INPUT type=submit name="i_disagree" value="I DISAGREE">
+</div>
+
+</form>
+
+<?php
+
+site_footer(array());
+
+?>
+

Added: trunk/gforge_base/evolvisforge/gforge/www/stats/lastlogins.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/stats/lastlogins.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/stats/lastlogins.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,54 @@
+<?php
+/**
+  *
+  * Page to view latest logins to the site
+  *
+  * WARNING: this should probably be moved to /stats/ for consistency
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+require_once('pre.php');
+
+session_require(array('group'=>'1','admin_flags'=>'A'));
+
+$res_logins = db_query("SELECT session.user_id AS user_id,"
+	. "session.ip_addr AS ip_addr,"
+	. "session.time AS time,"
+	. "users.user_name AS user_name FROM session,users "
+	. "WHERE session.user_id=users.user_id AND "
+	. "session.user_id>0 AND session.time>0 ORDER BY session.time DESC",50);
+
+if (!$res_logins || db_numrows($res_logins) < 1) {
+	exit_error("No records found","Database error: ".db_error());
+}
+
+$HTML->header(array('title'=>"Last Logins"));
+
+print '<h3>Most Recent Opened Sessions</h3>';
+
+$title=array();
+$title[]='Date';
+$title[]='Username';
+$title[]='Source IP';
+
+echo html_build_list_table_top($title);
+
+while ($row_logins = db_fetch_array($res_logins)) {
+	print '<TR>';
+	print '<TD>'.date($sys_datefmt, $row_logins['time']).'</TD>';
+	print '<TD>'.$row_logins['user_name'].'</TD>';
+	print '<TD>'.$row_logins['ip_addr'].'</TD>';
+	print '</TR>';
+}
+
+print '</table>';
+
+$HTML->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/testsecurity.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/testsecurity.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/testsecurity.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,62 @@
+<?php
+
+require_once('pre.php');
+
+$HTML->header(array('title'=>'Security Test'));
+
+$group_id=1;
+
+$grp =& group_get_object($group_id);
+$perm =& $grp->getPermission( session_get_user() );
+
+echo '<BR>Is admin: '.$perm->isAdmin();
+echo '<BR>Is DocEditor: '.$perm->isDocEditor();
+echo '<BR>Is ForumAdmin: '.$perm->isForumAdmin();
+echo '<BR>Is PMadmin: '.$perm->isPMAdmin();
+echo '<BR>Is ArtifactAdmin: '.$perm->isArtifactAdmin();
+echo '<BR>Is release: '.$perm->isReleaseTechnician();
+
+echo '<BR>user_ismember(): '.user_ismember($group_id);
+echo '<BR>user_ismember(A): '.user_ismember($group_id,'A');
+echo '<BR>user_ismember(B1): '.user_ismember($group_id,'B1');
+echo '<BR>user_ismember(B2): '.user_ismember($group_id,'B2');
+echo '<BR>user_ismember(S1): '.user_ismember($group_id,'S1');
+echo '<BR>user_ismember(S2): '.user_ismember($group_id,'S2');
+echo '<BR>user_ismember(C1): '.user_ismember($group_id,'C1');
+echo '<BR>user_ismember(C2): '.user_ismember($group_id,'C2');
+echo '<BR>user_ismember(P1): '.user_ismember($group_id,'P1');
+echo '<BR>user_ismember(P2): '.user_ismember($group_id,'P2');
+echo '<BR>user_ismember(F2): '.user_ismember($group_id,'F2');
+echo '<BR>user_ismember(D1): '.user_ismember($group_id,'D1');
+
+
+echo '<P>Group2<P>';
+
+$group_id=2;
+
+$grp =& group_get_object($group_id);
+$perm =& $grp->getPermission( session_get_user() );
+
+echo '<BR>Is admin: '.$perm->isAdmin();
+echo '<BR>Is DocEditor: '.$perm->isDocEditor();
+echo '<BR>Is ForumAdmin: '.$perm->isForumAdmin();
+echo '<BR>Is PMadmin: '.$perm->isPMAdmin();
+echo '<BR>Is ArtifactAdmin: '.$perm->isArtifactAdmin();
+echo '<BR>Is release: '.$perm->isReleaseTechnician();
+
+echo '<BR>user_ismember(): '.user_ismember($group_id);
+echo '<BR>user_ismember(A): '.user_ismember($group_id,'A');
+echo '<BR>user_ismember(B1): '.user_ismember($group_id,'B1');
+echo '<BR>user_ismember(B2): '.user_ismember($group_id,'B2');
+echo '<BR>user_ismember(S1): '.user_ismember($group_id,'S1');
+echo '<BR>user_ismember(S2): '.user_ismember($group_id,'S2');
+echo '<BR>user_ismember(C1): '.user_ismember($group_id,'C1');
+echo '<BR>user_ismember(C2): '.user_ismember($group_id,'C2');
+echo '<BR>user_ismember(P1): '.user_ismember($group_id,'P1');
+echo '<BR>user_ismember(P2): '.user_ismember($group_id,'P2');
+echo '<BR>user_ismember(F2): '.user_ismember($group_id,'F2');
+echo '<BR>user_ismember(D1): '.user_ismember($group_id,'D1');
+
+$HTML->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/themes/ultralite/Theme.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/themes/ultralite/Theme.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/themes/ultralite/Theme.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,309 @@
+<?php   
+/**
+  *
+  * UltraLite Web Theme
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: Theme.class,v 1.3 2001/05/22 16:06:38 pfalcon Exp $
+  *
+  */
+
+
+
+/*
+
+
+	Ultralight Theme class, extends basic Layout.class
+
+	Tim Perdue, December 18, 2000
+
+
+*/
+
+
+class Theme extends Layout {
+
+	var $theme_id;
+	var $long_name;
+	var $dir_name;
+
+	var $COLOR_HTMLBOX_TITLE = '#737b9c';
+
+	function Theme() {
+		// Parent constructor
+		$this->Layout();
+
+		//Define deifferences from defaults for this theme
+		$this->COLOR_HTMLBOX_TITLE = '#6C7198'; //GRAY';
+		$this->COLOR_HTMLBOX_BACK = '#EEEEEE';
+		$this->COLOR_LTBACK1 = '#EEEEEE';
+		$this->COLOR_CONTENT_BACK='WHITE';
+
+		$this->FONT_CONTENT = 'Lucida';
+		$this->FONT_HTMLBOX_TITLE = 'Lucida';
+
+		$this->FONTCOLOR_HTMLBOX_TITLE = '#FFFFFF';
+		$this->FONTCOLOR_CONTENT = '#000000';
+
+	}
+
+	function box1_top($title,$echoout=1,$bgcolor='') {
+			if (!$bgcolor) {
+					$bgcolor=$this->COLOR_HTMLBOX_BACK;
+			}
+//			$return = '
+//				<TABLE cellspacing="0" cellpadding="1" width="100%" border="0" bgcolor="'
+//				.$this->COLOR_HTMLBOX_TITLE.'"><TR><TD>';
+
+		$return .= '<TABLE cellspacing="1" cellpadding="2" width="100%" border="0" bgcolor="'.$bgcolor.'">'.
+						'<TR BGCOLOR="'.$this->COLOR_HTMLBOX_TITLE.'" align="center">'.
+						'<TD colspan=2><SPAN class=titlebar>'.$title.'</SPAN></TD></TR>'.
+						'<TR align=left>
+								<TD colspan=2>';
+			if ($echoout) {
+					print $return;
+			} else {
+					return $return;
+			}
+	}
+
+	function box1_middle($title,$bgcolor='') {
+			if (!$bgcolor) {
+					$bgcolor=$this->COLOR_HTMLBOX_BACK;
+			}
+			return '
+								</TD>
+						</TR>
+						<TR BGCOLOR="'.$this->COLOR_HTMLBOX_TITLE.'" align="center">
+								<TD colspan=2><SPAN class=titlebar>'.$title.'</SPAN></TD>
+						</TR>
+						<TR align=left bgcolor="'.$bgcolor.'">
+								<TD colspan=2>';
+	}
+
+	function box1_bottom($echoout=1) {
+			$return = '
+								</TD>
+						</TR>
+				</TABLE><P>';
+//</TD></TR></TABLE><P>';
+			if ($echoout) {
+					print $return;
+			} else {
+					return $return;
+			}
+	}
+
+	// ############################
+
+	function header($params) {
+			global $Language;
+
+			$this->generic_header_start($params);
+
+			//themable someday?
+			$site_fonts='verdana,arial,helvetica,sans-serif';
+
+			?>
+	<style type="text/css">
+	  <!--
+		.titlebar {text-decoration:none; color:<?php echo $thie->FONTCOLOR_HTMLBOX_TITLE; ?>; font-family: <?php echo $thie->FONT_HTMLBOX_TITLE; ?>,Lucida; font-weight: bold; font-size:<?php echo $this->FONTSIZE_HTMLBOX_TITLE; ?>}
+		.title {text-decoration:none; color:#000000; font-family: Helvetica; font-weight: bold; font-size:20px}
+		.normal {text-decoration:none; color:#000000; font-family: Helvetica; font-weight: light; font-size:12px}
+
+		BODY { background-color: <?php echo $this->COLOR_CONTENT_BACK; ?>; font-family: <?php echo $this->FONT_CONTENT; ?>,<?php echo $site_fonts; ?>; font-size:<?php echo $this->FONTSIZE; ?>; }
+
+		A { text-decoration: none; color #6666FF; }
+		A:visited { text-decoration: none; color: #6666AA; }
+		A:link { text-decoration: none; color: #6666AA; }
+		A:active { text-decoration: none; color: #6666AA; }
+		A:hover { text-decoration: none; color: #FF6666 }
+		OL,UL,P,BODY,TD,TR,TH,FORM,SPAN { font-family: <?php echo $this->FONT_CONTENT; ?>,arial,helvetica,sans-serif;color: #333333; }
+		H1,H2,H3,H4,H5,H6 { font-family: <?php echo $this->FONT_CONTENT; ?>,arial,helvetica,sans-serif }
+		PRE,TT { font-family: courier,sans-serif }
+
+		SPAN.center { text-align: center }
+		SPAN.boxspace { font-size: 2pt; }
+
+		A.maintitlebar { color: #FFFFFF }
+		A.maintitlebar:visited { color: #FFFFFF }
+
+		A.sortbutton { color: #FFFFFF; text-decoration: underline; }
+		A.sortbutton:visited { color: #FFFFFF; text-decoration: underline; }
+
+		A.menus { color: #000000; text-decoration: underline; }
+		A.menus:visited { color: #000000; text-decoration: underline; }
+
+		.tabs { color: #000000; }
+		.tabs:visited { color: #000000; }
+		.tabs:hover { color:#FF0000; }
+		.tabselect { color: #000000; font-weight: bold; }
+		.tabselect:visited { font-weight: bold;}
+		.tabselect:hover { color:#FF0000; font-weight: bold; }
+
+		SPAN.alignright { text-align: right }
+		SPAN.maintitlebar { font-size: small; color: #FFFFFF }
+		SPAN.titlebar { text-align: center; font-size: small; color: #FFFFFF; font-weight: bold }
+		SPAN.develtitle { text-align: center; font-size: small; color: #000000; font-weight: bold }
+
+		SPAN.osdn {font-size: x-small; font-family: verdana,arial,helvetica,sans-serif;}
+		SPAN.search {font-size: x-small; font-family: verdana,arial,helvetica,sans-serif;}
+		SPAN.slogan {font-size: large; font-weight: bold; font-family: verdana,arial,helvetica,sans-serif;}
+		SPAN.footer {font-size: x-small; font-family: verdana,arial,helvetica,sans-serif;}
+
+		TD.featurebox { font-size: small; }
+
+	  -->
+	</style>
+
+		<?php
+		$this->generic_header_end($params);
+		echo '<BODY bgcolor="'. $this->COLOR_CONTENT_BACK.'" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">';
+		osdn_print_navbar();
+?>
+		<!-- top title table -->
+<TABLE width="100%" border=0 cellspacing=0 cellpadding=0 bgcolor="<?php echo $this->COLOR_LTBACK1; ?>" valign="center">
+	<TR><TD COLSPAN=3 BGCOLOR="<?php echo $this->COLOR_LTBACK1; ?>"><?php echo html_blankimage(4,4); ?></TD></TR>
+
+	<TR>
+
+		<TD COLSPAN=3 valign="top" ALIGN=TOP bgcolor="<?php echo $this->COLOR_LTBACK1; ?>">
+			<A href="/"><?php 
+echo html_image('/images/sflogo2-steel.png','143','70',array('vspace'=>'0','align'=>'left'));
+//echo html_image($this->imgroot . "sflogo-hammer1.jpg","136","79",array());
+ ?></A>
+		<B>
+		<?php
+		if (!user_isloggedin()) {
+			print '<A href="/account/login.php">[Login]</A> |
+			<A href="/account/register.php">[New User]</A>';
+		} else {
+			print '<A href="/account/logout.php">[Logout]</A>
+			| <A href="/my/">[My Page]</A> 
+			| <A HREF="/account/">[Account Prefs]</A>';
+		}
+
+//vars needed for search functionality
+global $forum_id,$group_id,$is_bug_page;
+
+		print ' | <A href="/softwaremap/">[Software Map]</A>
+			| <A href="/docs/site/">[Docs]</A>';
+//			| <A HREF="/search/?is_bug_page='.$is_bug_page.'&group_id='.$group_id.'&forum_id='.$forum_id.'">[Search]</A></B>';
+
+		if (!session_issecure()) {
+			print '<IMG src="http://www2.valinux.com/clear.gif?id=105" width=1 height=1 alt="Counter">';
+		} else {
+			print '<IMG src="https://www2.valinux.com/clear.gif?id=105" width=1 height=1 alt="Counter">';
+		}
+
+		echo menu_show_search_box(true);
+
+		?>
+
+		</TD>
+	</TR>
+
+<!-- TABS ROW -->
+
+
+
+<!-- END TABS ROW -->
+	<TR><TD COLSPAN=3 BGCOLOR="WHITE"><?php echo html_blankimage(4,4); ?></TD></TR>
+	<TR>
+		<TD WIDTH=10 BGCOLOR="WHITE">
+		&nbsp;
+		</TD>
+
+		<TD BGCOLOR="WHITE">
+
+        	<?php
+
+        	if ($params['titlevals']) {
+                	$title =        $Language->getText($params['pagename'],'title',$params['titlevals']);
+        	} else {
+                	$title =        $Language->getText($params['pagename'],'title');
+        	}
+
+        	if ($params['sectionvals']) {
+                	$section =      $Language->getText($params['pagename'],'section',$params['sectionvals']);
+        	} else {
+                	$section =      $Language->getText($params['pagename'],'section');
+        	}
+
+        	if ($section) {
+                	print "<b>$section</b>\n";
+        	}
+
+        	if ($title) {
+               	print "<h2>$title</h2>\n";
+        	}
+
+	}
+
+
+
+	// ############################
+
+	function footer($params) {
+
+		?>
+		</TD>
+		<TD WIDTH=10 BGCOLOR="WHITE">
+		&nbsp;
+		</TD>
+  	</TR>
+	<TR><TD COLSPAN=3 BGCOLOR="WHITE"><?php echo html_blankimage(4,4); ?></TD></TR>
+</TABLE>
+
+<!-- end themed page footer -->
+		<?php
+			$this->generic_footer($params);
+	}
+
+	function menuhtml_top($title) {
+			/*
+					Use only for the top most menu
+			*/
+	?>
+		<table cellspacing="0" cellpadding="3" width="100%" border="0" bgcolor="<?php echo $this->COLOR_TITLEBAR_BACK; ?>">
+		<tr bgcolor="<?php echo $this->COLOR_HTMLBOX_TITLE; ?>">
+		<td align="center">
+		<?php html_blankimage(1,135); ?><BR>
+		<span class="titlebar"><font color="#ffffff"><?php print $title; ?></font></span></td>
+		</tr>
+		<tr align="left" BGCOLOR="<?php echo $this->COLOR_LTBACK1; ?>"><td>
+		<?php
+	}
+
+	function menuhtml_bottom() {
+			/*
+					End the table
+			*/
+			print '
+
+		</TD>
+		</TR></TABLE>
+';
+	}
+
+	function menu_entry($link, $title) {
+			print "\t".'<font face="arial, helvetica" size="2"><A class="menus" href="'.$link.'">'.$title.'</A></font><br>';
+	}
+/*
+	function tab_entry($url='http://localhost/', $icon='/images/ic/home16b.png', $title='Home', $selected=0) {
+			print '
+				<A ';
+			if ($selected) {
+					print 'class=tabs ';
+			}
+			print 'href="'. $url .'">';
+			html_image($icon,'24','24',array('alt'=>"$title",'border'=>($selected?'1':'0')));
+			print '</A>';
+	}
+
+*/
+}
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/top/topusers.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/top/topusers.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/top/topusers.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,101 @@
+<?php
+/**
+  *
+  * SourceForge Top-Statistics: Highest-Ranked Users
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+// Results per page
+$LIMIT = 50; 
+
+require_once('pre.php');
+
+$yesterday = time()-60*60*24;
+$yd_month = date('Ym', $yesterday);
+$yd_day = date('d', $yesterday);
+
+$res_top = db_query("
+	SELECT user_metric.ranking,users.user_name,users.realname,
+		user_metric.metric,user_metric_history.ranking AS old_ranking
+	FROM users,user_metric LEFT JOIN user_metric_history 
+		ON (user_metric.user_id=user_metric_history.user_id 
+		    AND user_metric_history.month='$yd_month'
+		    AND user_metric_history.day='$yd_day')
+	WHERE users.user_id=user_metric.user_id
+	ORDER BY ranking ASC
+", $LIMIT, $offset);
+
+
+if (!$res_top || db_numrows($res_top)<1) {
+	exit_error(
+		'Information not available',
+		'Information about highest ranked users is not available. '
+		.db_error()
+	);
+}
+
+$HTML->header(array('title'=>'Highest Ranked Users'));
+
+print '<h1>Highest Ranked Users</h1>
+<BR><I>(Updated Daily)</I>
+
+<P><A href="/top/">[View Other Top Categories]</A>
+
+<P><TABLE width="100%" cellpadding=0 cellspacing=0 border=0>
+<TR valign="top">
+<TD><B>Rank</B></TD>
+<TD><B>User Name<BR>&nbsp;</B></TD>
+<TD><B>Real Name<BR>&nbsp;</B></TD>
+<TD align="right"><B>Rating</B></TD>
+<TD align="right"><B>Last Rank</B></TD>
+<TD align="right"><B>Change</B>&nbsp;&nbsp;&nbsp;</TD></TR>
+';
+
+while ($row_top = db_fetch_array($res_top)) {
+	$i++;
+	print '<TR BGCOLOR="'. html_get_alt_row_color($i) .'"><TD>&nbsp;&nbsp;'.$row_top['ranking']
+		.'</TD><TD><A href="/users/'. $row_top['user_name'] .'/">'
+		.$row_top['user_name'].'</A></td>'
+		.'<td>'.$row_top['realname'].'</td>'
+		.'</TD><TD align="right">'.sprintf('%.2f', $row_top['metric'])
+		.'&nbsp;&nbsp;&nbsp;</TD><TD align="right">'.$row_top['old_ranking']
+		.'&nbsp;&nbsp;&nbsp;</TD>'
+		.'<TD align="right">';
+
+	// calculate change
+	$diff = $row_top["old_ranking"] - $row_top["ranking"];
+	if (!$row_top["old_ranking"] || !$row_top["ranking"]) {
+		print "N/A";
+	}
+	else if ($diff == 0) {
+		print "Same";
+	}
+	else if ($diff > 0) {
+		print "<FONT color=\"#009900\">Up $diff</FONT>";
+	}
+	else if ($diff < 0) {
+		print "<FONT color=\"#CC0000\">Down ".(0-$diff)."</FONT>";
+	}
+
+	print '&nbsp;&nbsp;&nbsp;</TD></TR>
+';
+}
+
+print '</TABLE>';
+
+print ' <table width="100%">
+	<TR BGCOLOR="'.$HTML->COLOR_LTBACK2.'">
+        <TD>'.(($offset>=$LIMIT)?'<A HREF="topusers.php?&offset='.($offset-50).'"><B><-- More</B></A>':'&nbsp;').'</TD>
+	<TD ALIGN="RIGHT"><A HREF="topusers.php?offset='.($offset+50).'"><B>More --></B></A></TD></TR>
+	</table>
+';
+
+$HTML->footer(array());
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tos/privacy_generic.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tos/privacy_generic.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tos/privacy_generic.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,30 @@
+<?php
+/**
+  *
+  * Generic Privacy Policy
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: privacy_generic.php,v 1.1 2001/06/19 18:56:09 jbyers Exp $
+  *
+  */
+
+require_once('pre.php');
+
+$HTML->header(array(title=>'Privacy Policy'));
+?>
+
+<p>
+<h2>Privacy Policy</h2>
+</p>
+
+<p>
+Insert privacy policy statement here.
+
+<?php
+$HTML->footer(array());
+
+?>
+

Added: trunk/gforge_base/evolvisforge/gforge/www/tos/tos_generic.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tos/tos_generic.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tos/tos_generic.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,25 @@
+<?php
+/**
+  *
+  * Generic Terms of Service text
+  *
+  * This should be pure HTML content, as it is included in several
+  * other pages.
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: tos_generic.php,v 1.1 2001/06/19 18:56:09 jbyers Exp $
+  *
+  */
+?>
+
+<p>
+<h2>Terms of Service Agreement</h2>
+</p>
+
+<p>
+Insert terms of service statement here.
+
+

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/add.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/add.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/add.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,100 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+$ath->header(array ('title'=>'Submit','pagename'=>'tracker_add','sectionvals'=>array($ath->getName())));
+
+	echo '
+	<P>';
+	/*
+	    Show the free-form text submitted by the project admin
+	*/
+	echo $ath->getSubmitInstructions();
+
+	echo '<P>
+	<FORM ACTION="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'" METHOD="POST" enctype="multipart/form-data">
+	<INPUT TYPE="HIDDEN" NAME="func" VALUE="postadd">
+	<TABLE>
+	<TR><TD VALIGN="TOP" COLSPAN="2"><B>For Project:</B><BR>'.$group->getPublicName().'</TD></TR>
+	<TR><TD VALIGN="TOP"><B>Category: <A href="javascript:help_window(\'/help/tracker.php?helpname=category\')"><B>(?)</B></A></B><BR>';
+
+		echo $ath->categoryBox('category_id');
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_cat=1">(admin)</A>';
+	?>
+	</TD><TD><B>Group: <A href="javascript:help_window('/help/tracker.php?helpname=group')"><b>(?)</b></a></B><BR>
+	<?php
+		echo $ath->artifactGroupBox('artifact_group_id');
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_group=1">(admin)</A>';
+	?>
+	</TD></TR>
+	<?php 
+	if ($ath->userIsAdmin()) {
+		echo '<TR><TD><B>Assigned To: <A href="javascript:help_window(\'/help/tracker.php?helpname=assignee\')"><b>(?)</b></a></B><BR>';
+		echo $ath->technicianBox ('assigned_to');
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&update_users=1">(admin)</A>';
+
+		echo '</TD><TD><B>Priority: <A href="javascript:help_window(\'/help/tracker.php?helpname=priority\')"><b>(?)</b></a></B><BR>';
+		echo build_priority_select_box('priority');
+		echo '</TD></TR>';
+	}
+	?>
+	<TR><TD COLSPAN="2"><B>Summary: <A href="javascript:help_window('/help/tracker.php?helpname=summary')"><b>(?)</b></a></B><BR>
+		<INPUT TYPE="TEXT" NAME="summary" SIZE="35" MAXLENGTH="40">
+	</TD></TR>
+
+	<TR><TD COLSPAN="2">
+		<B>Detailed Description:</B>
+		<P>
+		<TEXTAREA NAME="details" ROWS="30" COLS="55" WRAP="HARD"></TEXTAREA>
+	</TD></TR>
+
+	<TR><TD COLSPAN="2">
+	<?php 
+	if (!user_isloggedin()) {
+		echo '
+		<h3><FONT COLOR="RED">Please <A HREF="/account/login.php?return_to='. urlencode($REQUEST_URI) .'">log in!</A></FONT></h3><BR>
+		If you <B>cannot</B> login, then enter your email address here:<P>
+		<INPUT TYPE="TEXT" NAME="user_email" SIZE="30" MAXLENGTH="35">
+		';
+
+	} 
+	?>
+		<P>
+		<H3><FONT COLOR=RED>DO NOT enter passwords or other confidential information!</FONT></H3>
+		<P>
+	</TD></TR>
+
+	<TR><TD COLSPAN=2>
+		<B>Check to Upload &amp; Attach File:</B> <input type="checkbox" name="add_file" VALUE="1"> 
+		<A href="javascript:help_window('/help/tracker.php?helpname=comment')"><b>(?)</b></a><BR>
+		<P>
+		<input type="file" name="input_file" size="30">
+		<P>
+		<B>File Description:</B><BR>
+		<input type="text" name="file_description" size="40" maxlength="255">
+		<P>
+	</TD><TR>
+
+	<TR><TD COLSPAN=2>
+		<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="SUBMIT">
+		</FORM>
+		<P>
+	</TD></TR>
+
+	</TABLE>
+
+	<?php
+
+	$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/admin/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/admin/index.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,797 @@
+<?php
+//
+// SourceForge: Breaking Down the Barriers to Open Source Development
+// Copyright 1999-2000 (c) The SourceForge Crew
+// http://sourceforge.net
+//
+// $Id$
+
+require_once('pre.php');
+require_once('common/tracker/Artifact.class');
+require_once('common/tracker/ArtifactFile.class');
+require_once('www/tracker/include/ArtifactFileHtml.class');
+require_once('common/tracker/ArtifactType.class');
+require_once('www/tracker/include/ArtifactTypeHtml.class');
+require_once('www/tracker/include/ArtifactHtml.class');
+require_once('common/tracker/ArtifactGroup.class');
+require_once('common/tracker/ArtifactCategory.class');
+require_once('common/tracker/ArtifactCanned.class');
+require_once('common/tracker/ArtifactResolution.class');
+
+if ($group_id && $atid) {
+//
+//
+//		UPDATING A PARTICULAR ARTIFACT TYPE
+//
+//
+	//	
+	//  get the Group object
+	//	
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group) || $group->isError()) {
+		exit_no_group();
+	}
+
+	$perm =& $group->getPermission( session_get_user() );
+
+	if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
+		exit_permission_denied();
+	}
+
+	//
+	//  Create the ArtifactType object
+	//
+	$ath = new ArtifactTypeHtml($group,$atid);
+	if (!$ath || !is_object($ath)) {
+		exit_error('Error','ArtifactType could not be created');
+	}
+	if ($ath->isError()) {
+		exit_error('Error',$ath->getErrorMessage());
+	}
+
+	if ($post_changes) {
+//
+//
+//		Update the database
+//
+//
+		if ($add_cat) {
+
+			$ac = new ArtifactCategory($ath);
+			if (!$ac || !is_object($ac)) {
+				$feedback .= 'Unable to create ArtifactCategory Object';
+//			} elseif ($ac->isError()) {
+//				$feedback .= $ac->getErrorMessage();			
+			} else {
+				if (!$ac->create($name,$assign_to)) {
+					$feedback .= ' Error inserting: '.$ac->getErrorMessage();
+					$ac->clearError();
+				} else {
+					$feedback .= ' Category Inserted ';
+				}
+			}
+
+		} elseif ($add_group) {
+
+			$ag = new ArtifactGroup($ath);
+			if (!$ag || !is_object($ag)) {
+				$feedback .= 'Unable to create ArtifactGroup Object';
+//			} elseif ($ag->isError()) {
+//				$feedback .= $ag->getErrorMessage();
+			} else {
+				if (!$ag->create($name)) {
+					$feedback .= ' Error inserting: '.$ag->getErrorMessage();
+					$ag->clearError();
+				} else {
+					$feedback .= ' Group Inserted ';
+				}
+			}
+
+		} elseif ($add_canned) {
+
+			$acr = new ArtifactCanned($ath);
+			if (!$acr || !is_object($acr)) {
+				$feedback .= 'Unable to create ArtifactCanned Object';
+//			} elseif ($acr->isError()) {
+//				$feedback .= $acr->getErrorMessage();			
+			} else { 
+				if (!$acr->create($title,$body)) {
+					$feedback .= ' Error inserting: '.$acr->getErrorMessage();
+					$acr->clearError();
+				} else {
+					$feedback .= ' Canned Response Inserted ';
+				}
+			}
+
+		} elseif ($add_users) {
+
+			//
+			//	if "add all" option, get list of group members
+			//	who are not already members of this ArtifactType
+			//
+			if ($add_all) {
+				$sql="SELECT u.user_id
+				FROM users u,user_group ug
+				WHERE u.user_id=ug.user_id
+				AND ug.group_id='$group_id' 
+				AND NOT EXISTS (SELECT user_id FROM artifact_perm ap 
+				WHERE ap.group_artifact_id='$atid' 
+				AND ap.user_id=u.user_id);";
+				$addids=util_result_column_to_array(db_query($sql));
+			}
+			$count=count($addids);
+			for ($i=0; $i<$count; $i++) {
+				$ath->addUser($addids[$i]);
+			}
+			if ($ath->isError()) {
+				$feedback .= $ath->getErrorMessage();
+				$ath->clearError();
+			} else {
+				$feedback .= ' User(s) Added ';
+			}
+			//go to the perms page
+			$add_users=false;
+			$update_users=true;
+
+		} elseif ($update_users) {
+
+			//
+			//	Handle the 2-D array of user_id/permission level
+			//
+			$count=count($updateids);
+			for ($i=0; $i<$count; $i++) {
+				$ath->updateUser($updateids[$i][0],$updateids[$i][1]);
+			}
+			if ($ath->isError()) {
+				$feedback .= $ath->getErrorMessage();
+				$ath->clearError();
+			} else {
+				$feedback .= ' User(s) Updated ';
+			}
+
+			//
+			//	Delete the checked ids
+			//
+			$count=count($deleteids);
+			for ($i=0; $i<$count; $i++) {
+				$ath->deleteUser($deleteids[$i]);
+			}
+			if ($ath->isError()) {
+				$feedback .= $ath->getErrorMessage();
+				$ath->clearError();
+			} else {
+				$feedback .= ' User(s) Deleted ';
+			}
+
+		} elseif ($update_canned) {
+
+			$acr = new ArtifactCanned($ath,$id);
+			if (!$acr || !is_object($acr)) {
+				$feedback .= 'Unable to create ArtifactCanned Object';
+			} elseif ($acr->isError()) {
+				$feedback .= $acr->getErrorMessage();
+			} else {
+				if (!$acr->update($title,$body)) {
+					$feedback .= ' Error updating: '.$acr->getErrorMessage();
+					$acr->clearError();
+				} else {
+					$feedback .= ' Canned Response Updated ';
+					$update_canned=false;
+					$add_canned=true;
+				}
+			}
+
+		} elseif ($update_cat) {
+
+			$ac = new ArtifactCategory($ath,$id);
+			if (!$ac || !is_object($ac)) {
+				$feedback .= 'Unable to create ArtifactCategory Object';
+			} elseif ($ac->isError()) {
+				$feedback .= $ac->getErrorMessage();
+			} else {
+				if (!$ac->update($name,$assign_to)) {
+					$feedback .= ' Error updating: '.$ac->getErrorMessage();
+					$ac->clearError();
+				} else {
+					$feedback .= ' Category Updated ';
+					$update_cat=false;
+					$add_cat=true;
+				}
+			}
+
+		} elseif ($update_group) {
+
+			$ag = new ArtifactGroup($ath,$id);
+			if (!$ag || !is_object($ag)) {
+				$feedback .= 'Unable to create ArtifactGroup Object';
+			} elseif ($ag->isError()) {
+				$feedback .= $ag->getErrorMessage();
+			} else {
+				if (!$ag->update($name)) {
+					$feedback .= ' Error updating: '.$ag->getErrorMessage();
+					$ag->clearError();
+				} else {
+					$feedback .= ' Group Updated ';
+					$update_group=false;
+					$add_group=true;
+				}
+			}
+
+		} elseif ($update_type) {
+
+			if (!$ath->update($name,$description,$is_public,$allow_anon,$email_all,$email_address,
+				$due_period,$status_timeout,$use_resolution,$submit_instructions,$browse_instructions)) {
+				$feedback .= ' Error updating: '.$ath->getErrorMessage();
+				$ath->clearError();
+			} else {
+				$feedback .= ' Tracker Updated ';
+			}
+
+		}
+
+	} 
+//
+//
+//
+//		FORMS TO ADD/UPDATE DATABASE
+//
+//
+//
+	if ($add_cat) {
+//
+//  FORM TO ADD CATEGORIES
+//
+		$ath->adminHeader(array ('title'=>'Add Categories to: '.$ath->getName()));
+
+		echo "<H1>Add Categories to: ". $ath->getName() ."</H1>";
+
+		/*
+			List of possible categories for this ArtifactType
+		*/
+		$result=$ath->getCategories();
+		echo "<P>";
+		$rows=db_numrows($result);
+		if ($result && $rows > 0) {
+			$title_arr=array();
+			$title_arr[]='ID';
+			$title_arr[]='Title';
+			
+			echo html_build_list_table_top ($title_arr);
+			
+			for ($i=0; $i < $rows; $i++) {
+				echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'">'.
+					'<TD>'.db_result($result, $i, 'id').'</TD>'.
+					'<TD><A HREF="'.$PHP_SELF.'?update_cat=1&id='.
+						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						db_result($result, $i, 'category_name').'</A></TD></TR>';
+			}		   
+			echo '</TABLE>';
+		} else {
+			echo "\n<H1>No categories defined</H1>";
+		}
+		?>
+		<P>
+		<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+		<INPUT TYPE="HIDDEN" NAME="add_cat" VALUE="y">
+		<B>New Category Name:</B><BR>
+		<INPUT TYPE="TEXT" NAME="name" VALUE="" SIZE="15" MAXLENGTH="30"><BR>
+		<P>
+		<B>Auto-Assign To:</B><BR>
+		<?php echo $ath->technicianBox('assign_to'); ?>
+		<P>
+		<B><FONT COLOR="RED">Once you add a category, it cannot be deleted</FONT></B>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+		</FORM>
+		<?php
+
+		$ath->footer(array());
+
+	} elseif ($add_group) {
+//
+//  FORM TO ADD GROUP
+//
+		$ath->adminHeader(array ('title'=>'Add/Change Groups to: '.$ath->getName(),'pagename'=>'tracker_admin_add_group','titlevals'=>array($ath->getName())));
+
+		/*
+			List of possible groups for this ArtifactType
+		*/
+		$result=$ath->getGroups();
+		echo "<P>";
+		$rows=db_numrows($result);
+		if ($result && $rows > 0) {
+			$title_arr=array();
+			$title_arr[]='ID';
+			$title_arr[]='Title';
+			
+			echo html_build_list_table_top ($title_arr);
+			
+			for ($i=0; $i < $rows; $i++) {
+				echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'">'.
+					'<TD>'.db_result($result, $i, 'id').'</TD>'.
+					'<TD><A HREF="'.$PHP_SELF.'?update_group=1&id='.
+						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						db_result($result, $i, 'group_name').'</A></TD></TR>';
+			}		   
+			echo '</TABLE>';
+		} else {
+			echo "\n<H1>No groups defined</H1>";
+		}
+		?>
+		<P>
+		<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+		<INPUT TYPE="HIDDEN" NAME="add_group" VALUE="y">
+		<B>New group Name:</B><BR>
+		<INPUT TYPE="TEXT" NAME="name" VALUE="" SIZE="15" MAXLENGTH="30"><BR>
+		<P>
+		<B><FONT COLOR="RED">Once you add a group, it cannot be deleted</FONT></B>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+		</FORM>
+		<?php
+
+		$ath->footer(array());
+
+	} elseif ($add_canned) {
+//
+//  FORM TO ADD CANNED RESPONSES
+//
+		$ath->adminHeader(array ('title'=>'Add/Change Canned Responses to: '.$ath->getName()));
+
+		echo "<H1>Add Canned Responses to: ". $ath->getName() ."</H1>";
+
+		/*
+			List of existing canned responses
+		*/
+		$result=$ath->getCannedResponses();
+		$rows=db_numrows($result);
+		echo "<P>";
+
+		if ($result && $rows > 0) {
+			//code to show existing responses and link to update page
+			echo '
+			<H2>Existing Responses:</H2>
+			<P>';
+			$title_arr=array();
+			$title_arr[]='ID';
+			$title_arr[]='Title';
+
+			echo html_build_list_table_top ($title_arr);
+
+			for ($i=0; $i < $rows; $i++) {
+				echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'">'.
+					'<TD>'.db_result($result, $i, 'id').'</TD>'.
+					'<TD><A HREF="'.$PHP_SELF.'?update_canned=1&id='.
+						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						db_result($result, $i, 'title').'</A></TD></TR>';
+			}
+			echo '</TABLE>';
+
+		} else {
+			echo "\n<H1>No responses set up in this group</H1>";
+		}
+		?>
+		<P>
+		Creating useful generic messages can save you a lot of time when 
+		handling common artifact requests.
+		<P>
+		<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+		<INPUT TYPE="HIDDEN" NAME="add_canned" VALUE="y">
+		<b>Title:</b><BR>
+		<INPUT TYPE="TEXT" NAME="title" VALUE="" SIZE="50" MAXLENGTH="50">
+		<P>
+		<B>Message Body:</B><BR>
+		<TEXTAREA NAME="body" ROWS="30" COLS="65" WRAP="HARD"></TEXTAREA>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+		</FORM>
+		<?php
+
+		$ath->footer(array());
+
+	} elseif ($update_users) {
+//
+//  FORM TO ADD/UPDATE USERS
+//
+
+		$ath->adminHeader(array ('title'=>'Add/Update Users in: '.$ath->getName(),'pagename'=>'tracker_admin_update_users','titlevals'=>array($ath->getName())));
+
+		$sql="SELECT * FROM artifactperm_user_vw WHERE group_artifact_id='". $ath->getID() ."'";
+		$res=db_query($sql);
+
+		if (!$res || db_numrows($res) < 1) {
+			echo '<H2>No Developers Found</H2>';
+		} else {
+			?>
+			<P>
+			Each tracker that you define has separate user lists and user permissions.
+			<P>
+			Simply add developers to this tracker, then update their permissions.
+			<P>
+			<dt><B>Technicians</B></dt>
+			<dd>can be assigned items</dd>
+
+			<dt><B>Admins</B></dt>
+			<dd>can make changes to items</dd>
+
+			<FORM action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+			<INPUT TYPE="HIDDEN" NAME="update_users" VALUE="y">
+			<?php
+
+			$arr=array();
+			$arr[]='Delete';
+			$arr[]='User Name';
+			$arr[]='Permission';
+
+			echo html_build_list_table_top($arr);
+
+			$i=0;
+			//
+			//	PHP4 allows multi-dimensional arrays to be passed in from form elements
+			//
+			while ($row_dev = db_fetch_array($res)) {
+				print '
+				<INPUT TYPE="HIDDEN" NAME="updateids['.$i.'][0]" VALUE="'.$row_dev['user_id'].'">
+				<TR BGCOLOR="'. html_get_alt_row_color($i) .'">
+				<TD><INPUT TYPE="CHECKBOX" NAME="deleteids[]" VALUE="'.$row_dev['user_id'].'"> Delete</TD>
+
+				<TD>'.$row_dev['realname'].' ( '. $row_dev['user_name'] .' )</TD>
+
+				<TD><FONT size="-1"><SELECT name="updateids['.$i.'][1]">
+				<OPTION value="0"'.(($row_dev['perm_level']==0)?" selected":"").'>-
+				<OPTION value="1"'.(($row_dev['perm_level']==1)?" selected":"").'>Technician
+				<OPTION value="2"'.(($row_dev['perm_level']==2)?" selected":"").'>Tech & Admin
+				<OPTION value="3"'.(($row_dev['perm_level']==3)?" selected":"").'>Admin Only
+				</SELECT></FONT></TD>
+
+				</TR>';
+				$i++;
+			}
+			echo '<TR><TD COLSPAN=3 ALIGN=MIDDLE><INPUT type="submit" name="post_changes" value="Update Developer Permissions">
+			</FORM></TD></TR>';
+			echo '</TABLE>';
+		}
+		?>
+		<P>
+		<h3>Add These Users:</H3>
+		<P>
+		You can pick and choose users for your tracker, or simply add them all by checking "Add All Users".
+		<P>
+		<CENTER>
+		<FORM action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<INPUT TYPE="HIDDEN" NAME="add_users" VALUE="y">
+		<?php
+		$sql="SELECT u.user_id, u.realname 
+			FROM users u,user_group ug
+			WHERE u.user_id=ug.user_id
+			AND ug.group_id='$group_id' 
+			AND NOT EXISTS (SELECT user_id FROM artifact_perm ap 
+			WHERE ap.group_artifact_id='$atid'
+			AND ap.user_id=u.user_id);";
+
+		$res=db_query($sql);
+		echo db_error();
+		echo html_build_multiple_select_box ($res,'addids[]',array(),8,false);
+		echo '<P>
+		<INPUT type="submit" name="post_changes" value="Add Users">&nbsp;<INPUT type="checkbox" name="add_all"> Add All Users
+		</FORM>
+		</CENTER>';
+
+		$ath->footer(array());
+
+	} elseif ($update_canned) {
+//
+//	FORM TO UPDATE CANNED MESSAGES
+//
+		$ath->adminHeader(array ('title'=>'Update Canned Responses in: '.$ath->getName()));
+
+		echo "<H1>Update Canned Responses ". $ath->getName() ."</H1>";
+
+		$acr = new ArtifactCanned($ath,$id);
+		if (!$acr || !is_object($acr)) {
+			$feedback .= 'Unable to create ArtifactCanned Object';
+		} elseif ($acr->isError()) {
+			$feedback .= $acr->getErrorMessage();
+		} else {
+			?>
+			<P>
+			Creating useful generic messages can save you a lot of time when
+			handling common requests.
+			<P>
+			<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+			<INPUT TYPE="HIDDEN" NAME="update_canned" VALUE="y">
+			<INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo $acr->getID(); ?>">
+			<b>Title:</b><BR>
+			<INPUT TYPE="TEXT" NAME="title" VALUE="<?php echo $acr->getTitle(); ?>" SIZE="50" MAXLENGTH="50">
+			<P>
+			<B>Message Body:</B><BR>
+			<TEXTAREA NAME="body" ROWS="30" COLS="65" WRAP="HARD"><?php echo $acr->getBody(); ?></TEXTAREA>
+			<P>
+			<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+			</FORM>
+			<?php
+		}
+		$ath->footer(array());
+
+	} elseif ($update_cat) {
+//
+//  FORM TO UPDATE CATEGORIES
+//
+		/*
+			Allow modification of a artifact category
+		*/
+		$ath->adminHeader(array('title'=>'Change an Category in: '.$ath->getName()));
+
+		echo '
+			<H1>Modify an Category in: '. $ath->getName() .'</H1>';
+
+		$ac = new ArtifactCategory($ath,$id);
+		if (!$ac || !is_object($ac)) {
+			$feedback .= 'Unable to create ArtifactCategory Object';
+		} elseif ($ac->isError()) {
+			$feedback .= $ac->getErrorMessage();
+		} else {
+			?>
+			<P>
+			<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+			<INPUT TYPE="HIDDEN" NAME="update_cat" VALUE="y">
+			<INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo $ac->getID(); ?>">
+			<P>
+			<B>Category Name:</B><BR>
+			<INPUT TYPE="TEXT" NAME="name" VALUE="<?php echo $ac->getName(); ?>">
+			<P>
+			<B>Auto-Assign To:</B><BR>
+			<?php echo $ath->technicianBox('assign_to',$ac->getAssignee()); ?>
+			<P>
+			<B><FONT COLOR="RED">It is not recommended that you change the artifact 
+				category name because other things are dependent upon it. When you change 
+				the category name, all related items will be changed to the new name.</FONT></B>
+			<P>
+			<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+			</FORM>
+			<?php
+		}
+
+		$ath->footer(array());
+
+	} elseif ($update_group) {
+//
+//  FORM TO UPDATE GROUPS
+//
+		/*
+			Allow modification of a artifact group
+		*/
+		$ath->adminHeader(array('title'=>'Change a Group in: '.$ath->getName(),'pagename'=>'tracker_admin_update_group','titlevals'=>array($ath->getName())));
+
+		$ag = new ArtifactGroup($ath,$id);
+		if (!$ag || !is_object($ag)) {
+			$feedback .= 'Unable to create ArtifactGroup Object';
+		} elseif ($ag->isError()) {
+			$feedback .= $ag->getErrorMessage();
+		} else {
+			?>
+			<P>
+			<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+			<INPUT TYPE="HIDDEN" NAME="update_group" VALUE="y">
+			<INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo $ag->getID(); ?>">
+			<P>
+			<B>Group Name:</B><BR>
+			<INPUT TYPE="TEXT" NAME="name" VALUE="<?php echo $ag->getName(); ?>">
+			<P>
+			<B><FONT COLOR="RED">It is not recommended that you change the artifact 
+				group name because other things are dependent upon it. When you change 
+				the group name, all related items will be changed to the new name.</FONT></B>
+			<P>
+			<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+			</FORM>
+			<?php
+		}
+
+		$ath->footer(array());
+
+	} elseif ($update_type) {
+//
+//	FORM TO UPDATE ARTIFACT TYPES
+//
+		$ath->adminHeader(array ('title'=>'Tracker Administration: '.$ath->getName(),'pagename'=>'tracker_admin_update_type','titlevals'=>array($ath->getName())));
+
+		?>
+		<P>
+		<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
+		<INPUT TYPE="HIDDEN" NAME="update_type" VALUE="y">
+		<P>
+		<B>Name:</B> (examples: meeting minutes, test results, RFP Docs)<BR>
+		<?php if ($ath->getDataType()) {
+			echo $ath->getName();
+		} else { 
+			?>
+			<INPUT TYPE="TEXT" NAME="name" VALUE="<?php echo $ath->getName(); ?>">
+			<?php 
+		} 
+		?>
+		<P>
+		<B>Description:</B><BR>
+		<?php if ($ath->getDataType()) {
+			echo $ath->getDescription();
+		} else {
+			?>
+			<INPUT TYPE="TEXT" NAME="description" VALUE="<?php echo $ath->getDescription(); ?>" SIZE="50">
+			<?php 
+		} 
+		?>
+		<P>
+		<INPUT TYPE=CHECKBOX NAME="is_public" VALUE="1" <?php echo (($ath->isPublic())?'CHECKED':''); ?>> <B>Publicly Available</B><BR>
+		<INPUT TYPE=CHECKBOX NAME="allow_anon" VALUE="1" <?php echo (($ath->allowsAnon())?'CHECKED':''); ?>> <B>Allow non-logged-in postings</B><BR>
+		<INPUT TYPE=CHECKBOX NAME="use_resolution" VALUE="1" <?php echo (($ath->useResolution())?'CHECKED':''); ?>> <B>Display the "Resolution" box</B>
+		<P>
+		<B>Send email on new submission to address:</B><BR>
+		<INPUT TYPE="TEXT" NAME="email_address" VALUE="<?php echo $ath->getEmailAddress(); ?>">
+		<P>
+		<INPUT TYPE=CHECKBOX NAME="email_all" VALUE="1" <?php echo (($ath->emailAll())?'CHECKED':''); ?>> <B>Send email on all changes</B><BR>
+		<P>
+		<B>Days till considered overdue:</B><BR>
+		<INPUT TYPE="TEXT" NAME="due_period" VALUE="<?php echo ($ath->getDuePeriod() / 86400); ?>">
+		<P>
+		<B>Days till pending tracker items time out:</B><BR>
+		<INPUT TYPE="TEXT" NAME="status_timeout"  VALUE="<?php echo($ath->getStatusTimeout() / 86400); ?>">
+		<P>
+		<B>Free form text for the "submit new item" page:</B><BR>
+		<TEXTAREA NAME="submit_instructions" ROWS="10" COLS="55" WRAP="HARD"><?php echo $ath->getSubmitInstructions(); ?></TEXTAREA>
+		<P>
+		<B>Free form text for the "browse items" page:</B><BR>
+		<TEXTAREA NAME="browse_instructions" ROWS="10" COLS="55" WRAP="HARD"><?php echo $ath->getBrowseInstructions(); ?></TEXTAREA>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+		</FORM>
+		<?php
+
+		$ath->footer(array());
+
+	} else {
+//
+//  SHOW LINKS TO FEATURES
+//
+
+		$ath->adminHeader(array ('title'=>'Tracker Administration: '.$ath->getName(),'pagename'=>'tracker_admin','titlevals'=>array($ath->getName())));
+
+		echo '<P>
+			<A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_cat=1"><B>Add/Update Categories</B></A><BR>
+			Add categories like, \'mail module\',\'gant chart module\',\'cvs\', etc<P>';
+		echo '<P>
+			<A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_group=1"><B>Add/Update Groups</B></A><BR>
+			Add groups like, \'v1.2\',\'unsupported\',\'unverified\', etc<P>';
+		echo '<P>
+			<A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_canned=1"><B>Add/Update Canned Responses</B></A><BR>
+			Create/Change generic response messages for the tracker.<P>';
+		echo '<P>
+			<A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&update_users=1"><B>Add/Update Users &amp; Permissions</B></A><BR>
+			Add/remove users to/from this tracker.<P>';
+		echo '<P>
+			<A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&update_type=1"><B>Update preferences</B></A><BR>
+			Set up prefs like expiration times, email addresses, etc.<P>';
+
+		$ath->footer(array());
+	}
+
+} elseif ($group_id) {
+
+	//
+	//  get the Group object
+	//
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group) || $group->isError()) {
+		exit_no_group();
+	}
+
+	$perm =& $group->getPermission( session_get_user() );
+
+	if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
+		exit_permission_denied();
+	}
+
+	if ($post_changes) {
+		if ($add_at) {
+			$res=new ArtifactTypeHtml($group);
+			if (!$res->create($name,$description,$is_public,$allow_anon,$email_all,$email_address,
+				$due_period,$use_resolution,$submit_instructions,$browse_instructions)) {
+				$feedback .= $res->getErrorMessage();
+			} else {
+				header ("Location: /tracker/admin/?group_id=$group_id&atid=".$res->getID()."&update_users=1");
+			}
+
+		}
+	}
+
+	$sql="SELECT * FROM artifact_group_list WHERE group_id='$group_id' ORDER BY group_artifact_id";
+
+	//required params for site_project_header();
+	$params['group']=$group_id;
+	$params['toptab']='tracker';
+	$params['pagename']='tracker_admin_choose';
+	
+	echo site_project_header($params);
+	echo '<B><A HREF="/tracker/admin/?group_id='.$group_id.'">Admin</A></B><P>';
+
+	$result = db_query ($sql);
+	$rows = db_numrows($result);
+	if (!$result || $rows < 1) {
+		echo "<H1>No Trackers Found</H1>";
+		echo "<P>";
+	} else {
+
+		echo '
+		<P>
+		Choose a data type and you can set up prefs, categories, groups, users, and permissions.
+		<P>';
+
+		/*
+			Put the result set (list of forums for this group) into a column with folders
+		*/
+
+		for ($j = 0; $j < $rows; $j++) {
+			echo '
+			<A HREF="/tracker/admin/?atid='.db_result($result, $j, 'group_artifact_id').
+			'&group_id='.$group_id.'">' .
+			html_image("images/ic/index.png","15","13",array("BORDER"=>"0")) . ' &nbsp;'.
+			db_result($result, $j, 'name').'</A><BR>'.
+			db_result($result, $j, 'description').'<P>';
+		}
+	}
+
+	?>
+	<H3>Create a new tracker</H3>
+	<P>
+	You can use this system to track virtually any kind of data, with each 
+	tracker having separate user, group, category, and permission lists. You 
+	can also easily move items between trackers when needed.
+	<P>
+	Trackers are referred to as "Artifact Types" and individual pieces of data
+	are "Artifacts". "Bugs" might be an Artifact Type, whiles a bug report would be 
+	an Artifact. You can create as many Artifact Types as you want, but remember 
+	you need to set up categories, groups, and permission for each type, which 
+	can get time-consuming.
+	<P>
+	<FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id; ?>" METHOD="POST">
+	<INPUT TYPE="HIDDEN" NAME="add_at" VALUE="y">
+	<P>
+	<B>Name:</B> (examples: meeting minutes, test results, RFP Docs)<BR>
+	<INPUT TYPE="TEXT" NAME="name" VALUE="">
+	<P>
+	<B>Description:</B><BR>
+	<INPUT TYPE="TEXT" NAME="description" VALUE="" SIZE="50">
+	<P>
+	<INPUT TYPE=CHECKBOX NAME="is_public" VALUE="1"> <B>Publicly Available</B><BR>
+	<INPUT TYPE=CHECKBOX NAME="allow_anon" VALUE="1"> <B>Allow non-logged-in postings</B><BR>
+	<INPUT TYPE=CHECKBOX NAME="use_resolution" VALUE="1"> <B>Display the "Resolution" box</B>
+	<P>
+	<B>Send email on new submission to address:</B><BR>
+	<INPUT TYPE="TEXT" NAME="email_address" VALUE="">
+	<P>
+	<INPUT TYPE=CHECKBOX NAME="email_all" VALUE="1"> <B>Send email on all changes</B><BR>
+	<P>
+	<B>Days till considered overdue:</B><BR>
+	<INPUT TYPE="TEXT" NAME="due_period" VALUE="30">
+	<P>
+	<B>Days till pending tracker items time out:</B><BR>
+	<INPUT TYPE="TEXT" NAME="status_timeout" VALUE="14">
+	<P>
+	<B>Free form text for the "submit new item" page:</B><BR>
+	<TEXTAREA NAME="submit_instructions" ROWS="10" COLS="55" WRAP="HARD"></TEXTAREA>
+	<P>
+	<B>Free form text for the "browse items" page:</B><BR>
+	<TEXTAREA NAME="browse_instructions" ROWS="10" COLS="55" WRAP="HARD"></TEXTAREA>
+	<P>
+	<INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
+	</FORM>
+	<?php
+
+	echo site_project_footer(array());
+
+} else {
+
+	//browse for group first message
+	exit_no_group();
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/browse.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/browse.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/browse.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,244 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+//
+//  make sure this person has permission to view artifacts
+//
+if (!$ath->userCanView()) {
+	exit_permission_denied();
+}
+
+if (user_isloggedin()) {
+	$u =& session_get_user();
+}
+
+if (!$offset || $offset < 0) {
+	$offset=0;
+}
+
+if (!$set) {
+	/*
+		if no set is passed in, see if a preference was set
+		if no preference or not logged in, use open set
+	*/
+	if (user_isloggedin()) {
+		$custom_pref=$u->getPreference('art_cust'.$ath->getID());
+		if ($custom_pref) {
+			$pref_arr=explode('|',$custom_pref);
+			$_assigned_to=$pref_arr[0];
+			$_status=$pref_arr[1];
+			$_category=$pref_arr[2];
+			$_group=$pref_arr[3];
+			$order=$pref_arr[4];
+			$sort=$pref_arr[5];
+			$set='custom';
+		} else {
+			//default to open
+			$_assigned_to=0;
+			$_status=1;
+		}
+	} else {
+		//default to open
+		$_assigned_to=0;
+		$_status=1;
+	}
+}
+
+//
+//	validate the column names and sort order passed in from user
+//	before saving it to prefs
+//
+if ($order=='artifact_id' || $order=='summary' || $order=='open_date' || $order=='close_date' || $order=='assigned_to' || $order=='submitted_by' || $order=='priority') {
+	$_sort_col=$order;
+	if (($sort == 'ASC') || ($sort == 'DESC')) {
+		$_sort_ord=$sort;
+	} else {
+		$_sort_ord='ASC';
+	}
+} else {
+	$_sort_col='artifact_id';
+	$_sort_ord='ASC';
+}
+
+if ($set=='custom') {
+	if (user_isloggedin()) {
+		/*
+			if this custom set is different than the stored one, reset preference
+		*/
+		$pref_=$_assigned_to.'|'.$_status.'|'.$_category.'|'.$_group.'|'.$_sort_col.'|'.$_sort_ord;
+		if ($pref_ != $u->getPreference('art_cust'.$ath->getID())) {
+			$u->setPreference('art_cust'.$ath->getID(),$pref_);
+		}
+	}
+}
+
+/*
+	Display items based on the form post - by user or status or both
+*/
+
+//if status selected, add more to where clause
+if ($_status && ($_status != 100)) {
+	//for open tasks, add status=100 to make sure we show all
+	$status_str="AND artifact.status_id='$_status'";
+} else {
+	//no status was chosen, so don't add it to where clause
+	$status_str='';
+}
+
+//if assigned to selected, add to where clause
+if ($_assigned_to) {
+	$assigned_str="AND artifact.assigned_to='$_assigned_to'";
+} else {
+	//no assigned to was chosen, so don't add it to where clause
+	$assigned_str='';
+}
+
+//if category selected, add to where clause
+if ($_category && ($_category != 100)) {
+	$category_str="AND artifact.category_id='$_category'";
+} else {
+	//no assigned to was chosen, so don't add it to where clause
+	$category_str='';
+}
+
+//if artgroup selected, add to where clause
+if ($_group && ($_group != 100)) {
+	$group_str="AND artifact.artifact_group_id='$_group'";
+} else {
+	//no artgroup to was chosen, so don't add it to where clause
+	$group_str='';
+}
+
+//build page title to make bookmarking easier
+//if a user was selected, add the user_name to the title
+//same for status
+$ath->header(array('titlevals'=>array($ath->getName()),'pagename'=>'tracker_browse','atid'=>$ath->getID(),'sectionvals'=>array($group->getPublicName())));
+
+/**
+ *
+ *	Build the powerful browsing options pop-up boxes
+ *
+ */
+
+//
+//	creating a custom technician box which includes "any" and "unassigned"
+//
+$res_tech= $ath->getTechnicians();
+
+$tech_id_arr=util_result_column_to_array($res_tech,0);
+$tech_id_arr[]='0';  //this will be the 'any' row
+
+$tech_name_arr=util_result_column_to_array($res_tech,1);
+$tech_name_arr[]='Any';
+
+$tech_box=html_build_select_box_from_arrays ($tech_id_arr,$tech_name_arr,'_assigned_to',$_assigned_to,true,'Unassigned');
+
+
+//
+//	custom order by arrays to build a pop-up box
+//
+$order_name_arr=array();
+$order_name_arr[]='ID';
+$order_name_arr[]='Priority';
+$order_name_arr[]='Summary';
+$order_name_arr[]='Open Date';
+$order_name_arr[]='Close Date';
+$order_name_arr[]='Submitter';
+$order_name_arr[]='Assignee';
+
+
+$order_arr=array();
+$order_arr[]='artifact_id';
+$order_arr[]='priority';
+$order_arr[]='summary';
+$order_arr[]='open_date';
+$order_arr[]='close_date';
+$order_arr[]='submitted_by';
+$order_arr[]='assigned_to';
+
+//
+//	custom sort arrays to build pop-up box
+//
+$sort_name_arr=array();
+$sort_name_arr[]='Ascending';
+$sort_name_arr[]='Descending';
+
+$sort_arr=array();
+$sort_arr[]='ASC';
+$sort_arr[]='DESC';
+
+//
+//	Show the new pop-up boxes to select assigned to, status, etc
+//
+
+echo '
+<TABLE WIDTH="10%" BORDER="0">
+	<FORM ACTION="'. $PHP_SELF .'?group_id='.$group_id.'&atid='.$ath->getID().'" METHOD="POST">
+	<INPUT TYPE="HIDDEN" NAME="set" VALUE="custom">
+	<TR>
+		<TD><FONT SIZE="1">Assignee:&nbsp;<A href="javascript:help_window(\'/help/tracker.php?helpname=assignee\')"><B>(?)</B></A><BR>'. $tech_box .'</TD>'.
+	'<TD><FONT SIZE="1">Status:&nbsp;<A href="javascript:help_window(\'/help/tracker.php?helpname=status\')"><B>(?)</B></A><BR>'. $ath->statusBox('_status',$_status,true,'Any') .'</TD>'.
+	'<TD><FONT SIZE="1">Category:&nbsp;<A href="javascript:help_window(\'/help/tracker.php?helpname=category\')"><B>(?)</B></A><BR>'. $ath->categoryBox ('_category',$_category,'Any') .'</TD>'.
+	'<TD><FONT SIZE="1">Group:&nbsp;<A href="javascript:help_window(\'/help/tracker.php?helpname=group\')"><B>(?)</B></A><BR>'. $ath->artifactGroupBox ('_group',$_group,'Any') .'</TD>
+	</TR>
+	<TR>
+		<TD ALIGN="RIGHT"><FONT SIZE="1">Sort By:&nbsp;<A href="javascript:help_window(\'/help/tracker.php?helpname=sort_by\')"><B>(?)</B></A></TD>'.
+		'<TD><FONT SIZE="1">'. 
+		html_build_select_box_from_arrays($order_arr,$order_name_arr,'order',$_sort_col,false) .'</TD>'.
+		'<TD><FONT SIZE="1">'.html_build_select_box_from_arrays($sort_arr,$sort_name_arr,'sort',$_sort_ord,false) .'</TD>'.
+		'<TD><FONT SIZE="1"><INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Browse"></TD>
+	</TR>
+	</FORM></TABLE>';
+
+/*
+	Show the free-form text submitted by the project admin
+*/
+echo $ath->getBrowseInstructions();
+
+//
+//	now run the query using the criteria chosen above
+//
+$sql="SELECT artifact.priority,artifact.group_artifact_id,artifact.artifact_id,artifact.summary,
+	artifact.open_date AS date,users.user_name AS submitted_by,user2.user_name AS assigned_to 
+	FROM artifact,users,users user2 
+	WHERE users.user_id=artifact.submitted_by 
+	 $status_str $assigned_str $category_str $group_str 
+	AND user2.user_id=artifact.assigned_to 
+	AND group_artifact_id='". $ath->getID() ."'
+	ORDER BY group_artifact_id $_sort_ord, $_sort_col $_sort_ord";
+
+$result=db_query($sql,51,$offset);
+
+if ($result && db_numrows($result) > 0) {
+
+	if ($set=='custom') {
+		$set .= '&_assigned_to='.$_assigned_to.'&_status='.$_status.'&_category='.$_category.'&_group='.$_group.'&order='.$_sort_col.'&sort='.$_sort_ord;
+	}
+
+	$ath->showBrowseList($result,$offset,$set);
+
+	echo '* Denotes Requests > '. ($ath->getDuePeriod()/86400) .' Days Old';
+	show_priority_colors_key();
+
+} else {
+
+	echo '
+		<H1>No Items Match Your Criteria</H1>';
+	echo db_error();
+	//echo "<!-- $sql -->";
+
+}
+
+$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/detail.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/detail.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/detail.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,143 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+echo $ath->header(array ('title'=>'Detail: '.$ah->getID(). ' '.util_unconvert_htmlspecialchars($ah->getSummary()),'pagename'=>'tracker_detail','atid'=>$ath->getID(),'sectionvals'=>array($ath->getName())));
+
+?>
+	<H2>[ #<?php echo $ah->getID(); ?> ] <?php echo util_unconvert_htmlspecialchars($ah->getSummary()); ?></H2>
+
+	<TABLE CELLPADDING="0" WIDTH="100%">
+			<FORM ACTION="<?php echo $PHP_SELF; ?>?group_id=<?php echo $group_id; ?>&atid=<?php echo $ath->getID(); ?>" METHOD="POST">
+			<INPUT TYPE="HIDDEN" NAME="func" VALUE="monitor">
+			<INPUT TYPE="HIDDEN" NAME="artifact_id" VALUE="<?php echo $ah->getID(); ?>">
+		<TR>
+			<TD COLSPAN=2">
+			<?php
+			if (!user_isloggedin()) {
+				?>
+				<B>Email:</B> &nbsp;
+				<INPUT TYPE="TEXT" NAME="user_email" SIZE="20" MAXLENGTH="40">
+				<?php
+			}
+			?>
+			<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Monitor">&nbsp;<A href="javascript:help_window('/help/tracker.php?helpname=monitor')"><B>(?)</B></A>
+			</FORM>
+			</TD>
+		</TR>
+		<TR>
+			<TD><B>Date:</B><BR><?php echo date( $sys_datefmt, $ah->getOpenDate() ); ?></TD>
+			<TD><B>Priority:</B><BR><?php echo $ah->getPriority(); ?></TD>
+		</TR>
+
+		<TR>
+			<TD><B>Submitted By:</B><BR><?php echo $ah->getSubmittedRealName(); ?> (<?php echo $ah->getSubmittedUnixName(); ?>)</TD>
+			<TD><B>Assigned To:</B><BR><?php echo $ah->getAssignedRealName(); ?> (<?php echo $ah->getAssignedUnixName(); ?>)</TD>
+		</TR>
+
+		<TR>
+			<TD><B>Category:</B><BR><?php echo $ah->getCategoryName(); ?></TD>
+			<TD><B>Status:</B><BR><?php echo $ah->getStatusName(); ?></TD>
+		</TR>
+
+		<TR><TD COLSPAN="2"><B>Summary:</B><BR><?php echo  util_unconvert_htmlspecialchars($ah->getSummary()); ?></TD></TR>
+
+		<FORM ACTION="<?php echo $PHP_SELF; ?>?group_id=<?php echo $group_id; ?>&atid=<?php echo $ath->getID(); ?>" METHOD="POST">
+
+		<TR><TD COLSPAN="2">
+			<?php echo nl2br( $ah->getDetails() ); ?>
+			<INPUT TYPE="HIDDEN" NAME="func" VALUE="postaddcomment">
+			<INPUT TYPE="HIDDEN" NAME="artifact_id" VALUE="<?php echo $ah->getID(); ?>">
+			<P>
+			<B>Add A Comment:</B><BR>
+			<TEXTAREA NAME="details" ROWS="10" COLS="60" WRAP="HARD"></TEXTAREA>
+		</TD></TR>
+
+		<TR><TD COLSPAN="2">
+	<?php
+
+	if (!user_isloggedin()) {
+		?>
+		<h3><FONT COLOR="RED">Please <A HREF="/account/login.php?return_to=<?php echo urlencode($REQUEST_URI); ?>">log in!</A></FONT></h3><BR>
+		If you <B>cannot</B> login, then enter your email address here:<P>
+		<INPUT TYPE="TEXT" NAME="user_email" SIZE="20" MAXLENGTH="40">
+		<?php
+	}
+	?>
+		<P>
+		<H3>DO NOT enter passwords or confidential information in your message!</H3>
+		<P>
+		<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="SUBMIT">
+		</FORM>
+	</TD></TR>
+
+	<TR><TD COLSPAN="2">
+	<H3>Followups:</H3>
+	<P>
+	<?php
+
+	echo $ah->showMessages();
+
+	?>
+	</TD></TR>
+
+	<TR><TD COLSPAN=2>
+	<H4>Attached Files:</H4>
+	<?php
+	//
+	//  print a list of files attached to this Artifact
+	//
+	$file_list =& $ah->getFiles();
+
+	$count=count($file_list);
+
+	$title_arr=array();
+	$title_arr[]='Name';
+	$title_arr[]='Description';
+	$title_arr[]='Download';
+	echo html_build_list_table_top ($title_arr);
+
+	if ($count > 0) {
+
+		for ($i=0; $i<$count; $i++) {
+			echo '<TR>
+			<TD>'. $file_list[$i]->getName() .'</TD>
+			<TD>'.  $file_list[$i]->getDescription() .'</TD>
+			<TD><A HREF="/tracker/download.php?group_id='.$group_id.'&atid='. $ath->getID().'&file_id='.$file_list[$i]->getID().'&aid='. $ah->getID() .'">Download</A></TD>
+			</TR>';
+		}
+
+	} else {
+		echo '<TR><TD COLSPAN=3>No Files Currently Attached</TD></TR>';
+	}
+	
+	echo '</TABLE>';
+	?>
+	</TD></TR>
+
+	<TR>
+	<TD COLSPAN="2">
+	<H3>Changes:</H3>
+	<P>
+	<?php
+
+	echo $ah->showHistory();
+
+	?>
+	</TD>
+	</TR>
+</TABLE>
+<?php
+
+$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/download.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/download.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/download.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,65 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('squal_pre.php');
+require_once('common/tracker/Artifact.class');
+require_once('common/tracker/ArtifactFile.class');
+//require_once('www/tracker/include/ArtifactFileHtml.class');
+require_once('common/tracker/ArtifactType.class');
+require_once('common/tracker/ArtifactType.class');
+require_once('common/include/Group.class');
+require_once('common/include/Project.class');
+require_once('common/include/Foundry.class');
+
+if (!$group_id) {
+	exit_no_group();
+}
+//
+//  get the Group object
+//
+$group =& group_get_object($group_id);
+if (!$group || !is_object($group) || $group->isError()) {
+	exit_no_group();
+}
+
+//
+//  Create the ArtifactType object
+//
+$ath = new ArtifactType($group,$atid);
+if (!$ath || !is_object($ath)) {
+	exit_error('Error','ArtifactType could not be created');
+}
+if ($ath->isError()) {
+	exit_error('Error',$ath->getErrorMessage());
+}
+
+$ah=new Artifact($ath,$aid);
+if (!$ah || !is_object($ah)) {
+	exit_error('ERROR','Artifact Could Not Be Created');
+} else if ($ah->isError()) {
+	exit_error('ERROR',$ah->getErrorMessage());
+} else {
+	$afh=new ArtifactFile($ah,$file_id);
+	if (!$afh || !is_object($afh)) {
+		exit_error('ERROR','ArtifactFile Could Not Be Created');
+	} else if ($afh->isError()) {
+		exit_error('ERROR',$afh->getErrorMessage());
+	} else {
+		Header ("Content-disposition: filename=".$afh->getName());
+		Header ("Content-type: ".$afh->getType());
+		echo $afh->getData();
+	}
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactFileHtml.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactFileHtml.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactFileHtml.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,52 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('common/tracker/ArtifactFile.class');
+
+class ArtifactFileHtml extends ArtifactFile {
+
+	/**
+	 *  ArtifactFileHtml() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *	@param $Artifact object
+	 *  @param $data associative array (all fields from artifact_file_user_vw) OR id from database
+	 *  @return true/false
+	 */
+	function ArtifactFileHtml(&$Artifact, $data=false) {
+		return $this->ArtifactFile($Artifact,$data); 
+	}
+
+	function upload($input_file,$input_file_name,$input_file_type,$description) {
+		if (!util_check_fileupload($input_file)) {
+			$this->setError('ArtifactFile: Invalid filename');
+			return false;
+		}
+		$size = @filesize($input_file);
+		if (($size > 20) && ($size < 256000)) {
+			//size is fine
+			$input_data = fread(fopen($input_file, 'r'), $size);
+			//echo $input_data.'|'.$input_file_name.'|'.$input_file.'|'.$input_file_type.'|'.$description;
+			return $this->create($input_file_name,$input_file_type,$size,$input_data,$description);
+		} else {
+			//too big or small
+			$this->setError('ArtifactFile: File must be > 20 bytes and < 256000 bytes in length');
+			return false;
+		}
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactHtml.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactHtml.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactHtml.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,136 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('common/tracker/Artifact.class');
+
+class ArtifactHtml extends Artifact {
+
+	/**
+	 *  ArtifactHtml() - constructor
+	 *
+	 *  Use this constructor if you are modifying an existing artifact
+	 *
+	 *  @param $ArtifactType object
+	 *  @param $artifact_id integer (primary key from database)
+	 *  @return true/false
+	 */
+	function ArtifactHtml(&$ArtifactType,$artifact_id=false) {
+		return $this->Artifact($ArtifactType,$artifact_id);
+	}
+
+	function showMessages() {
+		global $sys_datefmt;
+		$result= $this->getMessages();
+		$rows=db_numrows($result);
+
+		if ($rows > 0) {
+			$title_arr=array();
+			$title_arr[]='Message';
+
+			echo html_build_list_table_top ($title_arr);
+
+			for ($i=0; $i < $rows; $i++) {
+				echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'"><TD><PRE>
+Date: '. date($sys_datefmt,db_result($result, $i, 'adddate')) .'
+Sender: '. db_result($result,$i,'user_name') . '
+'. util_line_wrap ( db_result($result, $i, 'body'),65,"\n"). '</PRE></TD></TR>';
+			}
+			echo '</TABLE>';
+		} else {
+			echo '
+				<H3>No Followups Have Been Posted</H3>';
+		}
+	}
+
+	function showHistory() {
+		global $sys_datefmt,$artifact_cat_arr,$artifact_grp_arr,$artifact_res_arr;
+		$result=$this->getHistory();
+		$rows= db_numrows($result);
+
+		if ($rows > 0) {
+
+			$title_arr=array();
+			$title_arr[]='Field';
+			$title_arr[]='Old Value';
+			$title_arr[]='Date';
+			$title_arr[]='By';
+
+			echo html_build_list_table_top ($title_arr);
+
+			$artifactType =& $this->getArtifactType();
+
+			for ($i=0; $i < $rows; $i++) {
+				$field=db_result($result, $i, 'field_name');
+				echo '
+				<TR BGCOLOR="'. html_get_alt_row_color($i) .'"><TD>'.$field.'</TD><TD>';
+
+				if ($field == 'status_id') {
+
+					echo $artifactType->getStatusName(db_result($result, $i, 'old_value'));
+
+				} else if ($field == 'resolution_id') {
+
+					if (!$artifact_res_arr["_".db_result($result, $i, 'old_value')]) {
+						$artifact_res_arr["_".db_result($result, $i, 'old_value')] 
+							= new ArtifactResolution($artifactType,db_result($result, $i, 'old_value'));
+					}
+					echo $artifact_res_arr["_".db_result($result, $i, 'old_value')]->getName();
+
+				} else if ($field == 'category_id') {
+
+					if (!$artifact_cat_arr["_".db_result($result, $i, 'old_value')]) {
+						$artifact_cat_arr["_".db_result($result, $i, 'old_value')] 
+							= new ArtifactCategory($artifactType,db_result($result, $i, 'old_value'));
+					}
+					echo $artifact_cat_arr["_".db_result($result, $i, 'old_value')]->getName();
+
+				} else if ($field == 'artifact_group_id') {
+
+					if (!$artifact_grp_arr["_".db_result($result, $i, 'old_value')]) {
+						$artifact_grp_arr["_".db_result($result, $i, 'old_value')] 
+							= new ArtifactGroup($artifactType,db_result($result, $i, 'old_value'));
+					}
+					echo $artifact_grp_arr["_".db_result($result, $i, 'old_value')]->getName();
+
+				} else if ($field == 'assigned_to') {
+
+					echo user_getname(db_result($result, $i, 'old_value'));
+
+				} else if ($field == 'close_date') {
+
+					echo date($sys_datefmt,db_result($result, $i, 'old_value'));
+
+				} else {
+
+					echo db_result($result, $i, 'old_value');
+
+				}
+				echo '</TD>'.
+					'<TD>'. date($sys_datefmt,db_result($result, $i, 'entrydate')) .'</TD>'.
+					'<TD>'. db_result($result, $i, 'user_name'). '</TD></TR>';
+			}
+
+			echo '
+				</TABLE>';
+	
+		} else {
+			echo '
+			<H3>No Changes Have Been Made to This Item</H3>';
+		}
+
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactTypeHtml.class
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactTypeHtml.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/include/ArtifactTypeHtml.class	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,219 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('common/tracker/ArtifactType.class');
+
+class ArtifactTypeHtml extends ArtifactType {
+
+	/**
+	 *  ArtifactType() - constructor
+	 *
+	 *  @param $Group object
+	 *  @param $artifact_type_id - the id # assigned to this artifact type in the db
+	 */
+	function ArtifactTypeHtml(&$Group,$artifact_type_id=false) {
+		return $this->ArtifactType($Group,$artifact_type_id);
+	}
+
+	function header($params) {
+		global $DOCUMENT_ROOT;
+
+		$group_id= $this->Group->getID();
+
+		//required by new site_project_header
+		$params['group']=$group_id;
+		$params['toptab']='tracker';
+		$params['tabtext']=$this->getName();
+
+		site_project_header($params);
+
+		echo '<B><A HREF="/tracker/?func=add&group_id='.$group_id.'&atid='. $this->getID() .'">Submit New</A>';
+		echo ' | <A HREF="/tracker/?func=browse&group_id='.$group_id.'&atid='. $this->getID() .'">Browse</A>';
+		if (user_isloggedin()) {
+			echo ' | <A HREF="/tracker/reporting/?group_id='.$group_id.'&atid='. $this->getID() .'">Reporting</A>';
+		}
+		echo ' | <A HREF="/tracker/admin/?group_id='.$group_id.'">Admin</A>';
+
+		echo '</B><P>';
+		//echo '<HR NoShade SIZE="1" SIZE="90%">';
+	}
+
+	function footer($params) {
+		site_project_footer($params);
+	}
+
+	function adminHeader($params) {
+		echo $this->header($params);
+		$group_id= $this->Group->getID();
+		echo '<B>Admin Functions: <A HREF="/tracker/admin/?group_id='.$group_id.'">Add/Browse Artifact Types</A>';
+		echo ' | <A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $this->getID() .'">Edit/Update Options in: '. $this->getName() .'</A></B>';
+	}
+
+	function categoryBox ($name='category_id',$checked='xzxz',$text_100='None') {
+		return html_build_select_box ($this->getCategories(),$name,$checked,true,$text_100);
+	}
+
+	function artifactGroupBox ($name='artifact_group_id',$checked='xzxz',$text_100='None') {
+		return html_build_select_box ($this->getGroups(),$name,$checked,true,$text_100);
+	}
+
+	function technicianBox ($name='assigned_to',$checked='xzxz',$show_100=true,$text_100='None') {
+		return html_build_select_box ($this->getTechnicians(),$name,$checked,$show_100,$text_100);
+	}
+
+	function cannedResponseBox ($name='canned_response',$checked='xzxz') {
+		return html_build_select_box ($this->getCannedResponses(),$name,$checked);
+	}
+
+	function statusBox ($name='status_id',$checked='xzxz',$show_100=false,$text_100='None') {
+		return html_build_select_box($this->getStatuses(),$name,$checked,$show_100,$text_100);
+	}
+
+	function resolutionBox ($name='resolution_id',$checked='xzxz',$show_100=false,$text_100='None') {
+		return html_build_select_box($this->getResolutions(),$name,$checked,$show_100,$text_100);
+	}
+
+	function showBrowseList ($result,$offset,$set='open') {
+		global $sys_datefmt,$PHP_SELF;
+		$group_id=$this->Group->getID();
+
+		$title_arr=array();
+		$title_arr[]='Request ID';
+		$title_arr[]='Summary';
+		$title_arr[]='Date';
+		$title_arr[]='Assigned To';
+		$title_arr[]='Submitted By';
+
+		$IS_ADMIN=$this->userIsAdmin();
+
+
+		if ($IS_ADMIN) {
+			echo '
+			<FORM NAME="artifactList" ACTION="'. $PHP_SELF .'?group_id='.$group_id.'&atid='.$this->getID().'" METHOD="POST">
+			<INPUT TYPE="HIDDEN" NAME="func" VALUE="massupdate">';
+		}
+
+		echo html_build_list_table_top ($title_arr);
+
+		$then=(time()-$this->getDuePeriod());
+		$rows=db_numrows($result);
+		for ($i=0; $i < $rows; $i++) {
+			echo '
+			<TR BGCOLOR="'. get_priority_color(db_result($result, $i, 'priority')) .'">'.
+			'<TD NOWRAP>'.
+			($IS_ADMIN?'<INPUT TYPE="CHECKBOX" NAME="artifact_id_list[]" VALUE="'.
+			db_result($result, $i, 'artifact_id') .'"> ':'').
+					db_result($result, $i, 'artifact_id') .
+					'</TD>'.
+			'<TD><A HREF="'.$PHP_SELF.'?func=detail&aid='. 
+			db_result($result, $i, 'artifact_id').
+			'&group_id='. $group_id .'&atid='.
+			$this->getID().'">'. 
+			db_result($result, $i, 'summary').
+			'</A></TD>'.
+			'<TD>'. (($set != 'closed' && db_result($result, $i, 'date') < $then)?'<B>* ':'&nbsp; ') . date($sys_datefmt,db_result($result, $i, 'date')) .'</TD>'.
+			'<TD>'. make_user_link ( db_result($result, $i, 'assigned_to') ) .'</TD>'.
+			'<TD>'. make_user_link ( db_result($result, $i, 'submitted_by') ) .'</TD></TR>';
+		}
+
+		/*
+			Show extra rows for <-- Prev / Next -->
+		*/
+		if (($offset > 0) || ($rows >= 50)) {
+			echo '
+				<TR><TD COLSPAN="2">';
+			if ($offset > 0) {
+				echo '<A HREF="'.$PHP_SELF.'?func=browse&group_id='.$group_id.'&atid='.$this->getID().'&set='.$set.'&offset='.($offset-50).'"><B><-- Previous 50</B></A>';
+			} else {
+				echo '&nbsp;';
+			}
+			echo '</TD><TD>&nbsp;</TD><TD COLSPAN="2">';
+	
+			if ($rows >= 50) {
+				echo '<A HREF="'.$PHP_SELF.'?func=browse&group_id='.$group_id.'&atid='.$this->getID().'&set='.$set.'&offset='.($offset+50).'"><B>Next 50 --></B></A>';
+			} else {
+				echo '&nbsp;';
+			}
+			echo '</TD></TR>';
+		}
+
+		/*
+			Mass Update Code
+		*/
+		if ($IS_ADMIN) {
+			echo '<script language="JavaScript">
+	<!-- 
+	function checkAll(val) {
+		al=document.artifactList;
+		len = al.elements.length;
+		var i=0;
+		for( i=0 ; i<len ; i++) {
+			if (al.elements[i].name==\'artifact_id_list[]\') {
+				al.elements[i].checked=val;
+			}
+		}
+	}
+	//-->
+	</script>
+			<TR><TD COLSPAN="5">
+<font size=1>
+<a href="javascript:checkAll(1)">Check&nbsp;All</a>
+-
+ <a href="javascript:checkAll(0)">Clear&nbsp;All</a>
+</font>
+<P>
+
+			<FONT COLOR="#FF0000"><B>Admin:</B></FONT>  If you wish to apply changes to all items selected above, use these controls to change their properties and click once on "Mass Update".
+			<TABLE WIDTH="100%" BORDER="0">
+
+			<TR>
+			<TD><B>Category: <A href="javascript:help_window(\'/help/tracker.php?helpname=category\')"><b>(?)</b></a></B><BR>'. $this->categoryBox ('category_id','xzxz','No Change') .'</TD>
+			<TD><B>Group: <A href="javascript:help_window(\'/help/tracker.php?helpname=group\')"><b>(?)</b></a></B><BR>'. $this->artifactGroupBox ('artifact_group_id','xzxz','No Change') .'</TD>
+			</TR>
+
+			<TR>
+			<TD><B>Priority: <A href="javascript:help_window(\'/help/tracker.php?helpname=priority\')"><b>(?)</b></a></B><BR>';
+			echo build_priority_select_box ('priority', '5', true);
+			echo '</TD><TD>';
+			if ($this->useResolution()) {
+				echo '
+				<B>Resolution: <A href="javascript:help_window(\'/help/tracker.php?helpname=resolution\')"><b>(?)</b></a></B><BR>';
+				echo $this->resolutionBox('resolution_id','xzxz',true,'No Change');
+			} else { 
+				echo '&nbsp;
+				<INPUT TYPE="HIDDEN" NAME="resolution_id" VALUE="100">';
+			}
+
+			echo '</TD>
+			</TR>
+
+			<TR>
+			<TD><B>Assigned To: <A href="javascript:help_window(\'/help/tracker.php?helpname=assignee\')"><b>(?)</b></a></B><BR>'. $this->technicianBox ('assigned_to','xzxz',true,'No Change') .'</TD>
+			<TD><B>Status: <A href="javascript:help_window(\'/help/tracker.php?helpname=status\')"><b>(?)</b></a></B><BR>'. $this->statusBox ('status_id','xzxz',true,'No Change') .'</TD>
+			</TR>
+
+			<TR><TD COLSPAN="2"><B>Canned Response: <A href="javascript:help_window(\'/help/tracker.php?helpname=canned_response\')"><b>(?)</b></a></B><BR>'. $this->cannedResponseBox ('canned_response') .'</TD></TR>
+
+			<TR><TD COLSPAN="3" ALIGN="MIDDLE"><INPUT TYPE="SUBMIT" name="submit" VALUE="Mass Update"></TD></TR>
+
+			</TABLE>		
+		</FORM>
+			</TD></TR>';
+		}
+		echo '</TABLE>';
+	}
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/index.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/index.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,345 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+require_once('pre.php');
+require_once('common/tracker/Artifact.class');
+require_once('common/tracker/ArtifactFile.class');
+require_once('www/tracker/include/ArtifactFileHtml.class');
+require_once('common/tracker/ArtifactType.class');
+require_once('www/tracker/include/ArtifactTypeHtml.class');
+require_once('www/tracker/include/ArtifactHtml.class');
+require_once('common/tracker/ArtifactGroup.class');
+require_once('common/tracker/ArtifactCategory.class');
+require_once('common/tracker/ArtifactCanned.class');
+require_once('common/tracker/ArtifactResolution.class');
+
+if ($group_id && $atid) {
+
+	//
+	//	get the Group object
+	//
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group) || $group->isError()) {
+		exit_no_group();
+	}
+
+	//
+	//	Create the ArtifactType object
+	//
+	$ath = new ArtifactTypeHtml($group,$atid);
+	if (!$ath || !is_object($ath)) {
+		exit_error('Error','ArtifactType could not be created');
+	}
+	if ($ath->isError()) {
+		exit_error('Error',$ath->getErrorMessage());
+	}
+
+	switch ($func) {
+
+		case 'add' : {
+			include '../tracker/add.php';
+			break;
+		}
+		case 'postadd' : {
+			/*
+
+				Create a new Artifact
+
+			*/
+			$ah=new ArtifactHtml($ath);
+			if (!$ah || !is_object($ah)) {
+				exit_error('ERROR','Artifact Could Not Be Created');
+			} else {
+				if (empty($user_email)) {
+						$user_email=false;
+				} else {
+					if (!validate_email($user_email)) {
+						exit_error('ERROR', 'Invalid email address');
+					}
+				}
+				if (!$ah->create($category_id,$artifact_group_id,$summary,$details,$assigned_to,$priority, $user_email)) {
+					exit_error('ERROR',$ah->getErrorMessage());
+				} else {
+					//
+					//	Attach file to this Artifact.
+					//
+					if ($add_file) {
+						$afh=new ArtifactFileHtml($ah);
+						if (!$afh || !is_object($afh)) {
+							$feedback .= 'Could Not Create File Object';
+//						} elseif ($afh->isError()) {
+//							$feedback .= $afh->getErrorMessage();
+						} else {
+							if (!$afh->upload($input_file,$input_file_name,$input_file_type,$file_description)) {
+								$feedback .= ' Could Not Attach File to Item: '.$afh->getErrorMessage();
+							}
+						}
+					}
+					$feedback .= ' Item Successfully Created ';
+					include '../tracker/browse.php';
+				}
+			}
+			break;
+		}
+		case 'massupdate' : {
+			$count=count($artifact_id_list);
+
+			$artifact_type_id=$ath->getID();
+
+			for ($i=0; $i < $count; $i++) {
+				$ah=new Artifact($ath,$artifact_id_list[$i]);
+				if (!$ah || !is_object($ah)) {
+					$feedback .= ' ID: '.$artifact_id_list[$i].'::Artifact Could Not Be Created';
+				} else if ($ah->isError()) {
+					$feedback .= ' ID: '.$artifact_id_list[$i].'::'.$ah->getErrorMessage();
+				} else {
+
+					$_priority=(($priority != 100) ? $priority : $ah->getPriority());
+					$_status_id=(($status_id != 100) ? $status_id : $ah->getStatusID());
+					$_category_id=(($category_id != 100) ? $category_id : $ah->getCategoryID());
+					$_artifact_group_id=(($artifact_group_id != 100) ? $artifact_group_id : $ah->getArtifactGroupID());
+					$_resolution_id=(($resolution_id != 100) ? $resolution_id : $ah->getResolutionID());
+					$_assigned_to=(($assigned_to != 100) ? $assigned_to : $ah->getAssignedTo());
+					$_summary=addslashes($ah->getSummary());
+
+					if (!$ah->update($_priority,$_status_id,$_category_id,$_artifact_group_id,$_resolution_id,$_assigned_to,$_summary,$canned_response,'',$artifact_type_id)) {
+						$was_error=true;
+						$feedback .= ' ID: '.$artifact_id_list[$i].'::'.$ah->getErrorMessage();
+					}
+
+				}
+				unset($ah);
+			}
+			if (!$was_error) {
+				$feedback = 'Updated Successfully ';
+			}
+			include '../tracker/browse.php';
+			break;
+		}
+		case 'postmod' : {
+			/*
+				Modify an Artifact
+			*/
+			$ah=new ArtifactHtml($ath,$artifact_id);
+			if (!$ah || !is_object($ah)) {
+				exit_error('ERROR','Artifact Could Not Be Created');
+			} else if ($ah->isError()) {
+				exit_error('ERROR',$ah->getErrorMessage());
+			} else {
+				if (!$ah->update($priority,$status_id,$category_id,$artifact_group_id,$resolution_id,
+					$assigned_to,$summary,$canned_response,$details,$new_artfact_type_id)) {
+					$feedback = 'Tracker Item: '.$ah->getErrorMessage();
+					$ah->clearError();
+					$was_error=true;
+				}
+
+				//
+				//  Attach file to this Artifact.
+				//
+				if ($add_file) {
+					$afh=new ArtifactFileHtml($ah);
+					if (!$afh || !is_object($afh)) {
+						$feedback .= 'Could Not Create File Object';
+//					} elseif ($afh->isError()) {
+//						$feedback .= $afh->getErrorMessage();
+					} else {
+						if (!util_check_fileupload($input_file)) {
+							exit_error("Error","Invalid filename");
+						}
+						if (!$afh->upload($input_file,$input_file_name,$input_file_type,$file_description)) {
+							$feedback .= ' <BR>File Upload: '.$afh->getErrorMessage();
+							$was_error=true;
+						} else {
+							$feedback .= ' <BR>File Upload: Successful ';
+						}
+					}
+				}
+
+				//
+				//	Delete list of files from this artifact
+				//
+				if ($delete_file) {
+					$count=count($delete_file);
+					for ($i=0; $i<$count; $i++) {
+						$afh=new ArtifactFileHtml($ah,$delete_file[$i]);
+						if (!$afh || !is_object($afh)) {
+							$feedback .= 'Could Not Create File Object::'.$delete_file[$i];
+						} elseif ($afh->isError()) {
+							$feedback .= $afh->getErrorMessage().'::'.$delete_file[$i];
+						} else {
+							if (!$afh->delete()) {
+								$feedback .= ' <BR>File Delete: '.$afh->getErrorMessage();
+								$was_error=true;
+							} else {
+								$feedback .= ' <BR>File Delete: Successful ';
+							}
+						}
+					}
+				}
+				//
+				//	Show just one feedback entry if no errors
+				//
+				if (!$was_error) {
+					$feedback = 'Successfully Updated';
+				}
+				include '../tracker/browse.php';
+			}
+			break;
+		}
+		case 'postaddcomment' : {
+			/*
+				Attach a comment to an artifact
+
+				Used by non-admins
+			*/
+			$ah=new ArtifactHtml($ath,$artifact_id);
+			if (!$ah || !is_object($ah)) {
+				exit_error('ERROR','Artifact Could Not Be Created');
+			} else if ($ah->isError()) {
+				exit_error('ERROR',$ah->getErrorMessage());
+			} else {
+				if ($ah->addMessage($details,$user_email,true)) {
+					$feedback='Comment Added';
+					include '../tracker/browse.php';
+				} else {
+					//some kind of error in creation
+					exit_error('ERROR',$feedback);
+				}
+			}
+			break;
+		}
+		case 'monitor' : {
+			$ah=new ArtifactHtml($ath,$artifact_id);
+			if (!$ah || !is_object($ah)) {
+				exit_error('ERROR','Artifact Could Not Be Created');
+			} else if ($ah->isError()) {
+				exit_error('ERROR',$ah->getErrorMessage());
+			} else {
+				$ah->setMonitor($user_email);
+				$feedback=$ah->getErrorMessage();
+				include '../tracker/browse.php';
+			}
+			break;
+		}
+		case 'browse' : {
+			include '../tracker/browse.php';
+			break;
+		}
+		case 'download' : {
+			$CACHE_ON=0;
+			Header("Redirect: /tracker/download.php?group_id=$group_id&atid=$atid&aid=$aid&file_id=$file_id");
+			break;
+		}
+		case 'detail' : {
+			//
+			//	users can modify their own tickets if they submitted them
+			//	even if they are not artifact admins
+			//
+			$ah=new ArtifactHtml($ath,$aid);
+			if (!$ah || !is_object($ah)) {
+				exit_error('ERROR','Artifact Could Not Be Created');
+			} else if ($ah->isError()) {
+				exit_error('ERROR',$ah->getErrorMessage());
+			} else {
+				if ($ath->userIsAdmin() || (user_isloggedin() && ($ah->getSubmittedBy() == user_getid()))) {
+					include '../tracker/mod.php';
+				} else {
+					include '../tracker/detail.php';
+				}
+			}
+			break;
+		}
+		default : {
+			include '../tracker/browse.php';
+			break;
+		}
+	}
+
+} elseif ($group_id) {
+	//	  
+	//  get the Group object
+	//	  
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group) || $group->isError()) {
+		exit_no_group();
+	}		   
+
+	$perm =& $group->getPermission( session_get_user() );
+
+	//
+	//	get a list of artifact types they have defined
+	//
+	if (user_isloggedin() && $perm->isMember()) {
+		$public_flag='0,1';
+	} else {
+		$public_flag='1';
+	}
+
+	$sql="SELECT agl.*,aca.count,aca.open_count
+		FROM artifact_group_list agl
+		LEFT JOIN artifact_counts_agg aca USING (group_artifact_id) 
+		WHERE agl.group_id='$group_id'
+		AND agl.is_public IN ($public_flag)
+		ORDER BY group_artifact_id ASC";
+
+	//required params for site_project_header();
+	$params['group']=$group_id;
+	$params['toptab']='tracker';
+	$params['pagename']='tracker';
+	$params['sectionvals']=array(group_getname($group_id));
+	
+	echo site_project_header($params);
+	echo '<B><A HREF="/tracker/reporting/?group_id='.$group_id.'">Reporting</A> | '
+		 .'<A HREF="/tracker/admin/?group_id='.$group_id.'">Admin</A>'
+		 .'</B><P>';
+
+	$result = db_query ($sql);
+	$rows = db_numrows($result);
+	if (!$result || $rows < 1) {
+		echo "<H1>No Accessible Trackers Found</H1>";
+		echo "<P>
+			<B>No trackers have been set up, or you cannot view them.<P><FONT COLOR=RED>The Admin for this project ".
+			"will have to set up data types using the <A HREF=\"/tracker/admin/?group_id=$group_id\">admin page</A></FONT></B>";
+	} else {
+
+		echo '
+		<P>
+		Choose a tracker and you can browse/edit/add items to it.
+		<P>';
+
+		/*
+			Put the result set (list of forums for this group) into a column with folders
+		*/
+
+		for ($j = 0; $j < $rows; $j++) {
+			echo '
+			<A HREF="/tracker/?atid='.db_result($result, $j, 'group_artifact_id').
+			'&group_id='.$group_id.'&func=browse">' .
+			html_image("images/ic/index.png","15","13",array("BORDER"=>"0")) . ' &nbsp;'.
+			db_result($result, $j, 'name').'</A> 
+			( <B>'. db_result($result, $j, 'open_count') .' open / '. db_result($result, $j, 'count') .' total</B> )<BR>'.
+			db_result($result, $j, 'description').'<P>';
+
+		}
+	}
+
+	echo site_project_footer(array());
+
+} else {
+
+	exit_no_group();
+
+}
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/mod.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/mod.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/mod.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,227 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id$
+  *
+  */
+
+
+$ath->header(array ('title'=>'Modify: '.$ah->getID(). ' - ' . $ah->getSummary(),'pagename'=>'tracker','atid'=>$ath->getID(),'sectionvals'=>array($group->getPublicName()) ));
+
+?>
+	<H2>[ #<?php echo $ah->getID(); ?> ] <?php echo $ah->getSummary(); ?></H2>
+
+	<TABLE WIDTH="100%">
+            <FORM ACTION="<?php echo $PHP_SELF; ?>?group_id=<?php echo $group_id; ?>&atid=<?php echo $ath->getID(); ?>" METHOD="POST">
+            <INPUT TYPE="HIDDEN" NAME="func" VALUE="monitor"> 
+            <INPUT TYPE="HIDDEN" NAME="artifact_id" VALUE="<?php echo $ah->getID(); ?>">
+        <TR>
+            <TD COLSPAN=2">
+            <INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Monitor">&nbsp;<A href="javascript:help_window('/help/tracker.php?helpname=monitor')"><B>(?)</B></A>
+            </FORM>
+            </TD>
+        </TR>
+
+	<FORM ACTION="<?php echo $PHP_SELF; ?>?group_id=<?php echo $group_id; ?>&atid=<?php echo $ath->getID(); ?>" METHOD="POST" enctype="multipart/form-data">
+	<INPUT TYPE="HIDDEN" NAME="func" VALUE="postmod">
+	<INPUT TYPE="HIDDEN" NAME="artifact_id" VALUE="<?php echo $ah->getID(); ?>">
+
+	<TR>
+		<TD><B>Submitted By:</B><BR><?php echo $ah->getSubmittedRealName(); ?> (<tt><?php echo $ah->getSubmittedUnixName(); ?></tt>)</TD>
+		<TD><B>Date Submitted:</B><BR>
+		<?php
+		echo date($sys_datefmt, $ah->getOpenDate() );
+
+		$close_date = $ah->getCloseDate();
+		if ($ah->getStatusID()==2 && $close_date > 1) {
+			echo '<BR><B>Date Closed:</B><BR>'
+			     .date($sys_datefmt, $close_date);
+		}
+		?>
+		</TD>
+	</TR>
+
+	<TR>
+		<TD><B>Data Type: <A href="javascript:help_window('/help/tracker.php?helpname=data_type')"><B>(?)</B></A></B><BR>
+		<?php
+
+//
+//  kinda messy - but works for now
+//  need to get list of data types this person can admin
+//
+	if ($ath->userIsAdmin()) {
+		$res=$group->getArtifactTypes();
+	} else {
+		$sql="SELECT agl.group_artifact_id,agl.name 
+			FROM artifact_group_list agl,artifact_perm ap
+			WHERE agl.group_artifact_id=ap.group_artifact_id 
+			AND ap.user_id='". user_getid() ."' 
+			AND ap.perm_level > 1
+			AND agl.group_id='$group_id'";
+		$res=db_query($sql);
+	}
+	echo html_build_select_box ($res,'new_artfact_type_id',$ath->getID(),false);
+
+		?>
+		</TD>
+		<TD>
+			<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Submit Changes">
+		</TD>
+	</TR>
+
+	<TR>
+		<TD><B>Category: <A href="javascript:help_window('/help/tracker.php?helpname=category')"><b>(?)</b></a></B><BR>
+		<?php
+
+		echo $ath->categoryBox('category_id', $ah->getCategoryID() );
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_cat=1">(admin)</A>';
+
+		?>
+		</TD>
+		<TD><B>Group: <A href="javascript:help_window('/help/tracker.php?helpname=group')"><b>(?)</b></a></B><BR>
+		<?php
+		
+		echo $ath->artifactGroupBox('artifact_group_id', $ah->getArtifactGroupID() );
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_group=1">(admin)</A>';
+		
+		?>
+		</TD>
+	</TR>
+
+	<TR>
+		<TD><B>Assigned To: <A href="javascript:help_window('/help/tracker.php?helpname=assignee')"><b>(?)</b></a></B><BR>
+		<?php
+
+		echo $ath->technicianBox('assigned_to', $ah->getAssignedTo() );
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&update_users=1">(admin)</A>';
+		?>
+		</TD><TD>
+		<B>Priority: <A href="javascript:help_window('/help/tracker.php?helpname=priority')"><b>(?)</b></a></B><BR>
+		<?php
+		/*
+			Priority of this request
+		*/
+		build_priority_select_box('priority',$ah->getPriority());
+		?>
+		</TD>
+	</TR>
+
+	<TR>
+		<TD>
+		<B>Status: <A href="javascript:help_window('/help/tracker.php?helpname=status')"><b>(?)</b></a></B><BR>
+		<?php
+
+		echo $ath->statusBox ('status_id', $ah->getStatusID() );
+
+		?>
+		</TD>
+		<TD>
+		<?php
+		if ($ath->useResolution()) {
+			echo '
+			<B>Resolution: <A href="javascript:help_window(\'/help/tracker.php?helpname=resolution\')"><b>(?)</b></a></B><BR>';
+			echo $ath->resolutionBox('resolution_id',$ah->getResolutionID());
+		} else {
+			echo '&nbsp;
+			<INPUT TYPE="HIDDEN" NAME="resolution_id" VALUE="100">';
+		}
+		?>
+		</TD>
+	</TR>
+
+	<TR>
+		<TD COLSPAN="2"><B>Summary: <A href="javascript:help_window('/help/tracker.php?helpname=summary')"><b>(?)</b></a></B><BR>
+		<INPUT TYPE="TEXT" NAME="summary" SIZE="45" VALUE="<?php 
+			echo $ah->getSummary(); 
+			?>" MAXLENGTH="60">
+		</TD>
+	</TR>
+
+	<TR><TD COLSPAN="2">
+		<?php echo nl2br($ah->getDetails()); ?>
+	</TD></TR>
+
+	<TR><TD COLSPAN="2">
+		<B>Use Canned Response: <A href="javascript:help_window('/help/tracker.php?helpname=canned_response')"><b>(?)</b></a></B><BR>
+		<?php
+		echo $ath->cannedResponseBox('canned_response');
+		echo '&nbsp;<A HREF="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_canned=1">(admin)</A>';
+		?>
+		<P>
+		<B>OR Attach A Comment: <A href="javascript:help_window('/help/tracker.php?helpname=comment')"><b>(?)</b></a></B><BR>
+		<TEXTAREA NAME="details" ROWS="7" COLS="60" WRAP="HARD"></TEXTAREA>
+		<P>
+		<H3>Followups:</H3>
+		<P>
+		<?php
+			echo $ah->showMessages(); 
+		?>
+	</TD></TR>
+
+	<TR><TD COLSPAN=2>
+		<B>Check to Upload &amp; Attach File:</B> <input type="checkbox" name="add_file" VALUE="1"> 
+		<A href="javascript:help_window('/help/tracker.php?helpname=attach_file')"><b>(?)</b></a><BR>
+		<P>
+		<input type="file" name="input_file" size="30">
+		<P>
+		<B>File Description:</B><BR>
+		<input type="text" name="file_description" size="40" maxlength="255">
+		<P>
+		<H4>Existing Files:</H4>
+		<?php
+		//
+		//	print a list of files attached to this Artifact
+		//
+		$file_list =& $ah->getFiles();
+		
+		$count=count($file_list);
+
+		$title_arr=array();
+		$title_arr[]='Delete';
+		$title_arr[]='Name';
+		$title_arr[]='Description';
+		$title_arr[]='Download';
+		echo html_build_list_table_top ($title_arr);
+
+		if ($count > 0) {
+
+			for ($i=0; $i<$count; $i++) {
+				echo '<TR><TD><INPUT TYPE="CHECKBOX" NAME="delete_file[]" VALUE="'. $file_list[$i]->getID() .'"> Delete</TD>'.
+				'<TD>'. $file_list[$i]->getName() .'</TD>
+				<TD>'.  $file_list[$i]->getDescription() .'</TD>
+				<TD><A HREF="/tracker/download.php?group_id='.$group_id.'&atid='. $ath->getID() .'&file_id='.$file_list[$i]->getID().'&aid='. $ah->getID() .'">Download</A></TD></TR>';
+			}
+
+		} else {
+			echo '<TR><TD COLSPAN=3>No Files Currently Attached</TD></TR>';
+		}
+
+		?>
+		</TABLE>
+	</TD><TR>
+
+	<TR><TD COLSPAN="2">
+		<H4>Change Log:</H4>
+		<?php 
+			echo $ah->showHistory(); 
+		?>
+	</TD></TR>
+
+	<TR><TD COLSPAN="2" ALIGN="MIDDLE">
+		<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Submit Changes">
+		</FORM>
+	</TD></TR>
+
+	</TABLE>
+
+<?php
+
+$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/reporting/index.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/reporting/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/reporting/index.php	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,305 @@
+<?php
+/**
+  *
+  * SourceForge Generic Tracker facility
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   index.php,v 1.1 2001/11/01 19:19:19 lo-lan-do Exp
+  *
+  */
+
+
+require_once('pre.php');
+require_once('www/project/stats/project_stats_utils.php');
+require_once('tool_reports.php');
+
+$page_title="Artifact Reporting System";
+//$bar_colors=array("red","blue");
+$bar_colors=array("#F76D6D","#6D6DF7");
+
+$group =& group_get_object($group_id);
+exit_assert_object($group, 'Group');
+
+$perm =& $group->getPermission( session_get_user() );
+exit_assert_object($perm, 'Permission');
+
+function reporting_header($group_id) {
+	global $atid;
+	
+	reports_header(
+		$group_id,
+		array('aging','tech','category','group','resolution'),
+		array('Aging Report','Distribution by Technician','Distribution by Category','Distribution by Group','Distribution by Resolution'),
+		'<b>Artifact Type: </b>'
+		 .html_build_select_box($GLOBALS['group']->getArtifactTypes(),'atid',$atid,false)
+		 .'<br><br>'
+	);
+}
+
+function quick_report($group_id,$title,$subtitle1,$sql1,$subtitle2,$sql2) {
+	global $bar_colors;
+
+	echo site_project_header(array("title"=>$title,'group'=>$group_id,'pagename'=>'tracker_reporting'));
+	reporting_header($group_id);
+	echo "\n<H1>$title</H1>";
+
+	reports_quick_graph($subtitle1,$sql1,$sql2,$bar_colors);
+
+	echo site_project_footer(array());
+}
+
+
+if ($perm->isMember()) {
+
+	include_once('www/include/HTML_Graphs.php');
+
+	if ($what) {
+
+		$period_clause=period2sql($period,$span,"open_date");
+
+		if ($what=="aging") {
+
+			site_project_header(array ("title"=>"Aging Report",'group'=>$group_id,'pagename'=>'tracker_reporting'));
+			reporting_header($group_id);
+			echo "\n<H1>Aging Report</H1>";
+
+			$time_now=time();
+//			echo $time_now."<P>";
+
+			if (!$period || $period=="lifespan") {
+				$period="month";
+				$span=12;
+			}
+
+			if (!$span) $span=1;
+			$sub_duration=period2seconds($period, 1);
+
+			for ($counter=1; $counter<=$span; $counter++) {
+
+				$start=($time_now-($counter*$sub_duration));
+				$end=($time_now-(($counter-1)*$sub_duration));
+
+				$sql="	SELECT avg((close_date-open_date)/(24*60*60)) 
+					FROM artifact
+					WHERE close_date > 0 
+					AND (open_date >= '$start' AND open_date <= '$end') 
+					AND resolution_id <> '2' 
+					AND group_artifact_id='$atid'";
+
+				$result = db_query($sql);
+
+				$names[$counter-1]=date("Y-m-d",($start))." to ".date("Y-m-d",($end));
+				$values[$counter-1]=((int)(db_result($result, 0,0)*1000))/1000;
+			}
+
+			GraphIt(
+				$names, $values,
+				"Average Turnaround Time For Closed Items (days)"
+			);
+
+			echo "<P>";
+
+			for ($counter=1; $counter<=$span; $counter++) {
+
+				$start=($time_now-($counter*$sub_duration));
+				$end=($time_now-(($counter-1)*$sub_duration));
+
+				$sql="	SELECT count(*)
+					FROM artifact
+					WHERE open_date >= '$start'
+					AND open_date <= '$end'
+					AND resolution_id <> '2'
+					AND group_artifact_id='$atid'";
+
+				$result = db_query($sql);
+
+				$names[$counter-1]=date("Y-m-d",($start))." to ".date("Y-m-d",($end));
+				$values[$counter-1]=db_result($result, 0,0);
+			}
+
+			GraphIt($names, $values, "Number of Items Submitted");
+
+			echo "<P>";
+
+			for ($counter=1; $counter<=$span; $counter++) {
+
+				$start=($time_now-($counter*$sub_duration));
+				$end=($time_now-(($counter-1)*$sub_duration));
+
+				$sql="	SELECT count(*)
+					FROM artifact
+					WHERE open_date <= '$end'
+					AND (close_date >= '$end' OR close_date < 1 OR close_date is null)
+					AND resolution_id <> '2'
+					AND group_artifact_id='$atid'";
+
+				$result = db_query($sql);
+
+				$names[$counter-1]=date("Y-m-d",($end));
+				$values[$counter-1]=db_result($result, 0,0);
+			}
+
+			GraphIt($names, $values, "Number of Items Still Open");
+
+			echo "<P>";
+
+			site_project_footer(array());
+
+		} else if ($what=="category") {
+
+			// Open
+			$sql1="
+				SELECT artifact_category.category_name AS Category,
+				       count(*) AS Count
+				FROM artifact_category,artifact 
+				WHERE artifact_category.id=artifact.category_id
+				AND artifact.status_id = '1'
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause 
+				GROUP BY Category";
+
+			// All
+			$sql2="
+				SELECT artifact_category.category_name AS Category,
+				       count(*) AS Count
+				FROM artifact_category,artifact
+				WHERE artifact_category.id=artifact.category_id
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause
+				GROUP BY Category";
+
+			quick_report(
+				$group_id,
+				"Distribution By Category",
+				"Open Items By Category",$sql1,
+				"All Items By Category",$sql2
+			);
+
+		} else if ($what=="tech") {
+
+			// Open
+			$sql1="
+				SELECT users.user_name AS Technician, count(*) AS Count
+				FROM users,artifact
+				WHERE users.user_id=artifact.assigned_to
+				AND artifact.status_id = '1'
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause
+				GROUP BY Technician";
+
+			// All
+			$sql2="
+				SELECT users.user_name AS Technician, count(*) AS Count
+				FROM users,artifact 
+				WHERE users.user_id=artifact.assigned_to
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause
+				GROUP BY Technician";
+
+			quick_report(
+				$group_id,
+				"Distribution By Technician",
+				"Open Items By Technician",$sql1,
+				"All Items By Technician",$sql2
+			);
+
+		} else if ($what=="group") {
+
+			// Open
+			$sql1="
+				SELECT artifact_group.group_name AS Group_Name,
+				      count(*) AS Count FROM artifact_group,artifact 
+				WHERE artifact_group.id=artifact.artifact_group_id
+				AND artifact.status_id = '1'
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause 
+				GROUP BY Group_Name";
+
+			// All
+			$sql2="
+				SELECT artifact_group.group_name AS Group_Name,
+				      count(*) AS Count FROM artifact_group,artifact
+				WHERE artifact_group.id=artifact.artifact_group_id
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause
+				GROUP BY Group_Name";
+
+			quick_report(
+				$group_id,
+				"Distribution By Artifact Group",
+				"Open By Artifact Group",$sql1,
+				"All Items By Artifact Group",$sql2
+			);
+
+		} else if ($what=="resolution") {
+
+			// Open
+			$sql1="
+				SELECT artifact_resolution.resolution_name AS Resolution,
+				       count(*) AS Count
+				FROM artifact_resolution,artifact
+				WHERE artifact_resolution.id=artifact.resolution_id
+				AND artifact.status_id = '1'
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause 
+				GROUP BY Resolution";
+
+			// All
+			$sql2="
+				SELECT artifact_resolution.resolution_name AS Resolution,
+				       count(*) AS Count
+				FROM artifact_resolution,artifact
+				WHERE artifact_resolution.id=artifact.resolution_id
+				AND artifact.resolution_id <> '2'
+				AND artifact.group_artifact_id='$atid'
+				$period_clause
+				GROUP BY Resolution";
+
+			quick_report(
+				$group_id,
+				"Distribution By Resolution",
+				"Open Items By Resolution",$sql1,
+				"All Items By Resolution",$sql2
+			);
+
+		} else {
+			exit_missing_param();
+		}
+
+	} else {
+		/*
+			Show main page
+		*/
+
+		//required params for site_project_header();
+		$params['group'] = $group_id;
+		$params['toptab'] = 'tracker';
+		$params['title'] = $page_title;
+		$params['pagename'] = 'tracker_reporting';
+	
+		echo site_project_header($params);
+
+		reporting_header($group_id);
+
+		echo site_project_footer($params);
+
+	}
+
+} else {
+
+	// Cannot show reports
+
+	exit_permission_denied();
+
+}
+?>

Added: trunk/gforge_base/evolvisforge/gforge/www/tracker/tracker-er-diagram.sda
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/www/tracker/tracker-er-diagram.sda	                        (rev 0)
+++ trunk/gforge_base/evolvisforge/gforge/www/tracker/tracker-er-diagram.sda	2010-02-25 13:21:30 UTC (rev 405)
@@ -0,0 +1,285 @@
+ÐÏࡱá                ;  þÿ	               C                þÿÿÿ        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿþÿÿÿ      þÿÿÿ      	   
+         
+                                                             !   "   #   $   %   &   '   (   )   *   +   ,   þÿÿÿ.   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   þÿÿÿD   E   þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t   E n t r y                                               ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        þÿÿÿþÿÿÿþÿÿÿ               	   
+         
+            þÿÿÿþÿÿÿ            þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿ
+  ÿÿÿÿ ‰.½…щР€)ä°±   Drawing 
+   StarDraw 5.0                                                                        8ÿÿÿfðÿÿþY  ó(                                                SfxDocumentInfo                                    g11<Á»                                 ¿11$¿                                g11Dû¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Info 0                                   Info 1                                   Info 2                                   Info 3                                      g11À­          <                                       TASK,0,1
+ 1,0,100,1,                                          þÿ                        à…ŸòùOh«‘ +'³Ù0   ø      	   h   
+   t      €   
+   Œ      ˜      ¤      °      ¼      È      Ô      à      ì         4   @    ;ô   @   €zàôXÀ@   €žVŠÿfÀ@   €ufì°XÀ                                                                                                                                                              »» ÿÿ    ¯     XOutdevItemPool      1   èèéêëìíîïðñòóôõö÷øùúûüý
+ è)èéêëìíîïðñùúûüýþ	
+
+&'()*+,-./06789:;UVWXYZ[\] ècèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst ètèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
+
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef”•–—˜™š›œžŸ ¡    d   î   ì  j  0 ƒ £  ¹'è       @  q          X  X  º'é    ,   @  ­       ÿÿÿÿ               X  »'ê    .   @  ß           –     2   X  X  X  ¼'ë        @         ÿÿÿÿ €      X  ½'ì    ž   @  µ       ÿÿÿÿ       Arrowÿÿÿÿ   
+                                   Arrowÿÿÿÿ   d           È                   d           X  X  XS  ¾'í    ª   @  k       ÿÿÿÿ       Arrowÿÿÿÿ   d           È                   d              Arrowÿÿÿÿ   }           ú   ú           ú       }           X  X  X_  ¿'î    .   @  ¥     ,    ¼    È   X  X  X  À'ï    .   @  ß     ,    È     ú   X  X  X  Á'ð       @          X  X  Â'ñ       @  .      X  òò    
+   @   H  óó    
+   @   ^  ôô    
+   @   t  õõ    
+   @   Š  öö    
+   @      ÷÷    
+   @   ¶  øø    
+   @   Ì  ´'ú       @  î          X  X  µ'û    €   @  n       ÿÿÿÿ €  ¸¸ÿÿ    ÿÿÿÿ €  €€€€    ÿÿÿÿ €ÿÿÌÌ™™    ÿÿÿÿ €ÿÿÿÿÿÿ   Gray 20%ÿÿÿÿ €ÌÌÌÌÌÌX  X   X2  XD  XV  ¶'ü   6   @  À       ÿÿÿÿ        ÿÿÿÿÿÿ      2 2 d d   X  ·'ý    (   @  ô       ÿÿÿÿ               X  ¸'þ   "  @  "	       ÿÿÿÿ    BMv      v   (   @   @     SD                   Ä   @      x^íSI
+Ã0ô¯sŒ½å\èzéü ÿ
+ª–46•Z…Bn›8x‘Ç)1²Ì”³.<觔B+ï Ì„¨Þ¢Ï40:prf
+š‡·í|q±ìüâÊ]~½+Háë•~|ðWíF¼ðúúMñbÀöž þâPÙ@úaüoÌCÄ“Ø[½È¡z¼6~U{Û߃<ª½Õ?¥ †ü–{¿rü=+Îý÷ô—|´¨ý•¿.©MåÛxò³åG¦
+Ü«±X  ÿÿ    
+   @   <	        
+   @   R	      
+   @   h	      
+   @   ~	      
+   @   ”	      
+   @   ª	      
+   @   À	      
+   @   Ö	      
+   @   ì	      
+   @   
+  		    
+   @   
+  
+
+    
+   @   .
+      
+   @   D
+      
+   @   Z
+  
+
+    
+   @   p
+      
+   @   †
+      
+   @   œ
+      
+   @   ²
+      
+   @   È
+      
+   @   Þ
+      
+   @   ô
+      
+   @   
+      
+   @          
+   @   6  (    
+   @   L  (    
+   @   b  (    
+   @   x  (    
+   @   Ž  (    
+   @   ¤  (    
+   @   º  (    
+   @   Ð  (    
+   @   æ  (     
+   @   ü  (!    
+   @     ("    
+   @   (  (#    
+   @   >  $$    
+   @   T  %%    
+   @   j  &&    
+   @   €  ''    
+   @   –  ((    
+   @   ¬  ))    
+   @   Â  ;(+       @  â        X  X  ,,        @  
+       ÿÿÿÿ €€€€€€€X  --    "   @  <
+     ,    È   X  X  ..    "   @  j
+     ,    È   X  X  //    
+   @   ˆ
+  00    
+   @   ž
+  11    
+   @   ´
+  22    
+   @   Ê
+  33    
+   @   à
+  44    
+   @   ö
+  55    
+   @     66    
+   @   "  II       @  @     ô  X  JJ    .   @  r     ¸g    A%    \)  X  X  X  KK       @  ™      X  (L    
+   @   ³  MM    
+   @   É  NN    
+   @   ß  OO    
+   @   õ  PP    
+   @     QQ       @  '      X  RR    
+   @   A  SS    
+   @   W  TT    
+   @   m  UU    
+   @   ƒ  VV       @  Ÿ      X  WW    
+   @   ¹  XX    
+   @   Ï  YY    
+   @   å  ZZ    
+   @   û  [[    
+   @     \\    
+   @   '  ]]    
+   @   =  ^^    
+   @   S  __    
+   @   i  ``    
+   @     aa    
+   @   •  bb    
+   @   «  cc    
+   @   Á  dd    
+   @   ×  ee    
+   @   í  gg       @  	      X  hh    
+   @   #  ii    
+   @   9  jj    
+   @   O  kk    
+   @   e  ll    
+   @   {  mm    
+   @   ‘  nn    
+   @   §  oo    
+   @   ½  pp    
+   @   Ó  qq    
+   @   é  rr    
+   @   ÿ  ss    
+   @     tt    
+   @   +  uu    
+   @   A  vv    
+   @   W  ww    
+   @   m  xx    
+   @   ƒ  yy    
+   @   ™  ùù    b   @  ë          è¹'                    í¾' ïÀ' X  X  X   X&  X,  X2  X8      t   @  k          ú´' ûµ'        ûµ'    ûµ'    ú´'  ûµ'     X  X  X&  X,  X8  XD  XV  **    <   @  »                       X  X  X  X   X&  77    <   @                         X  X  X  X   X&  HH  	  ”   @ 	 “          £+'    £+'            ¦' §'
+    ¦' §'  	  ¦' §'     X  X  X   X,  X2  X8  XJ  X\  Xn  ff  	  º   @  ]          QQ  VV     JJ  KK  QQ  VV     JJ KK     JJ KK     JJ    II  QQ  VV     QQ  VV  X  X  X&  XD  XV  Xh  Xt  XŒ  zz       @  Ÿ      gg  X      8   p   ª   Ö   €  6  p  ª  Ò  ñ      3  I  _  u  ‹  µ  A  ƒ  ·  å  û    '  =  S  i    •  «  Á  ×  í      /  E  [  q  ‡    ³  É  ß  õ    !  7  M  c  y    ¥  »  Ñ  ç  ý  	  )	  ?	  U	  k	  	  ©	  Õ	  
+  1
+  G
+  ]
+  s
+  ‰
+  Ÿ
+  µ
+  Ë
+  á
+    =  \  r  ˆ  ž  ´  Ê  ê       ,  B  b  x  Ž  ¤  º  Ð  æ  ü  
+  (
+  >
+  T
+  j
+  €
+  –
+  ¬
+  Ì
+  â
+  ø
+    $  :  P  f  |  ’  ¨  ¾  Ô  ê       ,  B  X  Æ  F  Ž  Ö  v  <  
+   P   ½  ˜%     EditEngineItemPool ¤      w   Ÿ¯Ÿ¡¢£¤¥¦§¨©ª«¬­±²³ Ÿ³Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°²³´ ´žŸ ¡¢£¤¥¦§©ª«¬­®¯°±²³´µ    6   f      0  <8  g*š   >  @  Ã0      
+              "                     ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -     
+              " X                  ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -     
+              "   È È               ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -     
+ Z             •                             €      d          " |ü°°              ,    StarBats      N               ÿ                 €      -          – àü`	`	              ,    StarBats      N               ÿ                 €      K          " ¨ý              ,    StarBats      N               ÿ                 €      -          – ¨ýÀÀ              ,    StarBats      N               ÿ                 €      K          " ¨ýpp              ,    StarBats      N               ÿ                 €      -          " ¨ý                ,    StarBats      N               ÿ                 €      -          " ¨ýÐ Ð               ,    StarBats      N               ÿ                 €      -          " ¨ý€%€%              ,    StarBats      N               ÿ                 €      -          " ¨ý0*0*              ,    StarBats      N               ÿ                 €      -     
+              r                     ,    StarBats                     ÿ                 €      -          r   èè              ,    StarBats                     ÿ                 €      -          r   ÐÐ              ,    StarBats                     ÿ                 €      -          r   ¸¸              ,    StarBats                     ÿ                 €      -          r                   ,    StarBats                     ÿ                 €      -          r   ˆˆ              ,    StarBats                     ÿ                 €      -          r   pp              ,    StarBats                     ÿ                 €      -          r   XX              ,    StarBats                     ÿ                 €      -          r   @@              ,    StarBats                     ÿ                 €      -          r   (#(#              ,    StarBats                     ÿ                 €      -     	              " ¨ýXX              ,    StarBats      i               ÿ                 €      -          " ¨ý°°              ,    StarBats      i               ÿ                 €      -          " ¨ý              ,    StarBats      i               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      i               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      i               ÿ                 €      -          " ¨ý              ,    StarBats      i               ÿ                 €      -          " ¨ýhh              ,    StarBats      i               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      i               ÿ                 €      -          " ¨ý              ,    StarBats      i               ÿ                 €      -    X  X, XJ Xh XT Xr 6'›    
+   @   ñ0  œœ       @  1          X  X     >   @  ]1     xd   d   d x þ”Yü  d   d üd x X  X'  <(ž       @  1       X  
+(Ÿ   µ  @  *3       €                      StarBats  °   !"-         €                      StarBats       !"-         €                      StarBats       !r-         €                      StarBats  X   !"-         €                      StarBats  X   !"-         €                      StarBats       !"-         €                      StarBats       !r-     X  XG  X€  X¹  Xò  X+ Xd @'    i  @  4    #   d   d   d        d   d Xd        d È d   d      ,d   d |üd °   @d   d àüd `	   ¸d   d ¨ýd    hd   d ¨ýd À   d   d ¨ýd p   Èd   d ¨ýd   	  xd   d ¨ýd Ð  
+  (#d   d ¨ýd €%   Ø'd   d ¨ýd 0*     d   d ¨ýd X 
+    d   d   d    þ”Y      d   d ¨ýd X X  X!  X4  XG  XZ  Xm  X€  X“  X¦  X¹  XÌ  Xß  Xò  X X A'¡   Š   @  15       d   d   d d d d   ¤d Ò d     d ôd     d d     d ,d     d È d  
+   d d d X  X  X&  X2  X>  XJ  XV  Xb  1'¢       @  r5     d  È   X  +'£   (   @  ž5             X  X  X  '¤    
+   @   À5  !'¥       @  â5      €      X  '¦    6   @   6      times   Ñ?	 helvetica  X  X  '§   Î   @  Ê6    Nd 
+   4d 
+   d 
+   öd 
+   {d 
+   îd 
+  F'§d 
+   hd 
+ 	  Ûd 
+ 
+  Ád 
+   d 
+   id 
+ 
+ ‘íd 
+  ý„d 
+ X  X  X"  X,  X6  X@  XJ  XT  X^  Xh  Xr  X|  X†  X  ?(¨    
+   @   7  '©       @  87       X  X  'ª       @  [7      X  '«       @  z7      X  '¬       @  ž7        X  X  '­       @  Á7      X  '®       @  à7      X  %'¯    
+   @   ú7  S'°    
+   @   8  "'±    
+   @   &8  '²    
+   @   <8      X  n  ˜  â    à  8  Î  ó  '  =  c  ¥    •  ½  Ü  û  #  B  a  w    £  µ  P  A=  g*š  
+              " ¨ýXX              ,    StarBats      N               ÿ                 €      -          " ¨ý°°              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ý`	`	              ,    StarBats      N               ÿ                 €      -          " ¨ý¸¸              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýhh              ,    StarBats      N               ÿ                 €      -          " ¨ýÀÀ              ,    StarBats      N               ÿ                 €      -          " ¨ý              ,    StarBats      N               ÿ                 €      -          " ¨ýpp              ,    StarBats      N               ÿ                 €      -  œœ    
+(Ÿ   €                      StarBats  °   !"-     !'¥   €      '¦  	 helvetica  '§ §d 
+     .  6  q    • ü    2   î    + ­K   Standard   Standard     ¾é  # è¹'  éº'  ê»'  ë¼'  ì½'  í¾'  î¿'  ïÀ'  ðÁ'  ñÂ'  ú´'  ûµ'  ü¶'  ý·'  þ¸'  +;(  ,,  --  ..  šg*  œœ  Ÿ
+(   @'  ¡A'  ¢1'  £+'  ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Object with arrow Standard Object with arrow     ¿é   è¹'  ê»' ë¼'  ì½' î¿' ïÀ'  ðÁ'        Object with shadow Standard Object with shadow     Àé   +;( ,,  --  ..         Object without fill Standard Object without fill     Áé   ú´'        Text Standard Text     Âé   è¹' ú´'       	 Text body Standard	 Text body     Ãé   è¹' ú´' §'        Text body justfied Standard Text body justfied     Äé   è¹' ú´' £+'        First line indent Standard First line indent     Åé   è¹' ú´' šg*  @'        Title Standard Title     Æé   è¹' ú´' §'        Title1 Standard Title1     Çé  	 è¹' ú´'  ûµ' +;( ,,  -- .. £+' §'        Title2 Standard Title2     Èé   ê»' ûµ' +;( ,,  -- .. šg*  @' ¡A' £+' §'        Heading Standard Heading     Éé   è¹' ú´' ¡A' §'        Heading1 Standard Heading1     Êé   è¹' ú´' ¡A' §' ©'        Heading2 Standard Heading2     Ëé   è¹' ú´' ¡A' §' ©' ¬'        Dimension Line Standard Dimension Line     Ìé   è¹'  ì½' í¾' î¿' ïÀ' ú´' §'        Home~LT~Gliederung 1   Home~LT~Gliederung 1þ¯ÿß  Ïé   è¹' ú´' šg* œœ  @' ¡A' £+'  ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Gliederung 2 Home~LT~Gliederung 1 Home~LT~Gliederung 2þ¯ÿß  Ðé    @' ¡A' §'	        Home~LT~Gliederung 3 Home~LT~Gliederung 2 Home~LT~Gliederung 3þ¯ÿß  Ñé    @' ¡A' §'        Home~LT~Gliederung 4 Home~LT~Gliederung 3 Home~LT~Gliederung 4þ¯ÿß  Òé    @' ¡A' §'
+        Home~LT~Gliederung 5 Home~LT~Gliederung 4 Home~LT~Gliederung 5þ¯ÿß  Óé    @' ¡A' §'
+        Home~LT~Gliederung 6 Home~LT~Gliederung 5 Home~LT~Gliederung 6þ¯ÿß  Ôé    @' ¡A' §'
+        Home~LT~Gliederung 7 Home~LT~Gliederung 6 Home~LT~Gliederung 7þ¯ÿß  Õé    @'	 ¡A' §'
+        Home~LT~Gliederung 8 Home~LT~Gliederung 7 Home~LT~Gliederung 8þ¯ÿß  Öé    @'
+ ¡A' §'
+        Home~LT~Gliederung 9 Home~LT~Gliederung 8 Home~LT~Gliederung 9þ¯ÿß  ×é    @' ¡A' §'
+       
+ Home~LT~Titel  
+ Home~LT~Titelþ¯ÿß  Íé   è¹' ú´' QQ  šg* £+' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Untertitel   Home~LT~Untertitelþ¯ÿß  Ýé   è¹' ú´' QQ  šg*  @' £+' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Notizen   Home~LT~Notizenþ¯ÿß  Úé   è¹' ú´' ¥!'  ¦' §' ©'  ª'  «'  ¬'  ­'  ®'         Home~LT~Hintergrundobjekte   Home~LT~Hintergrundobjekteþ¯ÿß  Øé   +;(  ,,  --  ..         Home~LT~Hintergrund   Home~LT~Hintergrundþ¯ÿß  Ùé   è¹' ú´'        Title   Title  @  Íé           Subtitle   Subtitle  @  Ýé           Background objects   Background objects  @  Øé          
+ Background  
+ Background  @  Ùé           Notes   Notes  @  Úé          	 Outline 1  	 Outline 1  @  Ïé          	 Outline 2	 Outline 1	 Outline 2  @  Ðé          	 Outline 3	 Outline 2	 Outline 3  @  Ñé          	 Outline 4	 Outline 3	 Outline 4  @  Òé          	 Outline 5	 Outline 4	 Outline 5  @  Óé          	 Outline 6	 Outline 5	 Outline 6  @  Ôé          	 Outline 7	 Outline 6	 Outline 7  @  Õé          	 Outline 8	 Outline 7	 Outline 8  @  Öé          	 Outline 9	 Outline 8	 Outline 9  @  ×é                t  Ð    P  ”  ê  D  €  â  P  –  ä  8  ž  >  ¤  
+  p  Ö  <  ¢  	  n	  ô	  Š
+    f  °  Ò  ú  6  b  „  ®  á  
+  G
+  z
+  ­
+  à
+                                                                                                                                                                                                                                                                                                                                                                                                                                          DrMd n%  _%  JoeMn   0   g110­    ¿11$¿   ¿11”‹                   ÿÿ                               O  ö   DrLy      LAYER_LAYOUT  DrLy    
+ LAYER_BCKGRND  DrLy      LAYER_BACKGRNDOBJ  DrLy     LAYER_CONTROLS  DrLy !    LAYER_MEASURELINES  DrMP À       &  JoeM   Çl  VT  Ð  Ð  Ð  Ð    DrML      DrOb <   SVDr &   ø  Ð  ’(  A&                     DrOb <   SVDr &   3D  Ð  Í[  A&                     DrOb <   SVDr &   ø  .  ’(  „L                     DrOb <   SVDr &   3D  .  Í[  „L                     DrXX     gg                   f                  Home~LT~Gliederung                                        ÿ    DrMP 8       ¶   JoeM   VT  Çl  {  y  ™  —    DrML      DrOb €   SVDr &   {  y  ½Q  0j               '          Home~LT~Hintergrundþ¯   {  y  ½Q  0j               DrXX     gg                   N                  Home~LT~Gliederung                       ÿ     DrMP ‡       ý  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML      DrOb Þ   SVDr &   º  ç
+  ›8  '0                 !         
+ Home~LT~Titelþ¯ƒ   º  ç
+  ›8  '0          d      xV4B1 O   õ    Click to move the slide
+ Home~LT~Titelþ¯   ž<(  Ÿ
+(  @'
+            DrOb é   SVDr &   Ü  Ç3  ˆG  "]                 #          Home~LT~Notizenþ¯Œ   Ü  Ç3  ˆG  "]          m      xV4B1 X   õ    Click to edit the notes format Home~LT~Notizenþ¯  ž<(  Ÿ
+(  @'           DrXX     gg                   V                  Home~LT~Gliederung                            ÿ     DrPg ä        b   JoeM   Çl  VT  Ð  Ð  Ð  Ð    DrML 8    DrMD ,     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrXX     Handoutsgg                   F                  Home~LT~Gliederung                ÿ    DrPg è       n  JoeM   VT  Çl  {  y  ™  —    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb Ç   SVDr &     Â  
+  J                              Standard q     Â  
+  J          R      xV4B1 =   õ    groups Standard  Ÿ
+(  @'   ¦    §
+            DrOb Ì   SVDr &   C  é  5
+  q                              Standard v   C  é  5
+  q          W      xV4B1 B   õ    Users Standard  ž<(  Ÿ
+(  @'   ¦    §
+            DrOb Ú   SVDr &   
+  °
+    8                              Standard „   
+  °
+    8          e      xV4B1 P   õ    artifact_group_list Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb Ï   SVDr &   ÿ0  É
+  ñ:  Q                              Standard y   ÿ0  É
+  ñ:  Q          Z      xV4B1 E   õ    Artifact Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb Ô   SVDr &   ª   y  W-  	                              Standard ~   ª   y  W-  	          _      xV4B1 J   õ   
+ Artifact_perm Standard  ž<(  Ÿ
+(  @'   ¦   
+ §   
+         DrOb Ø   SVDr &   ª   â	  W-  j                              Standard ‚   ª   â	  W-  j          c      xV4B1 N   õ    Artifact_category Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb Õ   SVDr &   ª   d  W-  ì                              Standard    ª   d  W-  ì          `      xV4B1 K   õ    Artifact_group Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb Ö   SVDr &   ª   ´  W-  <                              Standard €   ª   ´  W-  <          a      xV4B1 L   õ    Artifact_status Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb ×   SVDr &   VA  à  N  K	                              Standard    VA  à  N  K	          b      xV4B1 M   õ    Artifact_history Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb Ô   SVDr &   VA  ^
+  N  æ                              Standard ~   VA  ^
+  N  æ          _      xV4B1 J   õ   
+ Artifact_file Standard  ž<(  Ÿ
+(  @'   ¦   
+ §   
+         DrOb ×   SVDr &   BA  à  N  h                              Standard    VA  à  N  h          b      xV4B1 M   õ    Artifact_message Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb   SVDr &   #    ë  ç                              Standard            €ÿÿ€ÿÿ          ¡       
+    
+  ô    DrCn $                          DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   ¬    à1  î                              Standard            €ÿÿ€ÿÿ          ¡         ô  ÿ0  
+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   ¬  E  ‹!  Õ                              Standard            €ÿÿ€ÿÿ          ¡         ô  ª   &
+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   ¬  Ü  ‹!  Õ                              Standard            €ÿÿ€ÿÿ          ¡         ô  ª   ½    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   ¬    ‹!  ‰                              Standard            €ÿÿ€ÿÿ          ¡         ô  ª   ¨    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   ¬    ‹!  Ù                              Standard            €ÿÿ€ÿÿ          ¡         ô  ª   ø    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   T  Ü  ‹!  	                              Standard            €ÿÿ€ÿÿ          ¡       5
+  -  ª   ½    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   :  &  7B  î                              Standard            €ÿÿ€ÿÿ          ¡       ñ:  
+  VA      DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   :  Á  7B  î                              Standard            €ÿÿ€ÿÿ          ¡       ñ:  
+  VA  ¢
+    DrCn $                         DrCn $   	                        ;                                               PF    ÿÿ DrOb   SVDr &   :  ,  7B                                Standard            €ÿÿ€ÿÿ          ¡       ñ:  
+  VA  $    DrCn $                         DrCn $   
+                        ;                                               PF    ÿÿ DrOb ×   SVDr &   VA  I  N  Ñ                              Standard    VA  I  N  Ñ          b      xV4B1 M   õ    Artifact_monitor Standard  ž<(  Ÿ
+(  @'   ¦    §            DrOb   SVDr &   :  ,  7B  n                              Standard            €ÿÿ€ÿÿ          ¡       ñ:  
+  VA      DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   T  L  à1  î                              Standard            €ÿÿ€ÿÿ          ¡       5
+  -  ÿ0  
+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   v,  E  à1  î                              Standard            €ÿÿ€ÿÿ          ¡       W-  &
+  ÿ0  
+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   v,  ,  à1  ‰                              Standard            €ÿÿ€ÿÿ          ¡       W-  ¨  ÿ0  
+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   v,  ,  à1  Ù                              Standard            €ÿÿ€ÿÿ          ¡       W-  ø  ÿ0  
+    DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrOb   SVDr &   T  L  7B  n                              Standard            €ÿÿ€ÿÿ          ¡       5
+  -  VA      DrCn $                         DrCn $                           ;                                               PF    ÿÿ DrXX     gg                   F                  Home~LT~Gliederung                 ÿ     DrPg        {  JoeM   VT  Çl  Ð  Ð  Ð  Ð    DrML 8    DrMD ,    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrOb <   SVDr &   º  ç
+  ›8  '0                      DrOb Ý   SVDr &   Ü  Ç3  ˆG  #]                   #          Home~LT~Notizenþ¯€   Ü  Ç3  ˆG  #]          a      xV4B1 L   õ    Click to add notes Home~LT~Notizenþ¯  ž<(  Ÿ
+(  @'           DrXX     gg                   V                  Home~LT~Gliederung                            ÿ     DrXX   B          þÿÿGeneric Printer                                                                                                                 SGENPRT PostScript                D       VT  $m  áí   ²      VT  $m      d   ,,lpr -P zonker                                                                                                                                                                                                                                                   default_queue                                                                                                                                                                                                                                                   SGENPRT                                                                                                                                                                                                                                                                                         	     DrVw P     SVDr€  
+   SVDr  :   SVDr    ö  ö  þ   þ   ö     ö                SVDrA  Layout  :   SVDr         è  è         þ      þ         SVDr  Ü        #   SVDr                            SVDr#            SVDr0     SVDr1    SVDr3    SVDr4    SVDr@ SVDr     SVDrD     SVDrP    SVDrQ Â    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDrHL      DrHL      DrHL       8ÿÿÿfðÿÿþY  ó(                                                 
+                                                                                    R o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ    ‰.½…щР€)ä°±                       À       C o m p O b j                                                         ÿÿÿÿ                                        =        O l e                                                         
+  ÿÿÿÿÿÿÿÿÿÿÿÿ                                              p e r s i s t   e l e m e n t s                                 "        ÿÿÿÿ                                              S f x D o c u m e n t I n f o                                         ÿÿÿÿÿÿÿÿ                                       u      S f x W i n d o w s                                               ÿÿÿÿ   ÿÿÿÿ                                              S f x S t y l e S h e e t s                                       ÿÿÿÿÿÿÿÿÿÿÿÿ                                       YL       S u m m a r y I n f o r m a t i o n                           (     ÿÿÿÿÿÿÿÿ                                       (      S t a r D r a w D o c u m e n t 3                               $  ÿÿÿÿÿÿÿÿÿÿÿÿ                                    -   °+                                                                          ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ                                                                            ÿÿÿÿÿÿÿÿÿÿÿÿ                                    þÿÿÿ        
\ No newline at end of file




More information about the evolvis-commits mailing list